Name: series-workflow87qgf Phase: Succeeded StartedAt: 2026-08-29 15:53:16 +0000 UTC FinishedAt: 2026-08-29 20:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[0] Phase: Succeeded StartedAt: 2026-08-29 15:53:16 +0000 UTC FinishedAt: 2026-08-29 16:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 15:53:16 +0000 UTC FinishedAt: 2026-08-29 16:59:39 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_ESPINTCP", "INET_ESP", "INET6_ESP", "XFRM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_ESPINTCP", "INET_ESP", "INET6_ESP", "XFRM" ], "series_id": "e865d64e-bf97-4444-bb00-9df41f311cb8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "handle_esp", "espintcp_rcv", "espintcp_queue_out", "espintcp_push_skb", "espintcp_sendmsg", "espintcp_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKClgIHdpdGggYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgaW4gYGhhbmRsZV9lc3AoKWAgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gVGhpcyBjaGFuZ2UgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGN1bGF0ZWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgKGBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkYCkgZml0cyBzYWZlbHkgaW50byB0aGUgYHRyYW5zcG9ydF9oZWFkZXJgIGZpZWxkIHdpdGhvdXQgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdzsgaWYgaW52YWxpZCwgaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQgaW5jcmVtZW50cyB0aGUgZXJyb3IgY291bnRlci5cblxuVGhpcyBpcyBhIGJvdW5kcy9vdmVyZmxvdyB2YWxpZGF0aW9uIGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgY29ycnVwdGVkIHNrYiBoZWFkZXIgb2Zmc2V0cyAod2hpY2ggbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGFzc2VydGlvbiBmYWlsdXJlcyBjYXVnaHQgYnkgS0FTQU4vREVCVUdfTkVUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluY29taW5nIEVTUCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBuZXQveGZybS9lc3BpbnRjcC5jIGJ5IHVzaW5nIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIGJlZm9yZSByZXNldHRpbmcgdGhlbSBpbiBoYW5kbGVfZXNwKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIFJGQyA4MjI5IEVTUC1pbi1UQ1AgZW5jYXBzdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0zMCw3ICYjNDM7MzAsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRjcF9za2JfY2IgKnRjcF9jYiA9IChzdHJ1Y3QgdGNwX3NrYl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbi1cdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4mIzQzO1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbiYjNDM7XHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXHUwMDNlbmhvZmYgKi9cbiBcdG1lbW1vdmUoc2tiLVx1MDAzZWNiLCBcdTAwMjZ0Y3BfY2ItXHUwMDNlaGVhZGVyLCBzaXplb2YodGNwX2NiLVx1MDAzZWhlYWRlcikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE5bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluY29taW5nIEVTUCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBuZXQveGZybS9lc3BpbnRjcC5jIGJ5IHVzaW5nIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIGJlZm9yZSByZXNldHRpbmcgdGhlbSBpbiBoYW5kbGVfZXNwKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIFJGQyA4MjI5IEVTUC1pbi1UQ1AgZW5jYXBzdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jCmluZGV4IDY3NGFlZGM1YWY1YTIuLjNlNzJiOWYwNjdiOWIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL2VzcGludGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuYwpAQCAtMzAsNyAmIzQzOzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItJmd0O2NiOwogCi0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKJiM0MzsJaWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHsKJiM0MzsJCVhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKIAkvKiByZXN0b3JlIElQIENCLCB3ZSBuZWVkIGF0IGxlYXN0IElQNkNCLSZndDtuaG9mZiAqLwogCW1lbW1vdmUoc2tiLSZndDtjYiwgJmFtcDt0Y3BfY2ItJmd0O2hlYWRlciwgc2l6ZW9mKHRjcF9jYi0mZ3Q7aGVhZGVyKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgRVNQLWluLVRDUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gUmlnaHQsIEVTUCBlbmNhcHN1bGF0ZWQgd2l0aGluIFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5LiBGaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBuZXQveGZybS9lc3BpbnRjcC5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHksIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgWEZSTSBmcmFtZXdvcmsuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMsIGluIHRlcm1zIG9mIHJlc291cmNlIHVzYWdlLCBzZWN1cml0eSwgYW5kIHBlcmZvcm1hbmNlPwoKSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSB0cmF2ZXJzZSB0aGUgY29kZSBhbmQgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGF0IHdpbGwgaGVscCBtZSBxdWlja2x5IGZpbmQgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBldmFsdWF0ZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBwcm9wZXJseS4gSSBuZWVkIGEgc29saWQgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29kZSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9zdHJwYXJzZXIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwaW50Y3AuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrbXNnLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaG90ZGF0YS5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDEzOlx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2spXG4gIDE0Olx0e1xuICAxNTpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpIFx1MDAzZT0gc2stXHUwMDNlc2tfcmN2YnVmIHx8XG4gIDE2Olx0XHQgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuICAxNzpcdFx0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XG4gIDE4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAxOTpcdFx0XHRyZXR1cm47XG4gIDIwOlx0XHR9XG4gIDIxOlx0XG4gIDIyOlx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4gIDIzOlx0XG4gIDI0Olx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gIDI1Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlaWtlX3F1ZXVlLCBza2IpO1xuICAyNjpcdFx0Y3R4LVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xuICAyNzpcdH1cbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiAgMzA6XHR7XG4gIDMxOlx0XHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuICAzMjpcdFxuICAzMzpcdFx0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbiAgMzQ6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICAzNTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgMzY6XHRcdFx0cmV0dXJuO1xuICAzNzpcdFx0fVxuICAzODpcdFxuICAzOTpcdFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuICA0MDpcdFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4gIDQxOlx0XG4gIDQyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDQzOlx0XHRza2ItXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXHUwMDNlc2tiX2lpZik7XG4gIDQ0Olx0XHRpZiAoIXNrYi1cdTAwM2VkZXYpIHtcbiAgNDU6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICA0NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNDc6XHRcdFx0Z290byBvdXQ7XG4gIDQ4Olx0XHR9XG4gIDQ5Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDUwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gIDUxOlx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuICA1MjpcdFx0XHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcbiAgNTM6XHRcdGVsc2VcbiAgNTQ6XHQjZW5kaWZcbiAgNTU6XHRcdFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XG4gIDU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNTc6XHRvdXQ6XG4gIDU4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNTk6XHR9XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG4gIDY0Olx0XHRcdFx0XHRcdFx0c3RycCk7XG4gIDY1Olx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XG4gIDY2Olx0XHRpbnQgbGVuID0gcnhtLVx1MDAzZWZ1bGxfbGVuIC0gMjtcbiAgNjc6XHRcdHUzMiBub25lc3BfbWFya2VyO1xuICA2ODpcdFx0aW50IGVycjtcbiAgNjk6XHRcbiAgNzA6XHRcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XG4gIDcyOlx0XHRcdHU4IGRhdGE7XG4gIDczOlx0XG4gIDc0Olx0XHRcdGVyciA9IHNrYl9jb3B5X2JpdHMoc2tiLCByeG0tXHUwMDNlb2Zmc2V0ICYjNDM7IDIsIFx1MDAyNmRhdGEsIDEpO1xuICA3NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDc2Olx0XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDc3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDc4Olx0XHRcdFx0cmV0dXJuO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgbW9kdWxlIGludmVzdGlnYXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBlc3BpbnRjcC5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIE15IGluaXRpYWwgbW92ZSB3b3VsZCBiZSB0byBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3hmcm1gIGRpcmVjdG9yeS4gSSYjMzk7ZCBzdGFydCBieSBncmVwcGluZywgb2J2aW91c2x5LiBJJiMzOTtsbCBzZWFyY2ggdGhvc2UgZmlsZXMgZm9yICYjMzQ7ZXNwaW50Y3AmIzM0Oy4gVGhhdCYjMzk7bGwgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBmaW5kIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIGJ1aWxkIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYW5kIGhvdyBgZXNwaW50Y3AuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY2xlYXIgY2x1ZXMgcHJldHR5IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01LSNpbmNsdWRlIFx1MDAzY25ldC9lc3AuaFx1MDAzZVxubmV0L3hmcm0vZXNwaW50Y3AuYzo2OiNpbmNsdWRlIFx1MDAzY25ldC9lc3BpbnRjcC5oXHUwMDNlXG5uZXQveGZybS9lc3BpbnRjcC5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvc2ttc2cuaFx1MDAzZVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTEtXG5uZXQveGZybS9lc3BpbnRjcC5jOjEyOnN0YXRpYyB2b2lkIGhhbmRsZV9ub25lc3Aoc3RydWN0IGVzcGludGNwX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMy1cdFx0XHQgIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTI5PXN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNjAtXG5uZXQveGZybS9lc3BpbnRjcC5jOjYxOnN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYy02Mi17XG5uZXQveGZybS9lc3BpbnRjcC5jOjYzOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG5uZXQveGZybS9lc3BpbnRjcC5jLTY0LVx0XHRcdFx0XHRcdHN0cnApO1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTIwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjE6c3RhdGljIGludCBlc3BpbnRjcF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMjIte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTQxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxNDI6c3RhdGljIGludCBlc3BpbnRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDMtXHRcdFx0ICAgIGludCBmbGFncylcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQ0LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6MTQ1Olx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQ2LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTE3NS1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTc2OmludCBlc3BpbnRjcF9xdWV1ZV9vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzcte1xubmV0L3hmcm0vZXNwaW50Y3AuYzoxNzg6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzktXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xODktfVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTA6RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcXVldWVfb3V0KTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMTkxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTI6LyogZXNwaW50Y3AgbGVuZ3RoIGZpZWxkIGlzIDJCIGFuZCBsZW5ndGggaW5jbHVkZXMgdGhlIGxlbmd0aCBmaWVsZCYjMzk7cyBzaXplICovXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5My0jZGVmaW5lIE1BWF9FU1BJTlRDUF9NU0cgKCgoMSBcdTAwM2NcdTAwM2MgMTYpIC0gMSkgLSAyKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjE5NTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZyxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTk2LVx0XHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjE1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMTY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcbm5ldC94ZnJtL2VzcGludGNwLmM6MjE3Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnLCBpbnQgZmxhZ3MpXG5uZXQveGZybS9lc3BpbnRjcC5jLTIxOC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDctXG5uZXQveGZybS9lc3BpbnRjcC5jOjI0ODpzdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC94ZnJtL2VzcGludGNwLmMtMjQ5LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6MjUwOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6MjUxOlx0c3RydWN0IGVzcGludGNwX21zZyAqZW1zZyA9IFx1MDAyNmN0eC1cdTAwM2VwYXJ0aWFsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yNTItXHRpbnQgZXJyO1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjYxLVx0aWYgKGVtc2ctXHUwMDNlc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNjI6XHRcdGVyciA9IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTI2My1cdGVsc2Vcbm5ldC94ZnJtL2VzcGludGNwLmM6MjY0Olx0XHRlcnIgPSBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTI2NS1cdGlmIChlcnIgPT0gLUVBR0FJTikge1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjc2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNzc6aW50IGVzcGludGNwX3B1c2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL2VzcGludGNwLmMtMjc4LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6Mjc5Olx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6MjgwOlx0c3RydWN0IGVzcGludGNwX21zZyAqZW1zZyA9IFx1MDAyNmN0eC1cdTAwM2VwYXJ0aWFsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yODEtXHR1bnNpZ25lZCBpbnQgbGVuO1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjkxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyOTI6XHRlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIDApO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yOTMtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjMwNTpcdGVzcGludGNwX3B1c2hfbXNncyhzaywgMCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTMwNi1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwOC19XG5uZXQveGZybS9lc3BpbnRjcC5jOjMwOTpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9wdXNoX3NrYik7XG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMC1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzExOnN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMi17XG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMy1cdGxvbmcgdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzozMTQ6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYzozMTU6XHRzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnID0gXHUwMDI2Y3R4LVx1MDAzZXBhcnRpYWw7XG5uZXQveGZybS9lc3BpbnRjcC5jLTMxNi1cdHN0cnVjdCBpb3ZfaXRlciBwZnhfaXRlcjtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTMzMi1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzMzOlx0ZXJyID0gZXNwaW50Y3BfcHVzaF9tc2dzKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zMzQtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zNzYtXG5uZXQveGZybS9lc3BpbnRjcC5jOjM3NzpcdGVyciA9IGVzcGludGNwX3B1c2hfbXNncyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzc4LVx0LyogdGhpcyBtZXNzYWdlIGNvdWxkIGJlIHBhcnRpYWxseSBzZW50LCBrZWVwIGl0ICovXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTEtXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5MjpzdGF0aWMgc3RydWN0IHByb3RvIGVzcGludGNwX3Byb3QgX19yb19hZnRlcl9pbml0O1xubmV0L3hmcm0vZXNwaW50Y3AuYzozOTM6c3RhdGljIHN0cnVjdCBwcm90b19vcHMgZXNwaW50Y3Bfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcbm5ldC94ZnJtL2VzcGludGNwLmM6Mzk0OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gZXNwaW50Y3A2X3Byb3Q7XG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NTpzdGF0aWMgc3RydWN0IHByb3RvX29wcyBlc3BpbnRjcDZfb3BzO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTYtc3RhdGljIERFRklORV9NVVRFWCh0Y3B2Nl9wcm90X211dGV4KTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk3LVxubmV0L3hmcm0vZXNwaW50Y3AuYzozOTg6c3RhdGljIHZvaWQgZXNwaW50Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTM5OS17XG5uZXQveGZybS9lc3BpbnRjcC5jOjQwMDpcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTQwMS1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQwNi1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MDgte1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0MDk6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yayxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDEwOlx0XHRcdFx0XHRcdHN0cnVjdCBlc3BpbnRjcF9jdHgsIHdvcmspO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00MTEtXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXHUwMDNlc3RycC5zaztcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxNC1cdGlmICghY3R4LVx1MDAzZXR4X3J1bm5pbmcpXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxNTpcdFx0ZXNwaW50Y3BfcHVzaF9tc2dzKHNrLCAwKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDE2LVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxOC1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDE5OnN0YXRpYyB2b2lkIGVzcGludGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNDIwLXtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDIxOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDIyLVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDI2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mjc6c3RhdGljIHZvaWQgZXNwaW50Y3BfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mjk6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00MzAtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz00MzU9Ym9vbCB0Y3BfaXNfdWxwX2VzcChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzNi17XG5uZXQveGZybS9lc3BpbnRjcC5jOjQzNzpcdHJldHVybiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNmVzcGludGNwX3Byb3QgfHwgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZlc3BpbnRjcDZfcHJvdDtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDM4LX1cbm5ldC94ZnJtL2VzcGludGNwLmM9NDM5PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9pc191bHBfZXNwKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDE6c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQyOlx0XHRcdCBzdHJ1Y3QgcHJvdG9fb3BzICplc3BpbnRjcF9vcHMsXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0My1cdFx0XHQgY29uc3Qgc3RydWN0IHByb3RvICpvcmlnX3Byb3QsXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cdFx0XHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6c3RhdGljIGludCBlc3BpbnRjcF9pbml0X3NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ2LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0OC1cdHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQ5Olx0XHQucmN2X21zZyA9IGVzcGludGNwX3Jjdixcbm5ldC94ZnJtL2VzcGludGNwLmM6NDUwOlx0XHQucGFyc2VfbXNnID0gZXNwaW50Y3BfcGFyc2UsXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ1MS1cdH07XG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1MjpcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eDtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDUzLVx0aW50IGVycjtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDU0LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NTU6XHQvKiBzb2NrbWFwIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZXNwaW50Y3AgKi9cbm5ldC94ZnJtL2VzcGludGNwLmMtNDU2LVx0aWYgKHNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3My1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVCkge1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NzQ6XHRcdHNrLVx1MDAzZXNrX3Byb3QgPSBcdTAwMjZlc3BpbnRjcF9wcm90O1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NzU6XHRcdHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VvcHMgPSBcdTAwMjZlc3BpbnRjcF9vcHM7XG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3Ni1cdH0gZWxzZSB7XG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3Ny1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ0Y3B2Nl9wcm90X211dGV4KTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDc4Olx0XHRpZiAoIWVzcGludGNwNl9wcm90LnJlY3Ztc2cpXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ3OTpcdFx0XHRidWlsZF9wcm90b3MoXHUwMDI2ZXNwaW50Y3A2X3Byb3QsIFx1MDAyNmVzcGludGNwNl9vcHMsIHNrLVx1MDAzZXNrX3Byb3QsIHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VvcHMpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00ODAtXHRcdG11dGV4X3VubG9jayhcdTAwMjZ0Y3B2Nl9wcm90X211dGV4KTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDgxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODI6XHRcdHNrLVx1MDAzZXNrX3Byb3QgPSBcdTAwMjZlc3BpbnRjcDZfcHJvdDtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDgzOlx0XHRzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzID0gXHUwMDI2ZXNwaW50Y3A2X29wcztcbm5ldC94ZnJtL2VzcGludGNwLmMtNDg0LVx0fVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDg3LVx0Y3R4LVx1MDAzZXNhdmVkX2Rlc3RydWN0ID0gc2stXHUwMDNlc2tfZGVzdHJ1Y3Q7XG5uZXQveGZybS9lc3BpbnRjcC5jOjQ4ODpcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBlc3BpbnRjcF9kYXRhX3JlYWR5O1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODk6XHRzay1cdTAwM2Vza193cml0ZV9zcGFjZSA9IGVzcGludGNwX3dyaXRlX3NwYWNlO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTA6XHRzay1cdTAwM2Vza19kZXN0cnVjdCA9IGVzcGludGNwX2Rlc3RydWN0O1xubmV0L3hmcm0vZXNwaW50Y3AuYy00OTEtXHRyY3VfYXNzaWduX3BvaW50ZXIoaWNzay1cdTAwM2VpY3NrX3VscF9kYXRhLCBjdHgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTI6XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXdvcmssIGVzcGludGNwX3R4X3dvcmspO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00OTMtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjUwNTpzdGF0aWMgdm9pZCBlc3BpbnRjcF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNTA2LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTA3Olx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTA4LVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNC1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MTU6XHRcdGVzcGludGNwX3B1c2hfc2tiKHNrLCBza2IpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01MTYtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MTktXG5uZXQveGZybS9lc3BpbnRjcC5jOjUyMDpzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC94ZnJtL2VzcGludGNwLmMtNTIxLXtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIyOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIzOlx0c3RydWN0IGVzcGludGNwX21zZyAqZW1zZyA9IFx1MDAyNmN0eC1cdTAwM2VwYXJ0aWFsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01MjQtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU0NzpzdGF0aWMgX19wb2xsX3QgZXNwaW50Y3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTQ4LVx0XHRcdCAgICAgIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTAtXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NTE6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NTItXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU1NjpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NTc6XHRcdFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTU4LVx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJvdG8gKm9yaWdfcHJvdCxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2MC17XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MTpcdG1lbWNweShlc3BpbnRjcF9wcm90LCBvcmlnX3Byb3QsIHNpemVvZihzdHJ1Y3QgcHJvdG8pKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYyOlx0bWVtY3B5KGVzcGludGNwX29wcywgb3JpZ19vcHMsIHNpemVvZihzdHJ1Y3QgcHJvdG9fb3BzKSk7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MzpcdGVzcGludGNwX3Byb3QtXHUwMDNlc2VuZG1zZyA9IGVzcGludGNwX3NlbmRtc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NDpcdGVzcGludGNwX3Byb3QtXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NTpcdGVzcGludGNwX3Byb3QtXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY2Olx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY3Olx0ZXNwaW50Y3Bfb3BzLVx1MDAzZXBvbGwgPSBlc3BpbnRjcF9wb2xsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NjgtfVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjktXG5uZXQveGZybS9lc3BpbnRjcC5jOjU3MDpzdGF0aWMgc3RydWN0IHRjcF91bHBfb3BzIGVzcGludGNwX3VscCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzE6XHQubmFtZSA9IFwmIzM0O2VzcGludGNwXCYjMzQ7LFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NzItXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTczOlx0LmluaXQgPSBlc3BpbnRjcF9pbml0X3NrLFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NzQtfTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzY6dm9pZCBfX2luaXQgZXNwaW50Y3BfaW5pdCh2b2lkKVxubmV0L3hmcm0vZXNwaW50Y3AuYy01Nzcte1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1Nzg6XHRidWlsZF9wcm90b3MoXHUwMDI2ZXNwaW50Y3BfcHJvdCwgXHUwMDI2ZXNwaW50Y3Bfb3BzLCBcdTAwMjZ0Y3BfcHJvdCwgXHUwMDI2aW5ldF9zdHJlYW1fb3BzKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc5LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1ODA6XHR0Y3BfcmVnaXN0ZXJfdWxwKFx1MDAyNmVzcGludGNwX3VscCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTU4MS19XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NS0jaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDY6I2luY2x1ZGUgXHUwMDNjbmV0L2VzcGludGNwLmhcdTAwM2Vcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDctI2VuZGlmXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDA0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxNC0jaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQxNTpcdGVzcGludGNwX2luaXQoKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxNi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzMyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIFhGUk1fRVNQSU5UQ1AqKgoKT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBYRlJNX0VTUElOVENQYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGRlZmluaXRpb25zLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZmVhdHVyZSBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGFyZSBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgbG9naWMgZnJvbSB0aGVyZS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgY2hlY2tpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIG5ldHdvcmtpbmctcmVsYXRlZCBmaWxlcywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gWEZSTSAoSVBzZWMgZnJhbWV3b3JrKS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsYWlkIG91dCwgYnV0IEkmIzM5O20gcHJlcGFyZWQgZm9yIGEgYml0IG9mIGEgaHVudCBpZiBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBYRlJNX0VTUElOVENQYCAqYWN0dWFsbHkqIG1lYW5zIGluIHRlcm1zIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBJbXBsaWNhdGlvbnMgb2YgQ09ORklHX1hGUk1fRVNQSU5UQ1AqKgoKT2theSwgc28gYENPTkZJR19YRlJNX0VTUElOVENQYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB3aGF0JiMzOTtzICp1c2luZyogdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGl0LCBhbmQgdGhlIGtlcm5lbCBtb2R1bGVzIG9yIGFwcGxpY2F0aW9ucyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmVseSBvbiBpdC4gQSBxdWljayBgZ3JlcGAgdGhyb3VnaCB0aGUgcmVsZXZhbnQga2VybmVsIHNvdXJjZSB0cmVlcyBpcyBwcm9iYWJseSB0aGUgZmlyc3Qgc3RlcCDigJMgZmluZCBhbGwgaW5zdGFuY2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW4gYEtjb25maWdgIGZpbGVzLCB0byBzZWUgaG93IHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuIEkgZXhwZWN0IGl0JiMzOTtzIHBhcnQgb2YgYSBsYXJnZXIgc2VjdXJpdHkgZmVhdHVyZSBzZXQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gSVBzZWMuCgpJJiMzOTttIGFzc3VtaW5nIHRoaXMgZW5hYmxlcyB0aGUgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpIHByb3RvY29sIHdpdGhpbiB0aGUgWEZSTSAoZVh0ZXJuYWwgRmlyZXdhbGwgYW5kIFJvdXRpbmcgTWFuYWdlbWVudCkgZnJhbWV3b3JrLCBidXQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSAmIzM0O0lOVENQJiMzNDsgc3VmZml4IHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIFRDUCBlbmNhcHN1bGF0aW9uICp3aXRoaW4qIEVTUC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBzY2VuYXJpb3Mgd2hlcmUgc3RhbmRhcmQgSVBzZWMgdHJhdmVyc2FsIG1pZ2h0IGJlIHByb2JsZW1hdGljIOKAkyBwZXJoYXBzIE5BVCB0cmF2ZXJzYWwsIG9yIGVudmlyb25tZW50cyB3aGVyZSBkaXJlY3QgVURQIG9yIEdSRSBlbmNhcHN1bGF0aW9uIGlzIHJlc3RyaWN0ZWQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgbmVjZXNzaXRhdGUgZW5jYXBzdWxhdGluZyBFU1AgdHJhZmZpYyBpbiBUQ1AuIElzIHRoaXMgYSBjb21tb24gcHJhY3RpY2U/IFdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSB0cmFkZS1vZmZzPyBBcmUgdGhlcmUgZG9jdW1lbnRlZCB1c2UgY2FzZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbj8KCk15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUQ1AmIzM5O3MgY29ubmVjdGlvbi1vcmllbnRlZCBuYXR1cmUgaW50cm9kdWNlcyBhIGRpZmZlcmVudCBhdHRhY2sgc3VyZmFjZSBjb21wYXJlZCB0byBVRFAuIEFyZSB0aGVyZSBrbm93biB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBUQ1AtZW5jYXBzdWxhdGVkIEVTUCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXhpdGllcyB3aXRoIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIGVuY2Fwc3VsYXRpb24gaXMgaW1wbGVtZW50ZWQuIElzIGl0IGEgc2ltcGxlIFRDUCBzb2NrZXQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIGZvcm0gb2YgcHJvdG9jb2wgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsPwoKRmluYWxseSwgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24gaXMga2V5LiBUaGUgZXh0cmEgVENQIGhlYWRlciB3aWxsIGFkZCBvdmVyaGVhZCwgYW5kIHRoZSBrZXJuZWwgd2lsbCBuZWVkIHRvIGhhbmRsZSB0aGUgVENQIGNvbm5lY3Rpb24gc3RhdGUuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIGNvbXBhcmluZyBUQ1AtZW5jYXBzdWxhdGVkIEVTUCB0byBvdGhlciBJUHNlYyB0cmFuc3BvcnQgbWV0aG9kcywgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBpcyBjb25zaWRlcmVkIG5lY2Vzc2FyeS4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBrbm93IHdoeSBzb21lb25lIHdvdWxkIGNob29zZSB0aGlzLCB3aGF0IGl0IGJ1eXMgdGhlbSwgYW5kIHdoYXQgaXQgY29zdHMgdGhlbS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGBncmVwYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg2LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZzozODc6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4tLVxubmV0L3hmcm0vTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICYjNDM7PSB4ZnJtX2lwdGZzLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xubmV0L3hmcm0vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0geGZybV9zdGF0ZV9icGYub1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQtI2VuZGlmXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ1OiNpZmRlZiBDT05GSUdfWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00Ni0jaW5jbHVkZSBcdTAwM2NuZXQvZXNwaW50Y3AuaFx1MDAzZVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTMtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTQ6I2lmZGVmIENPTkZJR19YRlJNX0VTUElOVENQXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTUtXHRlc3BpbnRjcF9pbml0KCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCYjMzk7cyBsaWtlbHkgZHJpdmluZyB0aGlzLCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMzgyLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIElQdjQtcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgSSBzdXNwZWN0IHRoZSBpc3N1ZSBpcyBidXJpZWQgaW4gdGhlcmUgc29tZXdoZXJlLiBUaGVuLCBJ4oCZbGwgY3Jvc3MtcmVmZXJlbmNlIHdpdGggYG5ldC9pcHY2L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTAuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGggSVB2NiBzZXR0aW5ncywgYW5kIGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBjaGVjayBib3RoIHNpZGVzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGNvbmZsaWN0aW5nIG9yIHVuZXhwZWN0ZWRseSBpbnRlcmFjdGluZy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgYmVoYXZpb3IgdGhhdCBoYXMgcGlxdWVkIG15IGludGVyZXN0LiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBrZXJuZWwgaXMgcmVhbGx5IHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NTpcdFx0ICBTdXBwb3J0IGZvciBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZC4gVGhpcyBtYWtlcyBzZW5zZVxuIDM3NjpcdFx0ICBvbmx5IGlmIHRoaXMgc3lzdGVtIHJlYWxseSBkb2VzIElQc2VjIGFuZCB3YW50IHRvIGRvIGl0XG4gMzc3Olx0XHQgIHdpdGggaGlnaCB0aHJvdWdocHV0LiBBIHR5cGljYWwgZGVza3RvcCBzeXN0ZW0gZG9lcyBub3RcbiAzNzg6XHRcdCAgbmVlZCBpdCwgZXZlbiBpZiBpdCBkb2VzIElQc2VjLlxuIDM3OTpcdFxuIDM4MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDM4MTpcdFxuIDM4MjpcdGNvbmZpZyBJTkVUX0VTUElOVENQXG4gMzgzOlx0XHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuIDM4NDpcdFx0ZGVwZW5kcyBvbiBYRlJNIFx1MDAyNlx1MDAyNiBJTkVUX0VTUFxuIDM4NTpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAzODY6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAzODc6XHRcdHNlbGVjdCBYRlJNX0VTUElOVENQXG4gMzg4Olx0XHRoZWxwXG4gMzg5Olx0XHQgIFN1cHBvcnQgZm9yIFJGQyA4MjI5IGVuY2Fwc3VsYXRpb24gb2YgRVNQIGFuZCBJS0Ugb3ZlclxuIDM5MDpcdFx0ICBUQ1AvSVB2NCBzb2NrZXRzLlxuIDM5MTpcdFxuIDM5MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDM5MzpcdFxuIDM5NDpcdGNvbmZpZyBJTkVUX0lQQ09NUFxuIDM5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuIDM5NjpcdFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcbiAzOTc6XHRcdHNlbGVjdCBYRlJNX0lQQ09NUFxuIDM5ODpcdFx0aGVscFxuIDM5OTpcdFx0ICBTdXBwb3J0IGZvciBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sIChJUENvbXApIChSRkMzMTczKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQdjYgY29uZmlndXJhdGlvbiBpc3N1ZS4gVGltZSB0byBkcmlsbCBkb3duIGEgYml0IGRlZXBlciwgYW5kIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBzb21lIHRoaW5ncy4gTGV0JiMzOTtzIG5vdCBqdXN0IHN0YXkgZm9jdXNlZCBvbiBvbmUgZmlsZSwgYnV0IHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbmV0L2lwdjYvS2NvbmZpZ2AuIEkgc2VlbSB0byByZWNhbGwgc29tZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgb3Igb3B0aW9uIGRlZmluaXRpb25zIGFyb3VuZCBsaW5lIDkwIHRoZXJlLCBhbmQgdGhhdCBhcmVhIHVzdWFsbHkgY29udGFpbnMgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3IgZGVmYXVsdHMsIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBMZXQgbWUganVtcCB0aGVyZSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxuICA4MTpcdFx0ZGVmYXVsdCBuXG4gIDgyOlx0XHRoZWxwXG4gIDgzOlx0XHQgIFN1cHBvcnQgZm9yIEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkLiBUaGlzIG1ha2VzIHNlbnNlXG4gIDg0Olx0XHQgIG9ubHkgaWYgdGhpcyBzeXN0ZW0gcmVhbGx5IGRvZXMgSVBzZWMgYW5kIHdhbnQgdG8gZG8gaXRcbiAgODU6XHRcdCAgd2l0aCBoaWdoIHRocm91Z2hwdXQuIEEgdHlwaWNhbCBkZXNrdG9wIHN5c3RlbSBkb2VzIG5vdFxuICA4NjpcdFx0ICBuZWVkIGl0LCBldmVuIGlmIGl0IGRvZXMgSVBzZWMuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg5Olx0XG4gIDkwOlx0Y29uZmlnIElORVQ2X0VTUElOVENQXG4gIDkxOlx0XHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4gIDkyOlx0XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElORVQ2X0VTUFxuICA5MzpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAgOTQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAgOTU6XHRcdHNlbGVjdCBYRlJNX0VTUElOVENQXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFN1cHBvcnQgZm9yIFJGQyA4MjI5IGVuY2Fwc3VsYXRpb24gb2YgRVNQIGFuZCBJS0Ugb3ZlclxuICA5ODpcdFx0ICBUQ1AvSVB2NiBzb2NrZXRzLlxuICA5OTpcdFxuIDEwMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwMTpcdFxuIDEwMjpcdGNvbmZpZyBJTkVUNl9JUENPTVBcbiAxMDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuIDEwNDpcdFx0c2VsZWN0IElORVQ2X1hGUk1fVFVOTkVMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAuIFRoZXkmIzM5O3JlIGRlcGVuZGVudCBvbiBgWEZSTWAgYW5kIHRoZSByZWd1bGFyIGBJTkVUX0VTUGAvYElORVQ2X0VTUGAgbW9kdWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgd2hlbiBlbmFibGVkLCBgWEZSTV9FU1BJTlRDUGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgZnJvbSBhIHByYWN0aWNhbCBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBzdGFuZHBvaW50LCBpcyB3aGV0aGVyIHRoaXMgY29uZmlndXJhdGlvbiBpcyBldmVuICphY2hpZXZhYmxlKiBpbiBhIHN0YW5kYXJkIHNldHVwLgoKQWgsIHllcy4gRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSkgKmlzKiBhIHN0YW5kYXJkIHNvY2tldCBVTFAsIHNwZWNpZmljYWxseSBoYW5kbGVkIGJ5IGB0Y3BfcmVnaXN0ZXJfdWxwKCZhbXA7ZXNwaW50Y3BfdWxwKWAuIFRoaXMgbWVhbnMgdGhhdCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gaW5kZWVkIHVzZSBpdCDigJMgaXQgY2FuIGNyZWF0ZSBhIFRDUCBzb2NrZXQgYW5kIHNldCBgVENQX1VMUGAgd2l0aCAmIzM0O2VzcGludGNwJiMzNDsuIFRoYXQgYWxsb3dzIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBFU1Agb3IgSUtFIHBhY2tldHMgb3ZlciBUQ1Agc29ja2V0cywgb3IgZXZlbiB0aHJvdWdoIHhmcm0gbmV0bGluaywgd2hpY2ggaXMgcXVpdGUgZmxleGlibGUuCgpTbywgd2hlbiB0aGUga2VybmVsICpyZWNlaXZlcyogdGhlc2UgZW5jYXBzdWxhdGVkIHBhY2tldHMsIGl0IGVuZHMgdXAgaW4gYGVzcGludGNwX3JjdmAsIHdoaWNoIHRoZW4gY2FsbHMgYGhhbmRsZV9lc3BgLiBJIHJlY2FsbCBhIHJlY2VudCByZXZpc2lvbiB3aGVyZSB0aGUgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uIGhhZCB0aGUgZm9sbG93aW5nIGNvZGU6CmBgYGMKc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCnsKCXN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItJmd0O2NiOwoKCWlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7CgkJWEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpOwoJCWtmcmVlX3NrYihza2IpOwoJCXJldHVybjsKCX0KLi4uCmBgYApUaGUga2V5IGNoYW5nZSBoZXJlLCBvciBhdCBsZWFzdCB0aGUgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIG1lLCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYC4gSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGFuZCBxdWlja2x5IHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IHZhbGlkYXRlcyB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHJlc2V0IG9wZXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN1cml0eSBtZWFzdXJlIGFnYWluc3QgcG90ZW50aWFsIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgaGVhZGVyIGluamVjdGlvbi4gS25vd2luZyB0aGlzIGFsbG93cyBtZSB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHRvIHBvdGVudGlhbGx5IGFzc2VzcyB0aGUgc3RhYmlsaXR5IG9mIHRoZSBtb2R1bGUgYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MzA5Nj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMDQtLyoqXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMDU6ICogc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdHJhbnNwb3J0IGhlYWRlclxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTA2LSAqIEBza2I6IGJ1ZmZlciB0byBhbHRlclxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzExMj1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMTM6c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTE0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEkga25vdyB0aGlzIGlzIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgc28gaXQmIzM5O3MgYSBjb3JlIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbiwgbGlrZWx5IGxvdy1sZXZlbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBkZXRhaWxzIGluIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgYW5kIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCB0byBnZXQgdG8gaXRzIGNvbnRleHQuIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBpZiBpdCYjMzk7cyB0aGVyZSB0byBwcm90ZWN0IGZyb20gYW4gZWRnZSBjYXNlLCBvciBpZiBpdCBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gR2l2ZW4gdGhlIG5hbWUsICYjMzQ7Y2FyZWZ1bCYjMzQ7IGlzIGEgZ29vZCBjbHVlIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgYWJvdXQgc2FmZXR5IC0gcG90ZW50aWFsbHkgYm91bmRhcnkgY2hlY2tzIG9yIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBjb3JydXB0aW9uLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIC0gSSBuZWVkIHRvIGtub3cgaG93IHRoZSBuZXR3b3JrIHN0YWNrIGRlYWxzIHdpdGggdHJhbnNwb3J0IGhlYWRlciBtYW5pcHVsYXRpb24sIGFuZCB3aGF0IHNwZWNpZmljIHNjZW5hcmlvcyB3YXJyYW50IHRoaXMgJiMzNDtjYXJlZnVsJiMzNDsgYXBwcm9hY2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IHRoZSByaXNrcyBhbmQgZGVzaWduIGFuIGFwcHJvYWNoIHRvIG1pdGlnYXRlIHRoZW0sIGlmIHRoZXJlIGFyZSBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEwNDpcdC8qKlxuMzEwNTpcdCAqIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRyYW5zcG9ydCBoZWFkZXJcbjMxMDY6XHQgKiBAc2tiOiBidWZmZXIgdG8gYWx0ZXJcbjMxMDc6XHQgKlxuMzEwODpcdCAqIEhhcmRlbmVkIHZlcnNpb24gb2Ygc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKS5cbjMxMDk6XHQgKlxuMzExMDpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxuMzExMTpcdCAqL1xuMzExMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbjMxMTM6XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXG4zMTE0Olx0e1xuMzExNTpcdFx0bG9uZyBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkO1xuMzExNjpcdFxuMzExNzpcdFx0aWYgKHVubGlrZWx5KG9mZnNldCAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSlvZmZzZXQpKVxuMzExODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4zMTE5Olx0XG4zMTIwOlx0XHRpZiAodW5saWtlbHkob2Zmc2V0ID09ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVSkpXG4zMTIxOlx0XHRcdHJldHVybiBmYWxzZTtcbjMxMjI6XHRcbjMxMjM6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gb2Zmc2V0O1xuMzEyNDpcdFx0cmV0dXJuIHRydWU7XG4zMTI1Olx0fVxuMzEyNjpcdFxuMzEyNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjMxMjg6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVNQSU5UQ1AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXNzZW50aWFsIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2ggdG8gd29yayBwcm9wZXJseS4gU2luY2UgdGhlIGNvZGUgbW9kaWZpZXMgdGhlIGBoYW5kbGVfZXNwYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLCB0aGF0JiMzOTtzIG15IHByaW1hcnkgZm9jdXMuIAoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSB3aXRoaW4gdGhhdCBmaWxlLiBJIHF1aWNrbHkgY2hlY2tlZCwgYW5kIEkgc2VlIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIHNob3VsZCBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG9yIGFueSBwb3NzaWJsZSBlbnRyeSBwb2ludHMgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQgbWUgZ28gYWhlYWQgYW5kIGV4YW1pbmUgYWxsIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZW0gd2l0aCB0aGUgY2hhbmdlIHRvIGBoYW5kbGVfZXNwYCwgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBvdmVydmlldyBvZiB3aGF0IHRvIGxvb2sgZm9yIGdvaW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYy0xMS1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTI6c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzLVx0XHRcdCAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjgtXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5OnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy02MC1cbm5ldC94ZnJtL2VzcGludGNwLmM6NjE6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS9lc3BpbnRjcC5jLTYyLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTEyMC1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTIxOnN0YXRpYyBpbnQgZXNwaW50Y3BfcGFyc2Uoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL2VzcGludGNwLmMtMTIyLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTE0MS1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTQyOnN0YXRpYyBpbnQgZXNwaW50Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQzLVx0XHRcdCAgICBpbnQgZmxhZ3MpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjE3NjppbnQgZXNwaW50Y3BfcXVldWVfb3V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc3LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTE4OS19XG5uZXQveGZybS9lc3BpbnRjcC5jOjE5MDpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9xdWV1ZV9vdXQpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTEtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjE5NTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZyxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTk2LVx0XHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjE1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMTY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjE3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDctXG5uZXQveGZybS9lc3BpbnRjcC5jOjI0ODpzdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC94ZnJtL2VzcGludGNwLmMtMjQ5LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3Ni1cbm5ldC94ZnJtL2VzcGludGNwLmM6Mjc3OmludCBlc3BpbnRjcF9wdXNoX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3OC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDgtfVxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDk6RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcHVzaF9za2IpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTAtXG5uZXQveGZybS9lc3BpbnRjcC5jOjMxMTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTIte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9Mzk1PXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGVzcGludGNwNl9vcHM7XG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NjpzdGF0aWMgREVGSU5FX01VVEVYKHRjcHY2X3Byb3RfbXV0ZXgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTctXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5ODpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk5LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQwNi1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MDgte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDE4LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MTk6c3RhdGljIHZvaWQgZXNwaW50Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MjAte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDI2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mjc6c3RhdGljIHZvaWQgZXNwaW50Y3BfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDM0LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MzU6Ym9vbCB0Y3BfaXNfdWxwX2VzcChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzNi17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzgtfVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mzk6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2lzX3VscF9lc3ApO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00NDAtXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0MTpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDItXHRcdFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cdFx0XHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6c3RhdGljIGludCBlc3BpbnRjcF9pbml0X3NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ2LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTUwNC1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTA1OnN0YXRpYyB2b2lkIGVzcGludGNwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDYte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTE5LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MjA6c3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG5uZXQveGZybS9lc3BpbnRjcC5jLTUyMS17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU0NzpzdGF0aWMgX19wb2xsX3QgZXNwaW50Y3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTQ4LVx0XHRcdCAgICAgIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU1NjpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTctXHRcdFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTU3MD1zdGF0aWMgc3RydWN0IHRjcF91bHBfb3BzIGVzcGludGNwX3VscCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTc1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzY6dm9pZCBfX2luaXQgZXNwaW50Y3BfaW5pdCh2b2lkKVxubmV0L3hmcm0vZXNwaW50Y3AuYy01Nzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVTUC9UQ1AgVUxQIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBoYW5kbGVfZXNwYCBmdW5jdGlvbiBnZXRzIGludm9rZWQuIEl0IGxvb2tzIGxpa2UgYGVzcGludGNwX3JjdmAgaXMgdGhlIGtleSwgYW5kIGl0IGNhbGxzIGVpdGhlciBgaGFuZGxlX2VzcGAgb3IgYGhhbmRsZV9ub25lc3BgLCBkZXBlbmRpbmcgb24gc29tZXRoaW5nIEkgbmVlZCB0byBmaWd1cmUgb3V0LiBSaWdodCwgYGVzcGludGNwX3JjdmAgaXMgdGhlIHJlY2VpdmUgbWVzc2FnZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggYHN0cnBhcnNlcmAgdmlhIHRoYXQgYGNiLnJjdl9tc2dgIGFzc2lnbm1lbnQuIEdvdCBpdC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGhvdyB0aGUgVUxQIHNvY2tldCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBgZXNwaW50Y3BfaW5pdF9za2AuCgpCZXNpZGVzIHRoZSBgcmN2YCBwYXRoLCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHRyYW5zbWl0IHNpZGUsIHNvIEkmIzM5O2xsIGtlZXAgYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgb24gbXkgcmFkYXIsIGFzIHdlbGwgYXMgYHRjcF9pc191bHBfZXNwYC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGBlc3BpbnRjcF9zZW5kbXNnYCBhbmQgYGVzcGludGNwX3JlY3Ztc2dgIGFzIHdlbGwuIFRoZSBtZWF0IG9mIHVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGNvbWUgZG93biB0byBhIGRldGFpbGVkIGxvb2sgYXQgYGVzcGludGNwX3JjdmAgYW5kIGVzcGVjaWFsbHkgYGhhbmRsZV9lc3BgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG4gIDY0Olx0XHRcdFx0XHRcdFx0c3RycCk7XG4gIDY1Olx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XG4gIDY2Olx0XHRpbnQgbGVuID0gcnhtLVx1MDAzZWZ1bGxfbGVuIC0gMjtcbiAgNjc6XHRcdHUzMiBub25lc3BfbWFya2VyO1xuICA2ODpcdFx0aW50IGVycjtcbiAgNjk6XHRcbiAgNzA6XHRcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XG4gIDcyOlx0XHRcdHU4IGRhdGE7XG4gIDczOlx0XG4gIDc0Olx0XHRcdGVyciA9IHNrYl9jb3B5X2JpdHMoc2tiLCByeG0tXHUwMDNlb2Zmc2V0ICYjNDM7IDIsIFx1MDAyNmRhdGEsIDEpO1xuICA3NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDc2Olx0XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDc3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDc4Olx0XHRcdFx0cmV0dXJuO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4gIDgxOlx0XHRcdGlmIChkYXRhID09IDB4ZmYpIHtcbiAgODI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgODM6XHRcdFx0XHRyZXR1cm47XG4gIDg0Olx0XHRcdH1cbiAgODU6XHRcdH1cbiAgODY6XHRcbiAgODc6XHRcdC8qIGRyb3Agb3RoZXIgc2hvcnQgbWVzc2FnZXMgKi9cbiAgODg6XHRcdGlmICh1bmxpa2VseShsZW4gXHUwMDNjPSBzaXplb2Yobm9uZXNwX21hcmtlcikpKSB7XG4gIDg5Olx0XHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IpO1xuICA5MDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTE6XHRcdFx0cmV0dXJuO1xuICA5MjpcdFx0fVxuICA5MzpcdFxuICA5NDpcdFx0ZXJyID0gc2tiX2NvcHlfYml0cyhza2IsIHJ4bS1cdTAwM2VvZmZzZXQgJiM0MzsgMiwgXHUwMDI2bm9uZXNwX21hcmtlcixcbiAgOTU6XHRcdFx0XHQgICAgc2l6ZW9mKG5vbmVzcF9tYXJrZXIpKTtcbiAgOTY6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAgOTc6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDk4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICA5OTpcdFx0XHRyZXR1cm47XG4gMTAwOlx0XHR9XG4gMTAxOlx0XG4gMTAyOlx0XHQvKiByZW1vdmUgaGVhZGVyLCBsZWF2ZSBub24tRVNQIG1hcmtlci9TUEkgKi9cbiAxMDM6XHRcdGlmICghcHNrYl9wdWxsKHNrYiwgcnhtLVx1MDAzZW9mZnNldCAmIzQzOyAyKSkge1xuIDEwNDpcdFx0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzdHJwLVx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcbiAxMDU6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMTA2Olx0XHRcdHJldHVybjtcbiAxMDc6XHRcdH1cbiAxMDg6XHRcbiAxMDk6XHRcdGlmIChwc2tiX3RyaW0oc2tiLCByeG0tXHUwMDNlZnVsbF9sZW4gLSAyKSAhPSAwKSB7XG4gMTEwOlx0XHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuIDExMTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxMTI6XHRcdFx0cmV0dXJuO1xuIDExMzpcdFx0fVxuIDExNDpcdFxuIDExNTpcdFx0aWYgKG5vbmVzcF9tYXJrZXIgPT0gMClcbiAxMTY6XHRcdFx0aGFuZGxlX25vbmVzcChjdHgsIHNrYiwgc3RycC1cdTAwM2Vzayk7XG4gMTE3Olx0XHRlbHNlXG4gMTE4Olx0XHRcdGhhbmRsZV9lc3Aoc2tiLCBzdHJwLVx1MDAzZXNrKTtcbiAxMTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVNQSU5UQ1AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uLCB3aGljaCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBnZXRzIGNhbGxlZCBmcm9tIGBlc3BpbnRjcF9yY3ZgLiBMZXQmIzM5O3MgY2xhcmlmeSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGhhbmRsZV9lc3BgIGFuZCBmdW5jdGlvbnMgbGlrZSBgZXNwaW50Y3BfcmN2YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYW5kIGBlc3BpbnRjcF9yZWN2bXNnYC4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBvdGhlciBjb2RlIHBhdGhzIGNhbGwgYGhhbmRsZV9lc3BgIG9yIGFueSBvZiBpdHMgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgYWxsIGVudHJ5IHBvaW50cy4KCk5leHQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gT2theSwgSSBzZWUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBUaGV5IGJvdGggZGVwZW5kIG9uIGBYRlJNYCBhbmQgYElORVQvSU5FVDZfRVNQYCwgYW5kIHRoZXkgYWxzbyBzZWxlY3QgYFNUUkVBTV9QQVJTRVJgLCBgTkVUX1NPQ0tfTVNHYCwgYW5kIGBYRlJNX0VTUElOVENQYC4gR3JlYXQsIHRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0LiBJIGNhbiBzZWUgd2hhdCBJIG5lZWQgdG8gbG9vayBmb3IsIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4KCk5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gc2VlIGlmIGBJTkVUX0VTUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaW4gYG5ldC9pcHY0L0tjb25maWdgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgaXQmIzM5O3Mgc29tZXdoZXJlIGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM1NC4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgYmV0IEkgY2FuIHF1aWNrbHkgdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9uY2UgSSBoYXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgb3B0aW9uIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXG4gMzUxOlx0XG4gMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMzUzOlx0XG4gMzU0Olx0Y29uZmlnIElORVRfRVNQXG4gMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4gMzU2Olx0XHRzZWxlY3QgWEZSTV9FU1BcbiAzNTc6XHRcdGhlbHBcbiAzNTg6XHRcdCAgU3VwcG9ydCBmb3IgSVBzZWMgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLlxuIDM1OTpcdFxuIDM2MDpcdFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXG4gMzYxOlx0XHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXG4gMzYyOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcbiAzNjM6XHRcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91JiMzOTtsbCBuZWVkIHRvIGVuYWJsZVxuIDM2NDpcdFx0ICB0aGVtIGluIHRoZSBjcnlwdG8gQVBJLiAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBhY2NlbGVyYXRlZFxuIDM2NTpcdFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgYW55IG5lZWRlZCBhbGdvcml0aG1zIHdoZW4gYXZhaWxhYmxlLlxuIDM2NjpcdFxuIDM2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDM2ODpcdFxuIDM2OTpcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4gMzcwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiAzNzE6XHRcdGRlcGVuZHMgb24gSU5FVF9FU1BcbiAzNzI6XHRcdHNlbGVjdCBYRlJNX09GRkxPQURcbiAzNzM6XHRcdGRlZmF1bHQgblxuIDM3NDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU1MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgWEZSTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIGxpa2VseSBsb2NhdGlvbnMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUsIG9yIHBlcmhhcHMgdGhlIGJyb2FkZXIgYG5ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljcyB0aGVyZSB0byBlbnN1cmUgSSBmdWxseSBncmFzcCB0aGUgc3RhdGUgb2YgWEZSTSB3aXRoaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZy00LSNcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgZmlyc3QgMzAgbGluZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGJlaW5nIHByZXNlbnRlZCBoZXJlIGF0IHRoZSB0b3AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZm91bmRhdGlvbmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gWEZSTSDigJMgdGhlIGNvcmUgb2YgdGhlIElQc2VjIGFuZCBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtYWluIGBYRlJNYCBmZWF0dXJlIGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgbGlrZWx5IGZvbGxvd2VkIGJ5IG90aGVyIGNvcmUgcGFyYW1ldGVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIG1vZHVsYXJpdHkgb2YgdGhlIFhGUk0gc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IGZlYXR1cmVzIGFyZSBkaXJlY3RseSBjb25maWd1cmFibGUgYXQgdGhpcyBsZXZlbCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgaXMuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBuZXcgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gY29yZSBvcHRpb25zLCBhbnl0aGluZyB0aGF0IG1pZ2h0IHNpZ25pZnkgYSBuZXcgYXBwcm9hY2ggb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiBpbiB0aGlzIGFyZWEuIEkgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrLCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgWEZSTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBYRlJNXG4gICA2Olx0XHRib29sXG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAgIDk6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBYRlJNX09GRkxPQURcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgWEZSTV9BTEdPXG4gIDE1Olx0XHR0cmlzdGF0ZVxuICAxNjpcdFx0c2VsZWN0IFhGUk1cbiAgMTc6XHRcdHNlbGVjdCBDUllQVE9cbiAgMTg6XHRcdHNlbGVjdCBDUllQVE9fQUVBRFxuICAxOTpcdFx0c2VsZWN0IENSWVBUT19IQVNIXG4gIDIwOlx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDIxOlx0XG4gIDIyOlx0aWYgSU5FVFxuICAyMzpcdGNvbmZpZyBYRlJNX1VTRVJcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbiAgMjU6XHRcdHNlbGVjdCBYRlJNX0FMR09cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICAyODpcdFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwOAoJCQkJCQkJb3V0cHV0OiAxOTMKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgRVNQLWluLVRDUCBWdWxuZXJhYmlsaXR5ICZhbXA7IEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBvbmVzIGFyZSBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAsIGFsb25nIHdpdGggYFhGUk1fRVNQSU5UQ1BgLCB0aGVuIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYFhGUk1gIGFyZSBhbHNvIHJlbGV2YW50LiBJJiMzOTt2ZSBnb3QgdGhlbSBsaXN0ZWQ6IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYFhGUk1fRVNQSU5UQ1BgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBYRlJNYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBYRlJNIEVTUCBlbmNhcHN1bGF0ZWQgaW4gVENQLCBhZGhlcmluZyB0byBSRkMgODIyOS4gVGhlIHBhdGNoIGluIGBuZXQveGZybS9lc3BpbnRjcC5jYCBpcyBpbXBvcnRhbnQsIGl0IGZvY3VzZXMgb24gaG93IHRoZSBzeXN0ZW0gdmFsaWRhdGVzIHBhY2tldCBzdHJ1Y3R1cmUgd2l0aGluIGBoYW5kbGVfZXNwYCBieSB1c2luZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpYCB3aGVuIHBhcnNpbmcgRVNQIHdpdGhpbiBUQ1AgcGFja2V0cy4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGhhbmRsaW5nIGludmFsaWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzLCB3aGljaCB0aGUgcGF0Y2ggYWRkcmVzc2VzLiBUaGlzIGxvZ2ljIGlzIGVhc2lseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9uczsgSSBjYW4gc2V0IHRoZSBUQ1AgVUxQIHRvIGBlc3BpbnRjcGAgYW5kIHJlY2VpdmUgcGFja2V0cywgc28gdGhpcyBpcyB2YWxpZCBmb3IgYm90aCB2aXJ0dWFsaXplZCBhbmQgc3RhbmRhcmQgZW52aXJvbm1lbnRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIHNlZSBgaGFuZGxlX2VzcGAsIGBlc3BpbnRjcF9yY3ZgLCBgZXNwaW50Y3BfcXVldWVfb3V0YCwgYGVzcGludGNwX3B1c2hfc2tiYCwgYGVzcGludGNwX3NlbmRtc2dgLCBhbmQgYGVzcGludGNwX3JlY3Ztc2dgLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvZiB0aGUga2V5IGZ1bmN0aW9ucyBjb3VsZCBiZSBpbmxpbmVkLiBgaGFuZGxlX2VzcGAgaXMgc3RhdGljLCBgZXNwaW50Y3BfcmN2YCBpcyBhbHNvIHN0YXRpYyAoYXNzaWduZWQgYXMgY2FsbGJhY2sgdG8gYHN0cnBfY2FsbGJhY2tzYCksIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQsIGBlc3BpbnRjcF9wdXNoX3NrYmAgaXMgbm9uLXN0YXRpYyBleHBvcnRlZCwgYGVzcGludGNwX3NlbmRtc2dgIGlzIHN0YXRpYyAoYXNzaWduZWQgaW4gcHJvdG8pLCBgZXNwaW50Y3BfcmVjdm1zZ2AgaXMgc3RhdGljIChhc3NpZ25lZCBpbiBwcm90byksIGFuZCBgdGNwX2lzX3VscF9lc3BgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQuIE5vdyBJIGhhdmUgbXkgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtoYW5kbGVfZXNwJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmN2JiMzNDssICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywgJiMzNDtlc3BpbnRjcF9zZW5kbXNnJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmVjdm1zZyYjMzQ7XWAuCgpPa2F5LCBJIG5lZWQgdG8gc3RydWN0dXJlIG15IGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgRVNQLWluLVRDUCBlbmNhcHN1bGF0ZWQgcGFja2V0cyB3aXRoaW4gYGhhbmRsZV9lc3BgIGJ5IGluY29ycG9yYXRpbmcgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgLiBUaGlzIGVuc3VyZXMgc2FmZXIgcHJvY2Vzc2luZyBvZiBpbnZhbGlkIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cy4gVGhpcyBkaXJlY3QgaW1wYWN0IG9uIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSBvbiBUQ1Agc29ja2V0cyB3aXRoIHRoZSBFU1BJTlRDUCBVTFAgZW5hYmxlZCwgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUuCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJTkVUX0VTUElOVENQJiMzNDssICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywgJiMzNDtYRlJNX0VTUElOVENQJiMzNDssICYjMzQ7SU5FVF9FU1AmIzM0OywgJiMzNDtJTkVUNl9FU1AmIzM0OywgJiMzNDtYRlJNJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtoYW5kbGVfZXNwJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmN2JiMzNDssICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywgJiMzNDtlc3BpbnRjcF9zZW5kbXNnJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmVjdm1zZyYjMzQ7XWAKCk5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7WEZSTV9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7WEZSTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV9lc3AmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcmN2JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3F1ZXVlX291dCYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9wdXNoX3NrYiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluY29taW5nIEVTUCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBuZXQveGZybS9lc3BpbnRjcC5jIGJ5IHVzaW5nIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIGJlZm9yZSByZXNldHRpbmcgdGhlbSBpbiBoYW5kbGVfZXNwKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIFJGQyA4MjI5IEVTUC1pbi1UQ1AgZW5jYXBzdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcigpYCB3aXRoIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIGluIGBoYW5kbGVfZXNwKClgIHdpdGhpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIFRoaXMgY2hhbmdlIGNoZWNrcyB3aGV0aGVyIHRoZSBjYWxjdWxhdGVkIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0IChgc2tiLVx1MDAzZWRhdGEgLSBza2ItXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXG5cblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODY2ODVmZWZjYzEwYTlhZDgwMDMzODM5NTIzNzgwNjkyZTFhMDhjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTY6MzY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuYwppbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NAotLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmMKQEAgLTMwLDcgJiM0MzszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLSZndDtjYjsKIAotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiYjNDM7CWlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7CiYjNDM7CQlYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi0mZ3Q7bmhvZmYgKi8KIAltZW1tb3ZlKHNrYi0mZ3Q7Y2IsICZhbXA7dGNwX2NiLSZndDtoZWFkZXIsIHNpemVvZih0Y3BfY2ItJmd0O2hlYWRlcikpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVNQaW5UQ1AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXRjaCwgc28gbXkgZmlyc3QgbW92ZSBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb2RlIGl0JiMzOTtzIHRvdWNoaW5nLiBBaCwgYG5ldC94ZnJtL2VzcGludGNwLmNgIOKAkyB0aGF04oCZcyB0aGUgdGFyZ2V0LiBOb3csIEkgc2hvdWxkIHplcm8gaW4gb24gdGhlIGNoYW5nZXMuIFRpbWUgdG8gZW1wbG95IGByZWFkLWZpbGVgIGFuZCBpbnNwZWN0IHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMwLCB0byBzZWUgdGhlIGRpcmVjdCBpbXBhY3Qgb2YgdGhlIHBhdGNoLiBLbm93aW5nIHByZWNpc2VseSB3aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZCBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIGFuZCBhY2N1cmF0ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9zdHJwYXJzZXIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwaW50Y3AuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrbXNnLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaG90ZGF0YS5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDEzOlx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2spXG4gIDE0Olx0e1xuICAxNTpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpIFx1MDAzZT0gc2stXHUwMDNlc2tfcmN2YnVmIHx8XG4gIDE2Olx0XHQgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuICAxNzpcdFx0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XG4gIDE4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAxOTpcdFx0XHRyZXR1cm47XG4gIDIwOlx0XHR9XG4gIDIxOlx0XG4gIDIyOlx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4gIDIzOlx0XG4gIDI0Olx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gIDI1Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlaWtlX3F1ZXVlLCBza2IpO1xuICAyNjpcdFx0Y3R4LVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xuICAyNzpcdH1cbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiAgMzA6XHR7XG4gIDMxOlx0XHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuICAzMjpcdFxuICAzMzpcdFx0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbiAgMzQ6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICAzNTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgMzY6XHRcdFx0cmV0dXJuO1xuICAzNzpcdFx0fVxuICAzODpcdFxuICAzOTpcdFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuICA0MDpcdFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4gIDQxOlx0XG4gIDQyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDQzOlx0XHRza2ItXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXHUwMDNlc2tiX2lpZik7XG4gIDQ0Olx0XHRpZiAoIXNrYi1cdTAwM2VkZXYpIHtcbiAgNDU6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICA0NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNDc6XHRcdFx0Z290byBvdXQ7XG4gIDQ4Olx0XHR9XG4gIDQ5Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDUwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gIDUxOlx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuICA1MjpcdFx0XHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcbiAgNTM6XHRcdGVsc2VcbiAgNTQ6XHQjZW5kaWZcbiAgNTU6XHRcdFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XG4gIDU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNTc6XHRvdXQ6XG4gIDU4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNTk6XHR9XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG4gIDY0Olx0XHRcdFx0XHRcdFx0c3RycCk7XG4gIDY1Olx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XG4gIDY2Olx0XHRpbnQgbGVuID0gcnhtLVx1MDAzZWZ1bGxfbGVuIC0gMjtcbiAgNjc6XHRcdHUzMiBub25lc3BfbWFya2VyO1xuICA2ODpcdFx0aW50IGVycjtcbiAgNjk6XHRcbiAgNzA6XHRcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XG4gIDcyOlx0XHRcdHU4IGRhdGE7XG4gIDczOlx0XG4gIDc0Olx0XHRcdGVyciA9IHNrYl9jb3B5X2JpdHMoc2tiLCByeG0tXHUwMDNlb2Zmc2V0ICYjNDM7IDIsIFx1MDAyNmRhdGEsIDEpO1xuICA3NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDc2Olx0XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDc3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDc4Olx0XHRcdFx0cmV0dXJuO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24sIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYC4gR2l2ZW4gbXkgbGV2ZWwgb2YgZXhwZXJ0aXNlLCBqdXN0IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gbGlrZWx5IHdvbiYjMzk7dCBiZSBlbm91Z2guIEkgbmVlZCBhIG1vcmUgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nLCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kICpob3cqIGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGVyZWZvcmUsIGxldCYjMzk7cyBzdGFydCBieSBkb2luZyBhIHF1aWNrIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBzZWFyY2ggZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbGlzdCBvZiBjYWxsc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMDk2PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzEwNC0vKipcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzEwNTogKiBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsIC0gY29uZGl0aW9uYWxseSByZXNldCB0cmFuc3BvcnQgaGVhZGVyXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMDYtICogQHNrYjogYnVmZmVyIHRvIGFsdGVyXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMTEyPXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzExMzpza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMTQte1xuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9OTE9c3RhdGljIHN0cnVjdCBza19idWZmICppcHY2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMzEtXHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpIHtcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MTMyOlx0XHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSlcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTMzLVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9Mjk9c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMi1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzM6XHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zNC1cdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBza2J1ZmYuaCAtIExpbmUgMzEwNCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgMzEwNC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGF0IGFyZWEgYmVjYXVzZeKApiAqW3BhdXNlcywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgd2l0aG91dCBleHBsaWNpdGx5IHN0YXRpbmcgaXQsIGFzc3VtaW5nIHRoZSBleHBlcnQgd291bGQgdW5kZXJzdGFuZCB0aGUgaW1wbGllZCByZWFzb25pbmcgYmFzZWQgb24gdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyXSog4oCmSSBzdXNwZWN0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0aGVyZSB0b+KApiAqW0FnYWluLCBhc3N1bWluZyB0aGUgZXhwZXJ0JiMzOTtzIGtub3dsZWRnZSB3aWxsIGFsbG93IHRoZW0gdG8gZmlsbCBpbiB0aGUgYmxhbmsgYmFzZWQgb24gdGhlaXIgYmFja2dyb3VuZF0qIOKApnBlcmhhcHMgcmVsYXRlZCB0byB0aGUgcG90ZW50aWFsIGlzc3VlIEkmIzM5O20gdHJhY2tpbmcgZG93bi4gTGluZSAzMTA0IGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYW5kIGZyb20gbWVtb3J5LCBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGluZ+KApiAqW2JyaWVmIHBhdXNlXSog4oCmc29tZXRoaW5nIGFyb3VuZOKApiAqW3BhdXNlcywgY29uc2lkZXJpbmcgZXhhY3QgZGV0YWlscywgcGVyaGFwcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWNrZXQgaGVhZGVycywgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtYWNyb10q4oCmIFllcywgdGhhdCYjMzk7cyByaWdodC4gVGltZSB0byBzZWUgd2hhdCB0aGUgYWN0dWFsIGNvZGUgc2F5cyB0byBjb25maXJtIG15IGxpbmUgb2YgdGhvdWdodC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgd29ya2luZyBoeXBvdGhlc2lzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwOTU6XHRcbjMwOTY6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjMwOTc6XHR7XG4zMDk4Olx0XHRsb25nIG9mZnNldCA9IHNrYi1cdTAwM2VkYXRhIC0gc2tiLVx1MDAzZWhlYWQ7XG4zMDk5Olx0XG4zMTAwOlx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG9mZnNldCAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSlvZmZzZXQpO1xuMzEwMTpcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBvZmZzZXQ7XG4zMTAyOlx0fVxuMzEwMzpcdFxuMzEwNDpcdC8qKlxuMzEwNTpcdCAqIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRyYW5zcG9ydCBoZWFkZXJcbjMxMDY6XHQgKiBAc2tiOiBidWZmZXIgdG8gYWx0ZXJcbjMxMDc6XHQgKlxuMzEwODpcdCAqIEhhcmRlbmVkIHZlcnNpb24gb2Ygc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKS5cbjMxMDk6XHQgKlxuMzExMDpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxuMzExMTpcdCAqL1xuMzExMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbjMxMTM6XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXG4zMTE0Olx0e1xuMzExNTpcdFx0bG9uZyBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkO1xuMzExNjpcdFxuMzExNzpcdFx0aWYgKHVubGlrZWx5KG9mZnNldCAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSlvZmZzZXQpKVxuMzExODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4zMTE5Olx0XG4zMTIwOlx0XHRpZiAodW5saWtlbHkob2Zmc2V0ID09ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVSkpXG4zMTIxOlx0XHRcdHJldHVybiBmYWxzZTtcbjMxMjI6XHRcbjMxMjM6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gb2Zmc2V0O1xuMzEyNDpcdFx0cmV0dXJuIHRydWU7XG4zMTI1Olx0fVxuMzEyNjpcdFxuMzEyNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjMxMjg6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXG4zMTI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ2CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVTUC9UQ1AgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5ldC94ZnJtL2VzcGludGNwLmNgIHBhdGNoIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBgaGFuZGxlX2VzcCgpYCBmdW5jdGlvbiB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byB0cmFuc3BvcnQgaGVhZGVyIG92ZXJmbG93cyBkdWUgdG8gYSBjYWxsIHRvIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdHJ1bmNhdGVkIG9mZnNldCBpZiB0aGUgYG9mZnNldGAgZXhjZWVkZWQgdGhlIHNpemUgb2YgYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAuIFRoZSBmaXggcmVwbGFjZXMgaXQgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpYC4gVGhlIGltcG9ydGFudCBwYXJ0IGhlcmUgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGFuZCB0aGUgc3Vic2VxdWVudCBhY3Rpb246IGlmIHRoZSBvZmZzZXQgaXMgdG9vIGxhcmdlIChvciBgfjBVYCksIHRoZSBgc2tiYCBpcyBkcm9wcGVkLCBhbmQgYW4gZXJyb3Igc3RhdGlzdGljIGlzIGluY3JlbWVudGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBhbHdheXMgaGF2ZSB0byBiZSB2ZXJ5IHJpZ29yb3VzIHdoZW4gY29uc2lkZXJpbmcgYSBjaGFuZ2UgbGlrZSB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uCgoxLiAgKipLZXJuZWwgdG8gVXNlciBTcGFjZSBEYXRhIExlYWtzOioqIE5vLiBUaGUgY29kZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgc2VuZGluZyBhbnkgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSB0byB1c2Vyc3BhY2UsIHNvIGluZm9ybWF0aW9uIGxlYWtzIGFyZW4mIzM5O3QgYSBjb25jZXJuLiBUaGVyZSBpcyBubyBgY29weV90b191c2VyYCBvciBhbnkgc2ltaWxhciBvcGVyYXRpb25zIGhlcmUuCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzL0ZpZWxkczoqKiBOb3BlLiBJIHNlZSBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgZmllbGRzIHdpdGhpbiBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4KMy4gICoqQ29tcGxleCBBbGxvY2F0aW9uczoqKiBOb3QgaGVyZS4gVGhlIGZpeCBkb2VzbiYjMzk7dCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgbWFuaXB1bGF0aW9uIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBleHBvc2UgdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIG1lbW9yeS4KNC4gICoqQm91bmRzL0xlbmd0aCBDaGVja3M6KiogQ3J1Y2lhbGx5LCB0aGlzIGlzIGEgKmJvdW5kcyBjaGVjayogaW4gdGhlIHRydWVzdCBzZW5zZS4gVGhlIGNoZWNrIGlzIHNwZWNpZmljYWxseSBoYXJkZW5pbmcgYWdhaW5zdCAqb3ZlcmZsb3cqIGFuZCAqdHJ1bmNhdGlvbiogb2YgYHNrYmAgb2Zmc2V0cywgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQmIzM5O3MgcHJldmVudGluZyB1cyBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIHRoZSBvZmZzZXQgaXMgaW52YWxpZCwgdGhlIHBhY2tldCBpcyBzaW1wbHkgZnJlZWQuIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgY2hlY2sgaXMgcHJldmVudGluZyBvciBjYXRjaGluZyBmYWxscyB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBvciBERUJVR19ORVQgKGlmIGVuYWJsZWQpLgoKSW4gc2hvcnQsIHRoaXMgaXMgYSAqaGFyZGVuaW5nKiBmaXgg4oCTIHNwZWNpZmljYWxseSBmb3IgcG90ZW50aWFsIGBza2JgIHRyYW5zcG9ydCBoZWFkZXIgb3ZlcmZsb3cvYm91bmRzIGlzc3Vlcy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOyBpbnN0ZWFkLCBpdCBwcm9hY3RpdmVseSAqcHJldmVudHMqIHRoZW0gYnkgZHJvcHBpbmcgdGhlIG9mZmVuZGluZyBwYWNrZXQuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bml0aXRpYWxpemVkIG1lbW9yeSwgYW5kIHNpbmNlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSB0aGF0LCBpdCBpc24mIzM5O3QgcmVsZXZhbnQuIFRoaXMgaXMgYW4gb3ZlcmZsb3cvdHJ1bmNhdGlvbiBoYXJkZW5pbmcgY2hlY2suIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBidWdneSwgYW5kIHRoaXMgY2hlY2tzLCBwcmV2ZW50aW5nIHRoZSBidWcuCgpUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBUaGlzIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKWAgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCBpbiBgaGFuZGxlX2VzcCgpYCB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBUaGlzIGNoYW5nZSBjaGVja3Mgd2hldGhlciB0aGUgY2FsY3VsYXRlZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCAoYHNrYi1cdTAwM2VkYXRhIC0gc2tiLVx1MDAzZWhlYWRgKSBmaXRzIHNhZmVseSBpbnRvIHRoZSBgdHJhbnNwb3J0X2hlYWRlcmAgZmllbGQgd2l0aG91dCB0cnVuY2F0aW9uIG9yIG92ZXJmbG93OyBpZiBpbnZhbGlkLCBpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudGVyLlxuXG5UaGlzIGlzIGEgYm91bmRzL292ZXJmbG93IHZhbGlkYXRpb24gZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgaW50ZWdlciB0cnVuY2F0aW9uIGFuZCBjb3JydXB0ZWQgc2tiIGhlYWRlciBvZmZzZXRzICh3aGljaCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzIGNhdWdodCBieSBLQVNBTi9ERUJVR19ORVQpLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcigpYCB3aXRoIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIGluIGBoYW5kbGVfZXNwKClgIHdpdGhpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIFRoaXMgY2hhbmdlIGNoZWNrcyB3aGV0aGVyIHRoZSBjYWxjdWxhdGVkIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0IChgc2tiLVx1MDAzZWRhdGEgLSBza2ItXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXG5cblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0My4zOTYzMzM1NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4OTYxNTEzNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX0VTUElOVENQXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJYRlJNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJlc3BpbnRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKWAgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCBpbiBgaGFuZGxlX2VzcCgpYCB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBUaGlzIGNoYW5nZSBjaGVja3Mgd2hldGhlciB0aGUgY2FsY3VsYXRlZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCAoYHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXFxuXFxuVGhpcyBpcyBhIGJvdW5kcy9vdmVyZmxvdyB2YWxpZGF0aW9uIGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgY29ycnVwdGVkIHNrYiBoZWFkZXIgb2Zmc2V0cyAod2hpY2ggbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGFzc2VydGlvbiBmYWlsdXJlcyBjYXVnaHQgYnkgS0FTQU4vREVCVUdfTkVUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0My4zOTYzMzc4MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTYyNTY4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ODY2ODVmZWZjYzEwYTlhZDgwMDMzODM5NTIzNzgwNjkyZTFhMDhjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDE2OjM2OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXFxuaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jXFxuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbkBAIC0zMCw3ICszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVxcdTAwM2VjYjtcXG4gXFxuLVxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuK1xcdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7XFxuK1xcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4gXFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cXHUwMDNlbmhvZmYgKi9cXG4gXFx0bWVtbW92ZShza2ItXFx1MDAzZWNiLCBcXHUwMDI2dGNwX2NiLVxcdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXFx1MDAzZWhlYWRlcikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0NC43OTMyODg4ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExNzAyNjYzNTY3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIixcbiAgICBcIlhGUk1fRVNQSU5UQ1BcIixcbiAgICBcIklORVRfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BcIixcbiAgICBcIlhGUk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfZXNwXCIsXG4gICAgXCJlc3BpbnRjcF9yY3ZcIixcbiAgICBcImVzcGludGNwX3F1ZXVlX291dFwiLFxuICAgIFwiZXNwaW50Y3BfcHVzaF9za2JcIixcbiAgICBcImVzcGludGNwX3NlbmRtc2dcIixcbiAgICBcImVzcGludGNwX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbmNvbWluZyBFU1AgcGFja2V0IHByb2Nlc3NpbmcgaW4gbmV0L3hmcm0vZXNwaW50Y3AuYyBieSB1c2luZyBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsIHRvIHZhbGlkYXRlIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cyBiZWZvcmUgcmVzZXR0aW5nIHRoZW0gaW4gaGFuZGxlX2VzcCgpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGZvciBSRkMgODIyOSBFU1AtaW4tVENQIGVuY2Fwc3VsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgKzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXHUwMDNlY2I7XG4gXG4tXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbitcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0NC43OTMyOTExNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDAzNjc0MjU0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEVTUC1pbi1UQ1AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gUmlnaHQsIEVTUCBlbmNhcHN1bGF0ZWQgd2l0aGluIFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5LiBGaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG5ldC94ZnJtL2VzcGludGNwLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBYRlJNIGZyYW1ld29yay5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMsIGluIHRlcm1zIG9mIHJlc291cmNlIHVzYWdlLCBzZWN1cml0eSwgYW5kIHBlcmZvcm1hbmNlP1xuXG5JJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgdHJhdmVyc2UgdGhlIGNvZGUgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhhdCB3aWxsIGhlbHAgbWUgcXVpY2tseSBmaW5kIHRoZSByZWxldmFudCBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gZXZhbHVhdGUgdGhlIHBhdGNoJ3MgY2hhbmdlcyBwcm9wZXJseS4gSSBuZWVkIGEgc29saWQgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29kZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzk6MDUuMTYwNzE5NTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zdHJwYXJzZXIuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9lc3AuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za21zZy5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2hvdGRhdGEuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAxMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzaylcXG4gIDE0OlxcdHtcXG4gIDE1OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2U9IHNrLVxcdTAwM2Vza19yY3ZidWYgfHxcXG4gIDE2OlxcdFxcdCAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCBza2ItXFx1MDAzZXRydWVzaXplKSkge1xcbiAgMTc6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMTg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAxOTpcXHRcXHRcXHRyZXR1cm47XFxuICAyMDpcXHRcXHR9XFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuICAyNTpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Y3R4LVxcdTAwM2Vpa2VfcXVldWUsIHNrYik7XFxuICAyNjpcXHRcXHRjdHgtXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4gIDMwOlxcdHtcXG4gIDMxOlxcdFxcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXFx1MDAzZWNiO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbiAgMzQ6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMzU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAzNjpcXHRcXHRcXHRyZXR1cm47XFxuICAzNzpcXHRcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXFx1MDAzZW5ob2ZmICovXFxuICA0MDpcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlY2IsIFxcdTAwMjZ0Y3BfY2ItXFx1MDAzZWhlYWRlciwgc2l6ZW9mKHRjcF9jYi1cXHUwMDNlaGVhZGVyKSk7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gIDQzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXFx1MDAzZXNrYl9paWYpO1xcbiAgNDQ6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWRldikge1xcbiAgNDU6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgNDY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA0NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDQ4OlxcdFxcdH1cXG4gIDQ5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDUwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiAgNTE6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA1MjpcXHRcXHRcXHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcXG4gIDUzOlxcdFxcdGVsc2VcXG4gIDU0OlxcdCNlbmRpZlxcbiAgNTU6XFx0XFx0XFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XFxuICA1NjpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDU3OlxcdG91dDpcXG4gIDU4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgNTk6XFx0fVxcbiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3QgZXNwaW50Y3BfY3R4LFxcbiAgNjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RycCk7XFxuICA2NTpcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XFxuICA2NjpcXHRcXHRpbnQgbGVuID0gcnhtLVxcdTAwM2VmdWxsX2xlbiAtIDI7XFxuICA2NzpcXHRcXHR1MzIgbm9uZXNwX21hcmtlcjtcXG4gIDY4OlxcdFxcdGludCBlcnI7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXFxuICA3MTpcXHRcXHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XFxuICA3MjpcXHRcXHRcXHR1OCBkYXRhO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHRlcnIgPSBza2JfY29weV9iaXRzKHNrYiwgcnhtLVxcdTAwM2VvZmZzZXQgKyAyLCBcXHUwMDI2ZGF0YSwgMSk7XFxuICA3NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgNzY6XFx0XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IpO1xcbiAgNzc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuICA3OTpcXHRcXHRcXHR9XFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzk6MDUuMTYwODEzNDYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDA5MzYyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBtb2R1bGUgaW52ZXN0aWdhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgZXNwaW50Y3AuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gTXkgaW5pdGlhbCBtb3ZlIHdvdWxkIGJlIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQveGZybWAgZGlyZWN0b3J5LiBJJ2Qgc3RhcnQgYnkgZ3JlcHBpbmcsIG9idmlvdXNseS4gSSdsbCBzZWFyY2ggdGhvc2UgZmlsZXMgZm9yIFwiZXNwaW50Y3BcIi4gVGhhdCdsbCBiZSB0aGUgcXVpY2tlc3Qgd2F5IHRvIGZpbmQgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgYnVpbGQgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hlbiBhbmQgaG93IGBlc3BpbnRjcC5jYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgdG8gZmluZCBzb21lIGNsZWFyIGNsdWVzIHByZXR0eSBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozOTozNi4wNjE3NTIzNDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NjI3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSB4ZnJtX3N0YXRlX2JwZi5vXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTUtI2luY2x1ZGUgXFx1MDAzY25ldC9lc3AuaFxcdTAwM2VcXG5uZXQveGZybS9lc3BpbnRjcC5jOjY6I2luY2x1ZGUgXFx1MDAzY25ldC9lc3BpbnRjcC5oXFx1MDAzZVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2ttc2cuaFxcdTAwM2VcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjpzdGF0aWMgdm9pZCBoYW5kbGVfbm9uZXNwKHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzLVxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yOT1zdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNjAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo2MTpzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jLTYyLXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjYzOlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3QgZXNwaW50Y3BfY3R4LFxcbm5ldC94ZnJtL2VzcGludGNwLmMtNjQtXFx0XFx0XFx0XFx0XFx0XFx0c3RycCk7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTEyMC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjEyMTpzdGF0aWMgaW50IGVzcGludGNwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMjIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxNDI6c3RhdGljIGludCBlc3BpbnRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQzLVxcdFxcdFxcdCAgICBpbnQgZmxhZ3MpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDQte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6MTQ1OlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDYtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc1LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTc2OmludCBlc3BpbnRjcF9xdWV1ZV9vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc3LXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjE3ODpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc5LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xODktfVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTkwOkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3F1ZXVlX291dCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTI6LyogZXNwaW50Y3AgbGVuZ3RoIGZpZWxkIGlzIDJCIGFuZCBsZW5ndGggaW5jbHVkZXMgdGhlIGxlbmd0aCBmaWVsZCdzIHNpemUgKi9cXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5My0jZGVmaW5lIE1BWF9FU1BJTlRDUF9NU0cgKCgoMSBcXHUwMDNjXFx1MDAzYyAxNikgLSAxKSAtIDIpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTU6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2tiX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTYtXFx0XFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMTUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMTY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG5uZXQveGZybS9lc3BpbnRjcC5jOjIxNzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csIGludCBmbGFncylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTIxOC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI0Ny1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI0ODpzdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI0OS17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNTA6XFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI1MTpcXHRzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnID0gXFx1MDAyNmN0eC1cXHUwMDNlcGFydGlhbDtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI1Mi1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNjEtXFx0aWYgKGVtc2ctXFx1MDAzZXNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI2MjpcXHRcXHRlcnIgPSBlc3BpbnRjcF9zZW5kc2tiX2xvY2tlZChzaywgZW1zZywgZmxhZ3MpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjYzLVxcdGVsc2VcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI2NDpcXHRcXHRlcnIgPSBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNjUtXFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3Ni1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI3NzppbnQgZXNwaW50Y3BfcHVzaF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjc4LXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI3OTpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6MjgwOlxcdHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2cgPSBcXHUwMDI2Y3R4LVxcdTAwM2VwYXJ0aWFsO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjgxLVxcdHVuc2lnbmVkIGludCBsZW47XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI5MS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5MjpcXHRlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIDApO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjkzLVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDU6XFx0ZXNwaW50Y3BfcHVzaF9tc2dzKHNrLCAwKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwNi1cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzA4LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjMwOTpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9wdXNoX3NrYik7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMTE6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMi17XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTMtXFx0bG9uZyB0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjMxNDpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6MzE1OlxcdHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2cgPSBcXHUwMDI2Y3R4LVxcdTAwM2VwYXJ0aWFsO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzE2LVxcdHN0cnVjdCBpb3ZfaXRlciBwZnhfaXRlcjtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzMyLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzMzOlxcdGVyciA9IGVzcGludGNwX3B1c2hfbXNncyhzaywgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTM3Ni1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjM3NzpcXHRlcnIgPSBlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTM3OC1cXHQvKiB0aGlzIG1lc3NhZ2UgY291bGQgYmUgcGFydGlhbGx5IHNlbnQsIGtlZXAgaXQgKi9cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzkxLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzkyOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gZXNwaW50Y3BfcHJvdCBfX3JvX2FmdGVyX2luaXQ7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzozOTM6c3RhdGljIHN0cnVjdCBwcm90b19vcHMgZXNwaW50Y3Bfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NDpzdGF0aWMgc3RydWN0IHByb3RvIGVzcGludGNwNl9wcm90O1xcbm5ldC94ZnJtL2VzcGludGNwLmM6Mzk1OnN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGVzcGludGNwNl9vcHM7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTYtc3RhdGljIERFRklORV9NVVRFWCh0Y3B2Nl9wcm90X211dGV4KTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTM5Ny1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5ODpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTM5OS17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MDA6XFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQwMS1cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA2LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA4LXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQwOTpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yayxcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxMDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4LCB3b3JrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxMS1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXFx1MDAzZXN0cnAuc2s7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxNC1cXHRpZiAoIWN0eC1cXHUwMDNldHhfcnVubmluZylcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxNTpcXHRcXHRlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIDApO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDE2LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxOC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxOTpzdGF0aWMgdm9pZCBlc3BpbnRjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MjAte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDIxOlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MjItXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQyNi1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQyNzpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDI5OlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzAtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTQzNT1ib29sIHRjcF9pc191bHBfZXNwKHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzNi17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mzc6XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZlc3BpbnRjcF9wcm90IHx8IHNrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZlc3BpbnRjcDZfcHJvdDtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzOC19XFxubmV0L3hmcm0vZXNwaW50Y3AuYz00Mzk9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2lzX3VscF9lc3ApO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQwLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQxOnN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDI6XFx0XFx0XFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0My1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvICpvcmlnX3Byb3QsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDQtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9yaWdfb3BzKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0NTpzdGF0aWMgaW50IGVzcGludGNwX2luaXRfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ2LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ4LVxcdHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0OTpcXHRcXHQucmN2X21zZyA9IGVzcGludGNwX3JjdixcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1MDpcXHRcXHQucGFyc2VfbXNnID0gZXNwaW50Y3BfcGFyc2UsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NTEtXFx0fTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1MjpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHg7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NTMtXFx0aW50IGVycjtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ1NC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1NTpcXHQvKiBzb2NrbWFwIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZXNwaW50Y3AgKi9cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ1Ni1cXHRpZiAoc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDczLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQpIHtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ3NDpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdCA9IFxcdTAwMjZlc3BpbnRjcF9wcm90O1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDc1OlxcdFxcdHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZW9wcyA9IFxcdTAwMjZlc3BpbnRjcF9vcHM7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NzYtXFx0fSBlbHNlIHtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3Ny1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ0Y3B2Nl9wcm90X211dGV4KTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ3ODpcXHRcXHRpZiAoIWVzcGludGNwNl9wcm90LnJlY3Ztc2cpXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Nzk6XFx0XFx0XFx0YnVpbGRfcHJvdG9zKFxcdTAwMjZlc3BpbnRjcDZfcHJvdCwgXFx1MDAyNmVzcGludGNwNl9vcHMsIHNrLVxcdTAwM2Vza19wcm90LCBzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VvcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDgwLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dGNwdjZfcHJvdF9tdXRleCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00ODEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODI6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QgPSBcXHUwMDI2ZXNwaW50Y3A2X3Byb3Q7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODM6XFx0XFx0c2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlb3BzID0gXFx1MDAyNmVzcGludGNwNl9vcHM7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00ODQtXFx0fVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00ODctXFx0Y3R4LVxcdTAwM2VzYXZlZF9kZXN0cnVjdCA9IHNrLVxcdTAwM2Vza19kZXN0cnVjdDtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ4ODpcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSA9IGVzcGludGNwX2RhdGFfcmVhZHk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODk6XFx0c2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlID0gZXNwaW50Y3Bfd3JpdGVfc3BhY2U7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTA6XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gZXNwaW50Y3BfZGVzdHJ1Y3Q7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00OTEtXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGljc2stXFx1MDAzZWljc2tfdWxwX2RhdGEsIGN0eCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTI6XFx0SU5JVF9XT1JLKFxcdTAwMjZjdHgtXFx1MDAzZXdvcmssIGVzcGludGNwX3R4X3dvcmspO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDkzLVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MDU6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDYte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTA3OlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDgtXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTE0LVxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2cXVldWUpKSlcXG5uZXQveGZybS9lc3BpbnRjcC5jOjUxNTpcXHRcXHRlc3BpbnRjcF9wdXNoX3NrYihzaywgc2tiKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNi1cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTE5LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIwOnN0YXRpYyB2b2lkIGVzcGludGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTIxLXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjUyMjpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIzOlxcdHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2cgPSBcXHUwMDI2Y3R4LVxcdTAwM2VwYXJ0aWFsO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTI0LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NDc6c3RhdGljIF9fcG9sbF90IGVzcGludGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDgtXFx0XFx0XFx0ICAgICAgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTUwLVxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTUxOlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTItXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTU1NS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjU1NjpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTU3OlxcdFxcdFxcdCBzdHJ1Y3QgcHJvdG9fb3BzICplc3BpbnRjcF9vcHMsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTgtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcm90byAqb3JpZ19wcm90LFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYxOlxcdG1lbWNweShlc3BpbnRjcF9wcm90LCBvcmlnX3Byb3QsIHNpemVvZihzdHJ1Y3QgcHJvdG8pKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MjpcXHRtZW1jcHkoZXNwaW50Y3Bfb3BzLCBvcmlnX29wcywgc2l6ZW9mKHN0cnVjdCBwcm90b19vcHMpKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MzpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VzZW5kbXNnID0gZXNwaW50Y3Bfc2VuZG1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NDpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWN2bXNnID0gZXNwaW50Y3BfcmVjdm1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NTpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VjbG9zZSA9IGVzcGludGNwX2Nsb3NlO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY2OlxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXJlbGVhc2VfY2IgPSBlc3BpbnRjcF9yZWxlYXNlO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY3OlxcdGVzcGludGNwX29wcy1cXHUwMDNlcG9sbCA9IGVzcGludGNwX3BvbGw7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjgtfVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTY5LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTcwOnN0YXRpYyBzdHJ1Y3QgdGNwX3VscF9vcHMgZXNwaW50Y3BfdWxwIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzE6XFx0Lm5hbWUgPSBcXFwiZXNwaW50Y3BcXFwiLFxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTcyLVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTczOlxcdC5pbml0ID0gZXNwaW50Y3BfaW5pdF9zayxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3NC19O1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc1LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTc2OnZvaWQgX19pbml0IGVzcGludGNwX2luaXQodm9pZClcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3Ny17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1Nzg6XFx0YnVpbGRfcHJvdG9zKFxcdTAwMjZlc3BpbnRjcF9wcm90LCBcXHUwMDI2ZXNwaW50Y3Bfb3BzLCBcXHUwMDI2dGNwX3Byb3QsIFxcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc5LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTgwOlxcdHRjcF9yZWdpc3Rlcl91bHAoXFx1MDAyNmVzcGludGNwX3VscCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01ODEtfVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NS0jaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ3LSNlbmRpZlxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDA0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDE0LSNpZmRlZiBDT05GSUdfWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQxNTpcXHRlc3BpbnRjcF9pbml0KCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDE2LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozOTozNi4xMDU1MTgxMDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTc4OTc2MDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIFhGUk1fRVNQSU5UQ1AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFhGUk1fRVNQSU5UQ1BgLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIGZlYXR1cmUgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgbG9naWMgZnJvbSB0aGVyZS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgY2hlY2tpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIG5ldHdvcmtpbmctcmVsYXRlZCBmaWxlcywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gWEZSTSAoSVBzZWMgZnJhbWV3b3JrKS4gSSdtIGhvcGluZyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQsIGJ1dCBJJ20gcHJlcGFyZWQgZm9yIGEgYml0IG9mIGEgaHVudCBpZiBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBYRlJNX0VTUElOVENQYCAqYWN0dWFsbHkqIG1lYW5zIGluIHRlcm1zIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo0MDoxNS44OTUyODA5NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMDgzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fRVNQSU5UQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjQwOjE1Ljk2MjQ5MzY4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODUxOTU0ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgSW1wbGljYXRpb25zIG9mIENPTkZJR19YRlJNX0VTUElOVENQKipcblxuT2theSwgc28gYENPTkZJR19YRlJNX0VTUElOVENQYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB3aGF0J3MgKnVzaW5nKiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgaXQsIGFuZCB0aGUga2VybmVsIG1vZHVsZXMgb3IgYXBwbGljYXRpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSByZWx5IG9uIGl0LiBBIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIHRyZWVzIGlzIHByb2JhYmx5IHRoZSBmaXJzdCBzdGVwIOKAkyBmaW5kIGFsbCBpbnN0YW5jZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBpbiBgS2NvbmZpZ2AgZmlsZXMsIHRvIHNlZSBob3cgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gSSBleHBlY3QgaXQncyBwYXJ0IG9mIGEgbGFyZ2VyIHNlY3VyaXR5IGZlYXR1cmUgc2V0LCBwcm9iYWJseSByZWxhdGVkIHRvIElQc2VjLlxuXG5JJ20gYXNzdW1pbmcgdGhpcyBlbmFibGVzIHRoZSBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgcHJvdG9jb2wgd2l0aGluIHRoZSBYRlJNIChlWHRlcm5hbCBGaXJld2FsbCBhbmQgUm91dGluZyBNYW5hZ2VtZW50KSBmcmFtZXdvcmssIGJ1dCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIFwiSU5UQ1BcIiBzdWZmaXggc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVENQIGVuY2Fwc3VsYXRpb24gKndpdGhpbiogRVNQLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjZW5hcmlvcyB3aGVyZSBzdGFuZGFyZCBJUHNlYyB0cmF2ZXJzYWwgbWlnaHQgYmUgcHJvYmxlbWF0aWMg4oCTIHBlcmhhcHMgTkFUIHRyYXZlcnNhbCwgb3IgZW52aXJvbm1lbnRzIHdoZXJlIGRpcmVjdCBVRFAgb3IgR1JFIGVuY2Fwc3VsYXRpb24gaXMgcmVzdHJpY3RlZC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyBuZWNlc3NpdGF0ZSBlbmNhcHN1bGF0aW5nIEVTUCB0cmFmZmljIGluIFRDUC4gSXMgdGhpcyBhIGNvbW1vbiBwcmFjdGljZT8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IEFyZSB0aGVyZSBkb2N1bWVudGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBjb25maWd1cmF0aW9uP1xuXG5NeSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gVENQJ3MgY29ubmVjdGlvbi1vcmllbnRlZCBuYXR1cmUgaW50cm9kdWNlcyBhIGRpZmZlcmVudCBhdHRhY2sgc3VyZmFjZSBjb21wYXJlZCB0byBVRFAuIEFyZSB0aGVyZSBrbm93biB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBUQ1AtZW5jYXBzdWxhdGVkIEVTUCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXhpdGllcyB3aXRoIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIGVuY2Fwc3VsYXRpb24gaXMgaW1wbGVtZW50ZWQuIElzIGl0IGEgc2ltcGxlIFRDUCBzb2NrZXQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIGZvcm0gb2YgcHJvdG9jb2wgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsP1xuXG5GaW5hbGx5LCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBpcyBrZXkuIFRoZSBleHRyYSBUQ1AgaGVhZGVyIHdpbGwgYWRkIG92ZXJoZWFkLCBhbmQgdGhlIGtlcm5lbCB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZS4gSSdsbCB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgYmVuY2htYXJrcyBjb21wYXJpbmcgVENQLWVuY2Fwc3VsYXRlZCBFU1AgdG8gb3RoZXIgSVBzZWMgdHJhbnNwb3J0IG1ldGhvZHMsIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgY29uc2lkZXJlZCBuZWNlc3NhcnkuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga25vdyB3aHkgc29tZW9uZSB3b3VsZCBjaG9vc2UgdGhpcywgd2hhdCBpdCBidXlzIHRoZW0sIGFuZCB3aGF0IGl0IGNvc3RzIHRoZW0uIExldCdzIHN0YXJ0IHdpdGggdGhlIGBncmVwYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDA6NTkuODE0NDUxNzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgyMjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgKz0geGZybV9pcHRmcy5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICs9IGVzcGludGNwLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHhmcm1fc3RhdGVfYnBmLm9cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQtI2VuZGlmXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTojaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2LSNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxMy1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTQ6I2lmZGVmIENPTkZJR19YRlJNX0VTUElOVENQXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDE1LVxcdGVzcGludGNwX2luaXQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDA6NTkuODgyMjgxMDA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NDEyNDY0MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCdzIGxpa2VseSBkcml2aW5nIHRoaXMsIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMzgyLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgSVB2NC1yZWxhdGVkIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBJIHN1c3BlY3QgdGhlIGlzc3VlIGlzIGJ1cmllZCBpbiB0aGVyZSBzb21ld2hlcmUuIFRoZW4sIEnigJlsbCBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgbmV0L2lwdjYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5MC4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aCBJUHY2IHNldHRpbmdzLCBhbmQgaXQncyBhbHdheXMgc21hcnQgdG8gY2hlY2sgYm90aCBzaWRlcyB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBjb25mbGljdGluZyBvciB1bmV4cGVjdGVkbHkgaW50ZXJhY3RpbmcuIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgYmVoYXZpb3IgdGhhdCBoYXMgcGlxdWVkIG15IGludGVyZXN0LiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBrZXJuZWwgaXMgcmVhbGx5IHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjQxOjU2LjI5NDc0ODc4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNzU6XFx0XFx0ICBTdXBwb3J0IGZvciBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZC4gVGhpcyBtYWtlcyBzZW5zZVxcbiAzNzY6XFx0XFx0ICBvbmx5IGlmIHRoaXMgc3lzdGVtIHJlYWxseSBkb2VzIElQc2VjIGFuZCB3YW50IHRvIGRvIGl0XFxuIDM3NzpcXHRcXHQgIHdpdGggaGlnaCB0aHJvdWdocHV0LiBBIHR5cGljYWwgZGVza3RvcCBzeXN0ZW0gZG9lcyBub3RcXG4gMzc4OlxcdFxcdCAgbmVlZCBpdCwgZXZlbiBpZiBpdCBkb2VzIElQc2VjLlxcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDM4MTpcXHRcXG4gMzgyOlxcdGNvbmZpZyBJTkVUX0VTUElOVENQXFxuIDM4MzpcXHRcXHRib29sIFxcXCJJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuIDM4NDpcXHRcXHRkZXBlbmRzIG9uIFhGUk0gXFx1MDAyNlxcdTAwMjYgSU5FVF9FU1BcXG4gMzg1OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM4NjpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM4NzpcXHRcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbiAzODg6XFx0XFx0aGVscFxcbiAzODk6XFx0XFx0ICBTdXBwb3J0IGZvciBSRkMgODIyOSBlbmNhcHN1bGF0aW9uIG9mIEVTUCBhbmQgSUtFIG92ZXJcXG4gMzkwOlxcdFxcdCAgVENQL0lQdjQgc29ja2V0cy5cXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzOTM6XFx0XFxuIDM5NDpcXHRjb25maWcgSU5FVF9JUENPTVBcXG4gMzk1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXFxcIlxcbiAzOTY6XFx0XFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG4gMzk3OlxcdFxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbiAzOTg6XFx0XFx0aGVscFxcbiAzOTk6XFx0XFx0ICBTdXBwb3J0IGZvciBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sIChJUENvbXApIChSRkMzMTczKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDE6NTYuMjk0ODU4MjM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjAzNjY0OTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiBjb25maWd1cmF0aW9uIGlzc3VlLiBUaW1lIHRvIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLCBhbmQgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugc29tZSB0aGluZ3MuIExldCdzIG5vdCBqdXN0IHN0YXkgZm9jdXNlZCBvbiBvbmUgZmlsZSwgYnV0IHNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvaXB2Ni9LY29uZmlnYC4gSSBzZWVtIHRvIHJlY2FsbCBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBvcHRpb24gZGVmaW5pdGlvbnMgYXJvdW5kIGxpbmUgOTAgdGhlcmUsIGFuZCB0aGF0IGFyZWEgdXN1YWxseSBjb250YWlucyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBmbGFncyBvciBkZWZhdWx0cywgc28gaXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTGV0IG1lIGp1bXAgdGhlcmUgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo0Mzo1OC4zMzE1MTA2MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxuICA4MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgU3VwcG9ydCBmb3IgRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWQuIFRoaXMgbWFrZXMgc2Vuc2VcXG4gIDg0OlxcdFxcdCAgb25seSBpZiB0aGlzIHN5c3RlbSByZWFsbHkgZG9lcyBJUHNlYyBhbmQgd2FudCB0byBkbyBpdFxcbiAgODU6XFx0XFx0ICB3aXRoIGhpZ2ggdGhyb3VnaHB1dC4gQSB0eXBpY2FsIGRlc2t0b3Agc3lzdGVtIGRvZXMgbm90XFxuICA4NjpcXHRcXHQgIG5lZWQgaXQsIGV2ZW4gaWYgaXQgZG9lcyBJUHNlYy5cXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODk6XFx0XFxuICA5MDpcXHRjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4gIDkxOlxcdFxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbiAgOTI6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElORVQ2X0VTUFxcbiAgOTM6XFx0XFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG4gIDk0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0dcXG4gIDk1OlxcdFxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQyA4MjI5IGVuY2Fwc3VsYXRpb24gb2YgRVNQIGFuZCBJS0Ugb3ZlclxcbiAgOTg6XFx0XFx0ICBUQ1AvSVB2NiBzb2NrZXRzLlxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGNvbmZpZyBJTkVUNl9JUENPTVBcXG4gMTAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuIDEwNDpcXHRcXHRzZWxlY3QgSU5FVDZfWEZSTV9UVU5ORUxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDM6NTguMzMxNTc0MjgzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5NjE5OTU3NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBUaGV5J3JlIGRlcGVuZGVudCBvbiBgWEZSTWAgYW5kIHRoZSByZWd1bGFyIGBJTkVUX0VTUGAvYElORVQ2X0VTUGAgbW9kdWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgd2hlbiBlbmFibGVkLCBgWEZSTV9FU1BJTlRDUGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgZnJvbSBhIHByYWN0aWNhbCBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBzdGFuZHBvaW50LCBpcyB3aGV0aGVyIHRoaXMgY29uZmlndXJhdGlvbiBpcyBldmVuICphY2hpZXZhYmxlKiBpbiBhIHN0YW5kYXJkIHNldHVwLlxuXG5BaCwgeWVzLiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KSAqaXMqIGEgc3RhbmRhcmQgc29ja2V0IFVMUCwgc3BlY2lmaWNhbGx5IGhhbmRsZWQgYnkgYHRjcF9yZWdpc3Rlcl91bHAoXHUwMDI2ZXNwaW50Y3BfdWxwKWAuIFRoaXMgbWVhbnMgdGhhdCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gaW5kZWVkIHVzZSBpdCDigJMgaXQgY2FuIGNyZWF0ZSBhIFRDUCBzb2NrZXQgYW5kIHNldCBgVENQX1VMUGAgd2l0aCBcImVzcGludGNwXCIuIFRoYXQgYWxsb3dzIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBFU1Agb3IgSUtFIHBhY2tldHMgb3ZlciBUQ1Agc29ja2V0cywgb3IgZXZlbiB0aHJvdWdoIHhmcm0gbmV0bGluaywgd2hpY2ggaXMgcXVpdGUgZmxleGlibGUuXG5cblNvLCB3aGVuIHRoZSBrZXJuZWwgKnJlY2VpdmVzKiB0aGVzZSBlbmNhcHN1bGF0ZWQgcGFja2V0cywgaXQgZW5kcyB1cCBpbiBgZXNwaW50Y3BfcmN2YCwgd2hpY2ggdGhlbiBjYWxscyBgaGFuZGxlX2VzcGAuIEkgcmVjYWxsIGEgcmVjZW50IHJldmlzaW9uIHdoZXJlIHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24gaGFkIHRoZSBmb2xsb3dpbmcgY29kZTpcbmBgYGNcbnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxue1xuXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuXG5cdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7XG5cdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuXHRcdGtmcmVlX3NrYihza2IpO1xuXHRcdHJldHVybjtcblx0fVxuLi4uXG5gYGBcblRoZSBrZXkgY2hhbmdlIGhlcmUsIG9yIGF0IGxlYXN0IHRoZSBwb2ludCBvZiBpbnRlcmVzdCBmb3IgbWUsIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgLiBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBhbmQgcXVpY2tseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCB2YWxpZGF0ZXMgdGhlIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSByZXNldCBvcGVyYXRpb24uIFRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgc2VjdXJpdHkgbWVhc3VyZSBhZ2FpbnN0IHBvdGVudGlhbCBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGhlYWRlciBpbmplY3Rpb24uIEtub3dpbmcgdGhpcyBhbGxvd3MgbWUgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCB0byBwb3RlbnRpYWxseSBhc3Nlc3MgdGhlIHN0YWJpbGl0eSBvZiB0aGUgbW9kdWxlIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDU6MjcuOTUxNTM0MjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyNjk1MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMDk2PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTA0LS8qKlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzEwNTogKiBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsIC0gY29uZGl0aW9uYWxseSByZXNldCB0cmFuc3BvcnQgaGVhZGVyXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTA2LSAqIEBza2I6IGJ1ZmZlciB0byBhbHRlclxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMTEyPXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMTM6c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzExNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjQ1OjI5LjQ5NDIzMzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc1NDMyMjExMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uOlxuXG4qKkFuYWx5emluZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEkga25vdyB0aGlzIGlzIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgc28gaXQncyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uLCBsaWtlbHkgbG93LWxldmVsLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgZGV0YWlscyBpbiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24sIGFuZCB3aGVyZSB0aGlzIGlzIGRlZmluZWQgdG8gZ2V0IHRvIGl0cyBjb250ZXh0LiBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQncyB0aGVyZSB0byBwcm90ZWN0IGZyb20gYW4gZWRnZSBjYXNlLCBvciBpZiBpdCBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIFwiY2FyZWZ1bFwiIGlzIGEgZ29vZCBjbHVlIHRoYXQgaXQncyBwcm9iYWJseSBhYm91dCBzYWZldHkgLSBwb3RlbnRpYWxseSBib3VuZGFyeSBjaGVja3Mgb3IgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGNvcnJ1cHRpb24uIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgLSBJIG5lZWQgdG8ga25vdyBob3cgdGhlIG5ldHdvcmsgc3RhY2sgZGVhbHMgd2l0aCB0cmFuc3BvcnQgaGVhZGVyIG1hbmlwdWxhdGlvbiwgYW5kIHdoYXQgc3BlY2lmaWMgc2NlbmFyaW9zIHdhcnJhbnQgdGhpcyBcImNhcmVmdWxcIiBhcHByb2FjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkgdG8gaWRlbnRpZnkgdGhlIHJpc2tzIGFuZCBkZXNpZ24gYW4gYXBwcm9hY2ggdG8gbWl0aWdhdGUgdGhlbSwgaWYgdGhlcmUgYXJlIGFueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo0NjoyNy4wMzc0NTcxNjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzEwNCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzEwNDpcXHQvKipcXG4zMTA1OlxcdCAqIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRyYW5zcG9ydCBoZWFkZXJcXG4zMTA2OlxcdCAqIEBza2I6IGJ1ZmZlciB0byBhbHRlclxcbjMxMDc6XFx0ICpcXG4zMTA4OlxcdCAqIEhhcmRlbmVkIHZlcnNpb24gb2Ygc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKS5cXG4zMTA5OlxcdCAqXFxuMzExMDpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gd2FzIGEgc3VjY2Vzcy5cXG4zMTExOlxcdCAqL1xcbjMxMTI6XFx0c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xcbjMxMTM6XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjMxMTQ6XFx0e1xcbjMxMTU6XFx0XFx0bG9uZyBvZmZzZXQgPSBza2ItXFx1MDAzZWRhdGEgLSBza2ItXFx1MDAzZWhlYWQ7XFxuMzExNjpcXHRcXG4zMTE3OlxcdFxcdGlmICh1bmxpa2VseShvZmZzZXQgIT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKW9mZnNldCkpXFxuMzExODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzExOTpcXHRcXG4zMTIwOlxcdFxcdGlmICh1bmxpa2VseShvZmZzZXQgPT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVSkpXFxuMzEyMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzEyMjpcXHRcXG4zMTIzOlxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IG9mZnNldDtcXG4zMTI0OlxcdFxcdHJldHVybiB0cnVlO1xcbjMxMjU6XFx0fVxcbjMxMjY6XFx0XFxuMzEyNzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuMzEyODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IG9mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDY6MjcuMDM3NzE0NzA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDgxOTEwNjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUElOVENQIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlc3NlbnRpYWwgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCB0byB3b3JrIHByb3Blcmx5LiBTaW5jZSB0aGUgY29kZSBtb2RpZmllcyB0aGUgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AsIHRoYXQncyBteSBwcmltYXJ5IGZvY3VzLiBcblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSB3aXRoaW4gdGhhdCBmaWxlLiBJIHF1aWNrbHkgY2hlY2tlZCwgYW5kIEkgc2VlIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIEkgc2hvdWxkIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgb3IgYW55IHBvc3NpYmxlIGVudHJ5IHBvaW50cyBpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCBtZSBnbyBhaGVhZCBhbmQgZXhhbWluZSBhbGwgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHdpdGggdGhlIGNoYW5nZSB0byBgaGFuZGxlX2VzcGAsIGFuZCBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgb3ZlcnZpZXcgb2Ygd2hhdCB0byBsb29rIGZvciBnb2luZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjUyOjMxLjg1NjgyNDQ3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDIxMzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmMtMTEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjpzdGF0aWMgdm9pZCBoYW5kbGVfbm9uZXNwKHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzLVxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yOC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5OnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy02MC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjYxOnN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNjIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMjAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjE6c3RhdGljIGludCBlc3BpbnRjcF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTIyLXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQxLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTQyOnN0YXRpYyBpbnQgZXNwaW50Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTE0My1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxNzY6aW50IGVzcGludGNwX3F1ZXVlX291dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzcte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xODktfVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTkwOkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3F1ZXVlX291dCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTEtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5NC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjE5NTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZyxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5Ni1cXHRcXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTIxNS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjIxNjpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjE3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZywgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDctXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNDg6c3RhdGljIGludCBlc3BpbnRjcF9wdXNoX21zZ3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDkte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNzYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNzc6aW50IGVzcGludGNwX3B1c2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3OC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwOC19XFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDk6RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcHVzaF9za2IpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzEwLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzExOnN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0zOTU9c3RhdGljIHN0cnVjdCBwcm90b19vcHMgZXNwaW50Y3A2X29wcztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NjpzdGF0aWMgREVGSU5FX01VVEVYKHRjcHY2X3Byb3RfbXV0ZXgpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk3LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6Mzk4OnN0YXRpYyB2b2lkIGVzcGludGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk5LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA2LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA4LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDE4LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDE5OnN0YXRpYyB2b2lkIGVzcGludGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQyMC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQyNi1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQyNzpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MzU6Ym9vbCB0Y3BfaXNfdWxwX2VzcChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzYte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzgtfVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDM5OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9pc191bHBfZXNwKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0MC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0MTpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQyLVxcdFxcdFxcdCBzdHJ1Y3QgcHJvdG9fb3BzICplc3BpbnRjcF9vcHMsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQ1OnN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDYte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MDU6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDYte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MTktXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MjA6c3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MjEte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NDc6c3RhdGljIF9fcG9sbF90IGVzcGludGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDgtXFx0XFx0XFx0ICAgICAgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTU1LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTU2OnN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTctXFx0XFx0XFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NTcwPXN0YXRpYyBzdHJ1Y3QgdGNwX3VscF9vcHMgZXNwaW50Y3BfdWxwIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3NS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjU3Njp2b2lkIF9faW5pdCBlc3BpbnRjcF9pbml0KHZvaWQpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01Nzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1MjozMy4zNzEwNDU0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ3ODgyMzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUC9UQ1AgVUxQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gSXQgbG9va3MgbGlrZSBgZXNwaW50Y3BfcmN2YCBpcyB0aGUga2V5LCBhbmQgaXQgY2FsbHMgZWl0aGVyIGBoYW5kbGVfZXNwYCBvciBgaGFuZGxlX25vbmVzcGAsIGRlcGVuZGluZyBvbiBzb21ldGhpbmcgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuIFJpZ2h0LCBgZXNwaW50Y3BfcmN2YCBpcyB0aGUgcmVjZWl2ZSBtZXNzYWdlIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBgc3RycGFyc2VyYCB2aWEgdGhhdCBgY2IucmN2X21zZ2AgYXNzaWdubWVudC4gR290IGl0LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaG93IHRoZSBVTFAgc29ja2V0IGl0c2VsZiBpcyBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IGBlc3BpbnRjcF9pbml0X3NrYC5cblxuQmVzaWRlcyB0aGUgYHJjdmAgcGF0aCwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSB0cmFuc21pdCBzaWRlLCBzbyBJJ2xsIGtlZXAgYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgb24gbXkgcmFkYXIsIGFzIHdlbGwgYXMgYHRjcF9pc191bHBfZXNwYC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYGVzcGludGNwX3NlbmRtc2dgIGFuZCBgZXNwaW50Y3BfcmVjdm1zZ2AgYXMgd2VsbC4gVGhlIG1lYXQgb2YgdW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgY29tZSBkb3duIHRvIGEgZGV0YWlsZWQgbG9vayBhdCBgZXNwaW50Y3BfcmN2YCBhbmQgZXNwZWNpYWxseSBgaGFuZGxlX2VzcGAuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTI6NTkuODQ5ODcyNTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuICA2MjpcXHR7XFxuICA2MzpcXHRcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBjb250YWluZXJfb2Yoc3RycCwgc3RydWN0IGVzcGludGNwX2N0eCxcXG4gIDY0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnApO1xcbiAgNjU6XFx0XFx0c3RydWN0IHN0cnBfbXNnICpyeG0gPSBzdHJwX21zZyhza2IpO1xcbiAgNjY6XFx0XFx0aW50IGxlbiA9IHJ4bS1cXHUwMDNlZnVsbF9sZW4gLSAyO1xcbiAgNjc6XFx0XFx0dTMyIG5vbmVzcF9tYXJrZXI7XFxuICA2ODpcXHRcXHRpbnQgZXJyO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQvKiBrZWVwYWxpdmUgcGFja2V0PyAqL1xcbiAgNzE6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiA9PSAxKSkge1xcbiAgNzI6XFx0XFx0XFx0dTggZGF0YTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0XFx0ZXJyID0gc2tiX2NvcHlfYml0cyhza2IsIHJ4bS1cXHUwMDNlb2Zmc2V0ICsgMiwgXFx1MDAyNmRhdGEsIDEpO1xcbiAgNzU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gIDc2OlxcdFxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXFx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkhEUkVSUk9SKTtcXG4gIDc3OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNzg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAgNzk6XFx0XFx0XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHRcXHRpZiAoZGF0YSA9PSAweGZmKSB7XFxuICA4MjpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDgzOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gIDg0OlxcdFxcdFxcdH1cXG4gIDg1OlxcdFxcdH1cXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0LyogZHJvcCBvdGhlciBzaG9ydCBtZXNzYWdlcyAqL1xcbiAgODg6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiBcXHUwMDNjPSBzaXplb2Yobm9uZXNwX21hcmtlcikpKSB7XFxuICA4OTpcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzdHJwLVxcdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XFxuICA5MDpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDkxOlxcdFxcdFxcdHJldHVybjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ZXJyID0gc2tiX2NvcHlfYml0cyhza2IsIHJ4bS1cXHUwMDNlb2Zmc2V0ICsgMiwgXFx1MDAyNm5vbmVzcF9tYXJrZXIsXFxuICA5NTpcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKG5vbmVzcF9tYXJrZXIpKTtcXG4gIDk2OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuICA5NzpcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzdHJwLVxcdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XFxuICA5ODpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDk5OlxcdFxcdFxcdHJldHVybjtcXG4gMTAwOlxcdFxcdH1cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0LyogcmVtb3ZlIGhlYWRlciwgbGVhdmUgbm9uLUVTUCBtYXJrZXIvU1BJICovXFxuIDEwMzpcXHRcXHRpZiAoIXBza2JfcHVsbChza2IsIHJ4bS1cXHUwMDNlb2Zmc2V0ICsgMikpIHtcXG4gMTA0OlxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXFx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4gMTA1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxMDY6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMDc6XFx0XFx0fVxcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRpZiAocHNrYl90cmltKHNrYiwgcnhtLVxcdTAwM2VmdWxsX2xlbiAtIDIpICE9IDApIHtcXG4gMTEwOlxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXFx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4gMTExOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxMTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTM6XFx0XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRpZiAobm9uZXNwX21hcmtlciA9PSAwKVxcbiAxMTY6XFx0XFx0XFx0aGFuZGxlX25vbmVzcChjdHgsIHNrYiwgc3RycC1cXHUwMDNlc2spO1xcbiAxMTc6XFx0XFx0ZWxzZVxcbiAxMTg6XFx0XFx0XFx0aGFuZGxlX2VzcChza2IsIHN0cnAtXFx1MDAzZXNrKTtcXG4gMTE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTI6NTkuODUwMDAzNjI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMzExMDMwNzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUElOVENQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaGFuZGxlX2VzcGAgZnVuY3Rpb24sIHdoaWNoIGZyb20gd2hhdCBJIGNhbiBzZWUsIGdldHMgY2FsbGVkIGZyb20gYGVzcGludGNwX3JjdmAuIExldCdzIGNsYXJpZnkgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGhhbmRsZV9lc3BgIGFuZCBmdW5jdGlvbnMgbGlrZSBgZXNwaW50Y3BfcmN2YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYW5kIGBlc3BpbnRjcF9yZWN2bXNnYC5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IG90aGVyIGNvZGUgcGF0aHMgY2FsbCBgaGFuZGxlX2VzcGAgb3IgYW55IG9mIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCBhbGwgZW50cnkgcG9pbnRzLlxuXG5OZXh0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGVzIGluIGBuZXQvaXB2NC9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9rYXksIEkgc2VlIGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYC4gVGhleSBib3RoIGRlcGVuZCBvbiBgWEZSTWAgYW5kIGBJTkVUL0lORVQ2X0VTUGAsIGFuZCB0aGV5IGFsc28gc2VsZWN0IGBTVFJFQU1fUEFSU0VSYCwgYE5FVF9TT0NLX01TR2AsIGFuZCBgWEZSTV9FU1BJTlRDUGAuIEdyZWF0LCB0aGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydC4gSSBjYW4gc2VlIHdoYXQgSSBuZWVkIHRvIGxvb2sgZm9yLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuXG5cbk5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gc2VlIGlmIGBJTkVUX0VTUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaW4gYG5ldC9pcHY0L0tjb25maWdgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NTowMi45NjAzMTM5NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIyMjcwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRfRVNQXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzUzLVxcbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NTowNC41NTI1NDkzMjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU1OTE3MjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcy4gTGV0J3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgaXQncyBzb21ld2hlcmUgaW4gdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzU0LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGJldCBJIGNhbiBxdWlja2x5IHRyYWNlIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBvbmNlIEkgaGF2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIG9wdGlvbiBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6MTAuMTExNzI0NjI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0Y29uZmlnIElORVRfRVNQXFxuIDM1NTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4gMzU2OlxcdFxcdHNlbGVjdCBYRlJNX0VTUFxcbiAzNTc6XFx0XFx0aGVscFxcbiAzNTg6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHNlYyBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkuXFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdCAgRVNQIGNhbiBiZSB1c2VkIHdpdGggdmFyaW91cyBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zLlxcbiAzNjE6XFx0XFx0ICBCZXNpZGVzIGVuYWJsaW5nIEVTUCBzdXBwb3J0IGl0c2VsZiwgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZ2VuZXJpY1xcbiAzNjI6XFx0XFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlXFxuIDM2MzpcXHRcXHQgIGltcGxlbWVudGVkLiAgSWYgeW91IG5lZWQgYW55IG90aGVyIGFsZ29yaXRobXMsIHlvdSdsbCBuZWVkIHRvIGVuYWJsZVxcbiAzNjQ6XFx0XFx0ICB0aGVtIGluIHRoZSBjcnlwdG8gQVBJLiAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBhY2NlbGVyYXRlZFxcbiAzNjU6XFx0XFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgYW55IG5lZWRlZCBhbGdvcml0aG1zIHdoZW4gYXZhaWxhYmxlLlxcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDM2ODpcXHRcXG4gMzY5OlxcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuIDM3MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbiAzNzE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbiAzNzI6XFx0XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbiAzNzM6XFx0XFx0ZGVmYXVsdCBuXFxuIDM3NDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU1OjEwLjExMTg1MDc1N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTAxMTkxNzIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24uIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byB0aGUgbGlrZWx5IGxvY2F0aW9ucyBmb3IgdGhlc2UgY29uZmlndXJhdGlvbnM6IHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgb3IgcGVyaGFwcyB0aGUgYnJvYWRlciBgbmV0L0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3MgdGhlcmUgdG8gZW5zdXJlIEkgZnVsbHkgZ3Jhc3AgdGhlIHN0YXRlIG9mIFhGUk0gd2l0aGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6MjEuMTIzNzcyMzExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAzNjczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6MjEuMjY0MTQ0Njc4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDg2NjkyMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgWEZSTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCAzMCBsaW5lcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIGhlcmUgYXQgdGhlIHRvcC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncyByZWxhdGVkIHRvIFhGUk0g4oCTIHRoZSBjb3JlIG9mIHRoZSBJUHNlYyBhbmQgc2VjdXJpdHkgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbWFpbiBgWEZSTWAgZmVhdHVyZSBlbmFibGUvZGlzYWJsZSBvcHRpb24sIGxpa2VseSBmb2xsb3dlZCBieSBvdGhlciBjb3JlIHBhcmFtZXRlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIG1vZHVsYXJpdHkgb2YgdGhlIFhGUk0gc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgZmVhdHVyZXMgYXJlIGRpcmVjdGx5IGNvbmZpZ3VyYWJsZSBhdCB0aGlzIGxldmVsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSBpcy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgbmV3IGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIGNvcmUgb3B0aW9ucywgYW55dGhpbmcgdGhhdCBtaWdodCBzaWduaWZ5IGEgbmV3IGFwcHJvYWNoIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gaW4gdGhpcyBhcmVhLiBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjaywgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6NTcuNzUwODQwMjk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFhGUk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIFhGUk1cXG4gICA2OlxcdFxcdGJvb2xcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBYRlJNX09GRkxPQURcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFhGUk1fQUxHT1xcbiAgMTU6XFx0XFx0dHJpc3RhdGVcXG4gIDE2OlxcdFxcdHNlbGVjdCBYRlJNXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFQURcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxcbiAgMjE6XFx0XFxuICAyMjpcXHRpZiBJTkVUXFxuICAyMzpcXHRjb25maWcgWEZSTV9VU0VSXFxuICAyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4gIDI1OlxcdFxcdHNlbGVjdCBYRlJNX0FMR09cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcbiAgMjg6XFx0XFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU1OjU3Ljc1MDk1MTUwNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE0NzY3NDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBFU1AtaW4tVENQIFZ1bG5lcmFiaWxpdHkgXHUwMDI2IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gb25lcyBhcmUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLCBhbG9uZyB3aXRoIGBYRlJNX0VTUElOVENQYCwgdGhlbiBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBYRlJNYCBhcmUgYWxzbyByZWxldmFudC4gSSd2ZSBnb3QgdGhlbSBsaXN0ZWQ6IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYFhGUk1fRVNQSU5UQ1BgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBYRlJNYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IFhGUk0gRVNQIGVuY2Fwc3VsYXRlZCBpbiBUQ1AsIGFkaGVyaW5nIHRvIFJGQyA4MjI5LiBUaGUgcGF0Y2ggaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgIGlzIGltcG9ydGFudCwgaXQgZm9jdXNlcyBvbiBob3cgdGhlIHN5c3RlbSB2YWxpZGF0ZXMgcGFja2V0IHN0cnVjdHVyZSB3aXRoaW4gYGhhbmRsZV9lc3BgIGJ5IHVzaW5nIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgIHdoZW4gcGFyc2luZyBFU1Agd2l0aGluIFRDUCBwYWNrZXRzLiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW52YWxpZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMsIHdoaWNoIHRoZSBwYXRjaCBhZGRyZXNzZXMuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zOyBJIGNhbiBzZXQgdGhlIFRDUCBVTFAgdG8gYGVzcGludGNwYCBhbmQgcmVjZWl2ZSBwYWNrZXRzLCBzbyB0aGlzIGlzIHZhbGlkIGZvciBib3RoIHZpcnR1YWxpemVkIGFuZCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSBzZWUgYGhhbmRsZV9lc3BgLCBgZXNwaW50Y3BfcmN2YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYW5kIGBlc3BpbnRjcF9yZWN2bXNnYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvZiB0aGUga2V5IGZ1bmN0aW9ucyBjb3VsZCBiZSBpbmxpbmVkLiBgaGFuZGxlX2VzcGAgaXMgc3RhdGljLCBgZXNwaW50Y3BfcmN2YCBpcyBhbHNvIHN0YXRpYyAoYXNzaWduZWQgYXMgY2FsbGJhY2sgdG8gYHN0cnBfY2FsbGJhY2tzYCksIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQsIGBlc3BpbnRjcF9wdXNoX3NrYmAgaXMgbm9uLXN0YXRpYyBleHBvcnRlZCwgYGVzcGludGNwX3NlbmRtc2dgIGlzIHN0YXRpYyAoYXNzaWduZWQgaW4gcHJvdG8pLCBgZXNwaW50Y3BfcmVjdm1zZ2AgaXMgc3RhdGljIChhc3NpZ25lZCBpbiBwcm90byksIGFuZCBgdGNwX2lzX3VscF9lc3BgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQuIE5vdyBJIGhhdmUgbXkgYEZvY3VzU3ltYm9sc2A6IGBbXCJoYW5kbGVfZXNwXCIsIFwiZXNwaW50Y3BfcmN2XCIsIFwiZXNwaW50Y3BfcXVldWVfb3V0XCIsIFwiZXNwaW50Y3BfcHVzaF9za2JcIiwgXCJlc3BpbnRjcF9zZW5kbXNnXCIsIFwiZXNwaW50Y3BfcmVjdm1zZ1wiXWAuXG5cbk9rYXksIEkgbmVlZCB0byBzdHJ1Y3R1cmUgbXkgYHNldC1yZXN1bHRzYCBjYWxsOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWVcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBpbmNvbWluZyBFU1AtaW4tVENQIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGhpbiBgaGFuZGxlX2VzcGAgYnkgaW5jb3Jwb3JhdGluZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIFRoaXMgZW5zdXJlcyBzYWZlciBwcm9jZXNzaW5nIG9mIGludmFsaWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzLiBUaGlzIGRpcmVjdCBpbXBhY3Qgb24gbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IG9uIFRDUCBzb2NrZXRzIHdpdGggdGhlIEVTUElOVENQIFVMUCBlbmFibGVkLCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJJTkVUX0VTUElOVENQXCIsIFwiSU5FVDZfRVNQSU5UQ1BcIiwgXCJYRlJNX0VTUElOVENQXCIsIFwiSU5FVF9FU1BcIiwgXCJJTkVUNl9FU1BcIiwgXCJYRlJNXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiaGFuZGxlX2VzcFwiLCBcImVzcGludGNwX3JjdlwiLCBcImVzcGludGNwX3F1ZXVlX291dFwiLCBcImVzcGludGNwX3B1c2hfc2tiXCIsIFwiZXNwaW50Y3Bfc2VuZG1zZ1wiLCBcImVzcGludGNwX3JlY3Ztc2dcIl1gXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwOCwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoxNC44OTg2Mjk3MzRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMTI5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX0VTUElOVENQXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJYRlJNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJlc3BpbnRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX0VTUElOVENQXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJYRlJNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJlc3BpbnRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoxNS4wNTk2NDkxMjJaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI5ODE4OTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU2OjE1LjA2MDEzMTYyMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NzI5NzcwMzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKClgIHdpdGggYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgaW4gYGhhbmRsZV9lc3AoKWAgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gVGhpcyBjaGFuZ2UgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGN1bGF0ZWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgKGBza2ItXFx1MDAzZWRhdGEgLSBza2ItXFx1MDAzZWhlYWRgKSBmaXRzIHNhZmVseSBpbnRvIHRoZSBgdHJhbnNwb3J0X2hlYWRlcmAgZmllbGQgd2l0aG91dCB0cnVuY2F0aW9uIG9yIG92ZXJmbG93OyBpZiBpbnZhbGlkLCBpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudGVyLlxcblxcblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgKzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXHUwMDNlY2I7XG4gXG4tXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbitcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoxNS4wNjAxMzI2NDJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTcwNTkwNjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUGluVENQIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoLCBzbyBteSBmaXJzdCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvZGUgaXQncyB0b3VjaGluZy4gQWgsIGBuZXQveGZybS9lc3BpbnRjcC5jYCDigJMgdGhhdOKAmXMgdGhlIHRhcmdldC4gTm93LCBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzLiBUaW1lIHRvIGVtcGxveSBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdCB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMCwgdG8gc2VlIHRoZSBkaXJlY3QgaW1wYWN0IG9mIHRoZSBwYXRjaC4gS25vd2luZyBwcmVjaXNlbHkgd2hhdCdzIGJlZW4gYWx0ZXJlZCBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIGFuZCBhY2N1cmF0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoyNC43NjYwNDE5NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zdHJwYXJzZXIuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9lc3AuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za21zZy5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2hvdGRhdGEuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAxMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzaylcXG4gIDE0OlxcdHtcXG4gIDE1OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2U9IHNrLVxcdTAwM2Vza19yY3ZidWYgfHxcXG4gIDE2OlxcdFxcdCAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCBza2ItXFx1MDAzZXRydWVzaXplKSkge1xcbiAgMTc6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMTg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAxOTpcXHRcXHRcXHRyZXR1cm47XFxuICAyMDpcXHRcXHR9XFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuICAyNTpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Y3R4LVxcdTAwM2Vpa2VfcXVldWUsIHNrYik7XFxuICAyNjpcXHRcXHRjdHgtXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4gIDMwOlxcdHtcXG4gIDMxOlxcdFxcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXFx1MDAzZWNiO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbiAgMzQ6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMzU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAzNjpcXHRcXHRcXHRyZXR1cm47XFxuICAzNzpcXHRcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXFx1MDAzZW5ob2ZmICovXFxuICA0MDpcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlY2IsIFxcdTAwMjZ0Y3BfY2ItXFx1MDAzZWhlYWRlciwgc2l6ZW9mKHRjcF9jYi1cXHUwMDNlaGVhZGVyKSk7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gIDQzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXFx1MDAzZXNrYl9paWYpO1xcbiAgNDQ6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWRldikge1xcbiAgNDU6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgNDY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA0NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDQ4OlxcdFxcdH1cXG4gIDQ5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDUwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiAgNTE6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA1MjpcXHRcXHRcXHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcXG4gIDUzOlxcdFxcdGVsc2VcXG4gIDU0OlxcdCNlbmRpZlxcbiAgNTU6XFx0XFx0XFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XFxuICA1NjpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDU3OlxcdG91dDpcXG4gIDU4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgNTk6XFx0fVxcbiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3QgZXNwaW50Y3BfY3R4LFxcbiAgNjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RycCk7XFxuICA2NTpcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XFxuICA2NjpcXHRcXHRpbnQgbGVuID0gcnhtLVxcdTAwM2VmdWxsX2xlbiAtIDI7XFxuICA2NzpcXHRcXHR1MzIgbm9uZXNwX21hcmtlcjtcXG4gIDY4OlxcdFxcdGludCBlcnI7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXFxuICA3MTpcXHRcXHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XFxuICA3MjpcXHRcXHRcXHR1OCBkYXRhO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHRlcnIgPSBza2JfY29weV9iaXRzKHNrYiwgcnhtLVxcdTAwM2VvZmZzZXQgKyAyLCBcXHUwMDI2ZGF0YSwgMSk7XFxuICA3NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgNzY6XFx0XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IpO1xcbiAgNzc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuICA3OTpcXHRcXHRcXHR9XFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTY6MjQuNzY2MTM2NzkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4Nzc0Mjg1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEdpdmVuIG15IGxldmVsIG9mIGV4cGVydGlzZSwganVzdCByZWFkaW5nIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGxpa2VseSB3b24ndCBiZSBlbm91Z2guIEkgbmVlZCBhIG1vcmUgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nLCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3MgYmVpbmcgdXNlZCBhbmQgKmhvdyogaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFRoZXJlZm9yZSwgbGV0J3Mgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBjb2RlIHNlYXJjaC4gSSdsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBzZWFyY2ggZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbGlzdCBvZiBjYWxsc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU2OjMzLjY0MzU2ODUyMloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5MTY2Mjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MzA5Nj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzEwNC0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMDU6ICogc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdHJhbnNwb3J0IGhlYWRlclxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzEwNi0gKiBAc2tiOiBidWZmZXIgdG8gYWx0ZXJcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzExMj1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozMTEzOnNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMTQte1xcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz05MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTMxLVxcdGlmIChsaWtlbHkob3BzIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSkge1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MTMyOlxcdFxcdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTMzLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yOT1zdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzItXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMzpcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzQtXFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjozNy40MzUyNDI2MzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAxODI4NjUwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gc2tidWZmLmggLSBMaW5lIDMxMDQqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBhbmQgemVybyBpbiBhcm91bmQgbGluZSAzMTA0LiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhhdCBhcmVhIGJlY2F1c2XigKYgKltwYXVzZXMsIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IHdpdGhvdXQgZXhwbGljaXRseSBzdGF0aW5nIGl0LCBhc3N1bWluZyB0aGUgZXhwZXJ0IHdvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpZWQgcmVhc29uaW5nIGJhc2VkIG9uIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlcl0qIOKApkkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCB0aGVyZSB0b+KApiAqW0FnYWluLCBhc3N1bWluZyB0aGUgZXhwZXJ0J3Mga25vd2xlZGdlIHdpbGwgYWxsb3cgdGhlbSB0byBmaWxsIGluIHRoZSBibGFuayBiYXNlZCBvbiB0aGVpciBiYWNrZ3JvdW5kXSog4oCmcGVyaGFwcyByZWxhdGVkIHRvIHRoZSBwb3RlbnRpYWwgaXNzdWUgSSdtIHRyYWNraW5nIGRvd24uIExpbmUgMzEwNCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIGFuZCBmcm9tIG1lbW9yeSwgaXQncyBwcm9iYWJseSBoYW5kbGluZ+KApiAqW2JyaWVmIHBhdXNlXSog4oCmc29tZXRoaW5nIGFyb3VuZOKApiAqW3BhdXNlcywgY29uc2lkZXJpbmcgZXhhY3QgZGV0YWlscywgcGVyaGFwcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWNrZXQgaGVhZGVycywgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtYWNyb10q4oCmIFllcywgdGhhdCdzIHJpZ2h0LiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBhY3R1YWwgY29kZSBzYXlzIHRvIGNvbmZpcm0gbXkgbGluZSBvZiB0aG91Z2h0LiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IHdvcmtpbmcgaHlwb3RoZXNpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDMzOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU3OjA3LjYxODEwOTU5N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMDk1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDk1OlxcdFxcbjMwOTY6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXFxuMzA5NzpcXHR7XFxuMzA5ODpcXHRcXHRsb25nIG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZDtcXG4zMDk5OlxcdFxcbjMxMDA6XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShvZmZzZXQgIT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKW9mZnNldCk7XFxuMzEwMTpcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBvZmZzZXQ7XFxuMzEwMjpcXHR9XFxuMzEwMzpcXHRcXG4zMTA0OlxcdC8qKlxcbjMxMDU6XFx0ICogc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdHJhbnNwb3J0IGhlYWRlclxcbjMxMDY6XFx0ICogQHNrYjogYnVmZmVyIHRvIGFsdGVyXFxuMzEwNzpcXHQgKlxcbjMxMDg6XFx0ICogSGFyZGVuZWQgdmVyc2lvbiBvZiBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcigpLlxcbjMxMDk6XFx0ICpcXG4zMTEwOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxcbjMxMTE6XFx0ICovXFxuMzExMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXFxuMzExMzpcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXFxuMzExNDpcXHR7XFxuMzExNTpcXHRcXHRsb25nIG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZDtcXG4zMTE2OlxcdFxcbjMxMTc6XFx0XFx0aWYgKHVubGlrZWx5KG9mZnNldCAhPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpb2Zmc2V0KSlcXG4zMTE4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4zMTE5OlxcdFxcbjMxMjA6XFx0XFx0aWYgKHVubGlrZWx5KG9mZnNldCA9PSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVKSlcXG4zMTIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4zMTIyOlxcdFxcbjMxMjM6XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gb2Zmc2V0O1xcbjMxMjQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuMzEyNTpcXHR9XFxuMzEyNjpcXHRcXG4zMTI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4zMTI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxcbjMxMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NzowNy42MTgzMDM1NjhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0NzM5NTEwMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVNQL1RDUCBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5ldC94ZnJtL2VzcGludGNwLmNgIHBhdGNoIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBgaGFuZGxlX2VzcCgpYCBmdW5jdGlvbiB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byB0cmFuc3BvcnQgaGVhZGVyIG92ZXJmbG93cyBkdWUgdG8gYSBjYWxsIHRvIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdHJ1bmNhdGVkIG9mZnNldCBpZiB0aGUgYG9mZnNldGAgZXhjZWVkZWQgdGhlIHNpemUgb2YgYHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyYC4gVGhlIGZpeCByZXBsYWNlcyBpdCB3aXRoIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYW5kIHRoZSBzdWJzZXF1ZW50IGFjdGlvbjogaWYgdGhlIG9mZnNldCBpcyB0b28gbGFyZ2UgKG9yIGB+MFVgKSwgdGhlIGBza2JgIGlzIGRyb3BwZWQsIGFuZCBhbiBlcnJvciBzdGF0aXN0aWMgaXMgaW5jcmVtZW50ZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYWx3YXlzIGhhdmUgdG8gYmUgdmVyeSByaWdvcm91cyB3aGVuIGNvbnNpZGVyaW5nIGEgY2hhbmdlIGxpa2UgdGhpcy4gTGV0J3Mgc2VlLi4uXG5cbjEuICAqKktlcm5lbCB0byBVc2VyIFNwYWNlIERhdGEgTGVha3M6KiogTm8uIFRoZSBjb2RlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHNlbmRpbmcgYW55IGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgdG8gdXNlcnNwYWNlLCBzbyBpbmZvcm1hdGlvbiBsZWFrcyBhcmVuJ3QgYSBjb25jZXJuLiBUaGVyZSBpcyBubyBgY29weV90b191c2VyYCBvciBhbnkgc2ltaWxhciBvcGVyYXRpb25zIGhlcmUuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlcy9GaWVsZHM6KiogTm9wZS4gSSBzZWUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGZpZWxkcyB3aXRoaW4gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4zLiAgKipDb21wbGV4IEFsbG9jYXRpb25zOioqIE5vdCBoZXJlLiBUaGUgZml4IGRvZXNuJ3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIG1hbmlwdWxhdGlvbiB0aGF0IG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkuXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBDcnVjaWFsbHksIHRoaXMgaXMgYSAqYm91bmRzIGNoZWNrKiBpbiB0aGUgdHJ1ZXN0IHNlbnNlLiBUaGUgY2hlY2sgaXMgc3BlY2lmaWNhbGx5IGhhcmRlbmluZyBhZ2FpbnN0ICpvdmVyZmxvdyogYW5kICp0cnVuY2F0aW9uKiBvZiBgc2tiYCBvZmZzZXRzLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0J3MgcHJldmVudGluZyB1cyBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIHRoZSBvZmZzZXQgaXMgaW52YWxpZCwgdGhlIHBhY2tldCBpcyBzaW1wbHkgZnJlZWQuIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgY2hlY2sgaXMgcHJldmVudGluZyBvciBjYXRjaGluZyBmYWxscyB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBvciBERUJVR19ORVQgKGlmIGVuYWJsZWQpLlxuXG5JbiBzaG9ydCwgdGhpcyBpcyBhICpoYXJkZW5pbmcqIGZpeCDigJMgc3BlY2lmaWNhbGx5IGZvciBwb3RlbnRpYWwgYHNrYmAgdHJhbnNwb3J0IGhlYWRlciBvdmVyZmxvdy9ib3VuZHMgaXNzdWVzLiBJdCBkb2Vzbid0IGludHJvZHVjZSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrczsgaW5zdGVhZCwgaXQgcHJvYWN0aXZlbHkgKnByZXZlbnRzKiB0aGVtIGJ5IGRyb3BwaW5nIHRoZSBvZmZlbmRpbmcgcGFja2V0LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgcmVhZHMgb2YgdW5pdGl0aWFsaXplZCBtZW1vcnksIGFuZCBzaW5jZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSB0aGF0LCBpdCBpc24ndCByZWxldmFudC4gVGhpcyBpcyBhbiBvdmVyZmxvdy90cnVuY2F0aW9uIGhhcmRlbmluZyBjaGVjay4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGJ1Z2d5LCBhbmQgdGhpcyBjaGVja3MsIHByZXZlbnRpbmcgdGhlIGJ1Zy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBUaGlzIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ2LCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU5OjAyLjM1NzgxNjU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKWAgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCBpbiBgaGFuZGxlX2VzcCgpYCB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBUaGlzIGNoYW5nZSBjaGVja3Mgd2hldGhlciB0aGUgY2FsY3VsYXRlZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCAoYHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXFxuXFxuVGhpcyBpcyBhIGJvdW5kcy9vdmVyZmxvdyB2YWxpZGF0aW9uIGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgY29ycnVwdGVkIHNrYiBoZWFkZXIgb2Zmc2V0cyAod2hpY2ggbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGFzc2VydGlvbiBmYWlsdXJlcyBjYXVnaHQgYnkgS0FTQU4vREVCVUdfTkVUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKClgIHdpdGggYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgaW4gYGhhbmRsZV9lc3AoKWAgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gVGhpcyBjaGFuZ2UgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGN1bGF0ZWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgKGBza2ItXFx1MDAzZWRhdGEgLSBza2ItXFx1MDAzZWhlYWRgKSBmaXRzIHNhZmVseSBpbnRvIHRoZSBgdHJhbnNwb3J0X2hlYWRlcmAgZmllbGQgd2l0aG91dCB0cnVuY2F0aW9uIG9yIG92ZXJmbG93OyBpZiBpbnZhbGlkLCBpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudGVyLlxcblxcblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 15:53:16 +0000 UTC FinishedAt: 2026-08-29 16:59:03 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_ESPINTCP", "INET_ESP", "INET6_ESP", "XFRM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_ESPINTCP", "INET_ESP", "INET6_ESP", "XFRM" ], "series_id": "e865d64e-bf97-4444-bb00-9df41f311cb8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "handle_esp", "espintcp_rcv", "espintcp_queue_out", "espintcp_push_skb", "espintcp_sendmsg", "espintcp_recvmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKClgIHdpdGggYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgaW4gYGhhbmRsZV9lc3AoKWAgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gVGhpcyBjaGFuZ2UgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGN1bGF0ZWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgKGBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkYCkgZml0cyBzYWZlbHkgaW50byB0aGUgYHRyYW5zcG9ydF9oZWFkZXJgIGZpZWxkIHdpdGhvdXQgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdzsgaWYgaW52YWxpZCwgaXQgZHJvcHMgdGhlIHBhY2tldCBhbmQgaW5jcmVtZW50cyB0aGUgZXJyb3IgY291bnRlci5cblxuVGhpcyBpcyBhIGJvdW5kcy9vdmVyZmxvdyB2YWxpZGF0aW9uIGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgY29ycnVwdGVkIHNrYiBoZWFkZXIgb2Zmc2V0cyAod2hpY2ggbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGFzc2VydGlvbiBmYWlsdXJlcyBjYXVnaHQgYnkgS0FTQU4vREVCVUdfTkVUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluY29taW5nIEVTUCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBuZXQveGZybS9lc3BpbnRjcC5jIGJ5IHVzaW5nIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIGJlZm9yZSByZXNldHRpbmcgdGhlbSBpbiBoYW5kbGVfZXNwKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIFJGQyA4MjI5IEVTUC1pbi1UQ1AgZW5jYXBzdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0zMCw3ICYjNDM7MzAsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IHRjcF9za2JfY2IgKnRjcF9jYiA9IChzdHJ1Y3QgdGNwX3NrYl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbi1cdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4mIzQzO1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbiYjNDM7XHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXHUwMDNlbmhvZmYgKi9cbiBcdG1lbW1vdmUoc2tiLVx1MDAzZWNiLCBcdTAwMjZ0Y3BfY2ItXHUwMDNlaGVhZGVyLCBzaXplb2YodGNwX2NiLVx1MDAzZWhlYWRlcikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE5bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluY29taW5nIEVTUCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBuZXQveGZybS9lc3BpbnRjcC5jIGJ5IHVzaW5nIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIGJlZm9yZSByZXNldHRpbmcgdGhlbSBpbiBoYW5kbGVfZXNwKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIFJGQyA4MjI5IEVTUC1pbi1UQ1AgZW5jYXBzdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jCmluZGV4IDY3NGFlZGM1YWY1YTIuLjNlNzJiOWYwNjdiOWIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL2VzcGludGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuYwpAQCAtMzAsNyAmIzQzOzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItJmd0O2NiOwogCi0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKJiM0MzsJaWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHsKJiM0MzsJCVhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKIAkvKiByZXN0b3JlIElQIENCLCB3ZSBuZWVkIGF0IGxlYXN0IElQNkNCLSZndDtuaG9mZiAqLwogCW1lbW1vdmUoc2tiLSZndDtjYiwgJmFtcDt0Y3BfY2ItJmd0O2hlYWRlciwgc2l6ZW9mKHRjcF9jYi0mZ3Q7aGVhZGVyKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgRVNQLWluLVRDUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gUmlnaHQsIEVTUCBlbmNhcHN1bGF0ZWQgd2l0aGluIFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5LiBGaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBuZXQveGZybS9lc3BpbnRjcC5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHksIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgWEZSTSBmcmFtZXdvcmsuCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMsIGluIHRlcm1zIG9mIHJlc291cmNlIHVzYWdlLCBzZWN1cml0eSwgYW5kIHBlcmZvcm1hbmNlPwoKSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSB0cmF2ZXJzZSB0aGUgY29kZSBhbmQgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGF0IHdpbGwgaGVscCBtZSBxdWlja2x5IGZpbmQgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBldmFsdWF0ZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBwcm9wZXJseS4gSSBuZWVkIGEgc29saWQgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29kZSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9zdHJwYXJzZXIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwaW50Y3AuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrbXNnLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaG90ZGF0YS5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDEzOlx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2spXG4gIDE0Olx0e1xuICAxNTpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpIFx1MDAzZT0gc2stXHUwMDNlc2tfcmN2YnVmIHx8XG4gIDE2Olx0XHQgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuICAxNzpcdFx0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XG4gIDE4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAxOTpcdFx0XHRyZXR1cm47XG4gIDIwOlx0XHR9XG4gIDIxOlx0XG4gIDIyOlx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4gIDIzOlx0XG4gIDI0Olx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gIDI1Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlaWtlX3F1ZXVlLCBza2IpO1xuICAyNjpcdFx0Y3R4LVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xuICAyNzpcdH1cbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiAgMzA6XHR7XG4gIDMxOlx0XHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuICAzMjpcdFxuICAzMzpcdFx0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbiAgMzQ6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICAzNTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgMzY6XHRcdFx0cmV0dXJuO1xuICAzNzpcdFx0fVxuICAzODpcdFxuICAzOTpcdFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuICA0MDpcdFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4gIDQxOlx0XG4gIDQyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDQzOlx0XHRza2ItXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXHUwMDNlc2tiX2lpZik7XG4gIDQ0Olx0XHRpZiAoIXNrYi1cdTAwM2VkZXYpIHtcbiAgNDU6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICA0NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNDc6XHRcdFx0Z290byBvdXQ7XG4gIDQ4Olx0XHR9XG4gIDQ5Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDUwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gIDUxOlx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuICA1MjpcdFx0XHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcbiAgNTM6XHRcdGVsc2VcbiAgNTQ6XHQjZW5kaWZcbiAgNTU6XHRcdFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XG4gIDU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNTc6XHRvdXQ6XG4gIDU4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNTk6XHR9XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG4gIDY0Olx0XHRcdFx0XHRcdFx0c3RycCk7XG4gIDY1Olx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XG4gIDY2Olx0XHRpbnQgbGVuID0gcnhtLVx1MDAzZWZ1bGxfbGVuIC0gMjtcbiAgNjc6XHRcdHUzMiBub25lc3BfbWFya2VyO1xuICA2ODpcdFx0aW50IGVycjtcbiAgNjk6XHRcbiAgNzA6XHRcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XG4gIDcyOlx0XHRcdHU4IGRhdGE7XG4gIDczOlx0XG4gIDc0Olx0XHRcdGVyciA9IHNrYl9jb3B5X2JpdHMoc2tiLCByeG0tXHUwMDNlb2Zmc2V0ICYjNDM7IDIsIFx1MDAyNmRhdGEsIDEpO1xuICA3NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDc2Olx0XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDc3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDc4Olx0XHRcdFx0cmV0dXJuO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgbW9kdWxlIGludmVzdGlnYXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBlc3BpbnRjcC5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIE15IGluaXRpYWwgbW92ZSB3b3VsZCBiZSB0byBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMg4oCTIHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3hmcm1gIGRpcmVjdG9yeS4gSSYjMzk7ZCBzdGFydCBieSBncmVwcGluZywgb2J2aW91c2x5LiBJJiMzOTtsbCBzZWFyY2ggdGhvc2UgZmlsZXMgZm9yICYjMzQ7ZXNwaW50Y3AmIzM0Oy4gVGhhdCYjMzk7bGwgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBmaW5kIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIGJ1aWxkIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYW5kIGhvdyBgZXNwaW50Y3AuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY2xlYXIgY2x1ZXMgcHJldHR5IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01LSNpbmNsdWRlIFx1MDAzY25ldC9lc3AuaFx1MDAzZVxubmV0L3hmcm0vZXNwaW50Y3AuYzo2OiNpbmNsdWRlIFx1MDAzY25ldC9lc3BpbnRjcC5oXHUwMDNlXG5uZXQveGZybS9lc3BpbnRjcC5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvc2ttc2cuaFx1MDAzZVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTEtXG5uZXQveGZybS9lc3BpbnRjcC5jOjEyOnN0YXRpYyB2b2lkIGhhbmRsZV9ub25lc3Aoc3RydWN0IGVzcGludGNwX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMy1cdFx0XHQgIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTI5PXN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNjAtXG5uZXQveGZybS9lc3BpbnRjcC5jOjYxOnN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYy02Mi17XG5uZXQveGZybS9lc3BpbnRjcC5jOjYzOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG5uZXQveGZybS9lc3BpbnRjcC5jLTY0LVx0XHRcdFx0XHRcdHN0cnApO1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTIwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjE6c3RhdGljIGludCBlc3BpbnRjcF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMjIte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTQxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxNDI6c3RhdGljIGludCBlc3BpbnRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDMtXHRcdFx0ICAgIGludCBmbGFncylcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQ0LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6MTQ1Olx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQ2LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTE3NS1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTc2OmludCBlc3BpbnRjcF9xdWV1ZV9vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzcte1xubmV0L3hmcm0vZXNwaW50Y3AuYzoxNzg6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzktXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xODktfVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTA6RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcXVldWVfb3V0KTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMTkxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTI6LyogZXNwaW50Y3AgbGVuZ3RoIGZpZWxkIGlzIDJCIGFuZCBsZW5ndGggaW5jbHVkZXMgdGhlIGxlbmd0aCBmaWVsZCYjMzk7cyBzaXplICovXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5My0jZGVmaW5lIE1BWF9FU1BJTlRDUF9NU0cgKCgoMSBcdTAwM2NcdTAwM2MgMTYpIC0gMSkgLSAyKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjE5NTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZyxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTk2LVx0XHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjE1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMTY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcbm5ldC94ZnJtL2VzcGludGNwLmM6MjE3Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnLCBpbnQgZmxhZ3MpXG5uZXQveGZybS9lc3BpbnRjcC5jLTIxOC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDctXG5uZXQveGZybS9lc3BpbnRjcC5jOjI0ODpzdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC94ZnJtL2VzcGludGNwLmMtMjQ5LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6MjUwOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6MjUxOlx0c3RydWN0IGVzcGludGNwX21zZyAqZW1zZyA9IFx1MDAyNmN0eC1cdTAwM2VwYXJ0aWFsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yNTItXHRpbnQgZXJyO1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjYxLVx0aWYgKGVtc2ctXHUwMDNlc2tiKVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNjI6XHRcdGVyciA9IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTI2My1cdGVsc2Vcbm5ldC94ZnJtL2VzcGludGNwLmM6MjY0Olx0XHRlcnIgPSBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTI2NS1cdGlmIChlcnIgPT0gLUVBR0FJTikge1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjc2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNzc6aW50IGVzcGludGNwX3B1c2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL2VzcGludGNwLmMtMjc4LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6Mjc5Olx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6MjgwOlx0c3RydWN0IGVzcGludGNwX21zZyAqZW1zZyA9IFx1MDAyNmN0eC1cdTAwM2VwYXJ0aWFsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yODEtXHR1bnNpZ25lZCBpbnQgbGVuO1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjkxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyOTI6XHRlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIDApO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0yOTMtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjMwNTpcdGVzcGludGNwX3B1c2hfbXNncyhzaywgMCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTMwNi1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwOC19XG5uZXQveGZybS9lc3BpbnRjcC5jOjMwOTpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9wdXNoX3NrYik7XG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMC1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzExOnN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMi17XG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMy1cdGxvbmcgdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzozMTQ6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYzozMTU6XHRzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnID0gXHUwMDI2Y3R4LVx1MDAzZXBhcnRpYWw7XG5uZXQveGZybS9lc3BpbnRjcC5jLTMxNi1cdHN0cnVjdCBpb3ZfaXRlciBwZnhfaXRlcjtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTMzMi1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzMzOlx0ZXJyID0gZXNwaW50Y3BfcHVzaF9tc2dzKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zMzQtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zNzYtXG5uZXQveGZybS9lc3BpbnRjcC5jOjM3NzpcdGVyciA9IGVzcGludGNwX3B1c2hfbXNncyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzc4LVx0LyogdGhpcyBtZXNzYWdlIGNvdWxkIGJlIHBhcnRpYWxseSBzZW50LCBrZWVwIGl0ICovXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTEtXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5MjpzdGF0aWMgc3RydWN0IHByb3RvIGVzcGludGNwX3Byb3QgX19yb19hZnRlcl9pbml0O1xubmV0L3hmcm0vZXNwaW50Y3AuYzozOTM6c3RhdGljIHN0cnVjdCBwcm90b19vcHMgZXNwaW50Y3Bfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcbm5ldC94ZnJtL2VzcGludGNwLmM6Mzk0OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gZXNwaW50Y3A2X3Byb3Q7XG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NTpzdGF0aWMgc3RydWN0IHByb3RvX29wcyBlc3BpbnRjcDZfb3BzO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTYtc3RhdGljIERFRklORV9NVVRFWCh0Y3B2Nl9wcm90X211dGV4KTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk3LVxubmV0L3hmcm0vZXNwaW50Y3AuYzozOTg6c3RhdGljIHZvaWQgZXNwaW50Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTM5OS17XG5uZXQveGZybS9lc3BpbnRjcC5jOjQwMDpcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTQwMS1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQwNi1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MDgte1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0MDk6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yayxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDEwOlx0XHRcdFx0XHRcdHN0cnVjdCBlc3BpbnRjcF9jdHgsIHdvcmspO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00MTEtXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXHUwMDNlc3RycC5zaztcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxNC1cdGlmICghY3R4LVx1MDAzZXR4X3J1bm5pbmcpXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxNTpcdFx0ZXNwaW50Y3BfcHVzaF9tc2dzKHNrLCAwKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDE2LVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxOC1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDE5OnN0YXRpYyB2b2lkIGVzcGludGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNDIwLXtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDIxOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDIyLVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDI2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mjc6c3RhdGljIHZvaWQgZXNwaW50Y3BfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mjk6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00MzAtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYz00MzU9Ym9vbCB0Y3BfaXNfdWxwX2VzcChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzNi17XG5uZXQveGZybS9lc3BpbnRjcC5jOjQzNzpcdHJldHVybiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNmVzcGludGNwX3Byb3QgfHwgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZlc3BpbnRjcDZfcHJvdDtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDM4LX1cbm5ldC94ZnJtL2VzcGludGNwLmM9NDM5PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9pc191bHBfZXNwKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDE6c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQyOlx0XHRcdCBzdHJ1Y3QgcHJvdG9fb3BzICplc3BpbnRjcF9vcHMsXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0My1cdFx0XHQgY29uc3Qgc3RydWN0IHByb3RvICpvcmlnX3Byb3QsXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cdFx0XHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6c3RhdGljIGludCBlc3BpbnRjcF9pbml0X3NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ2LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0OC1cdHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQ5Olx0XHQucmN2X21zZyA9IGVzcGludGNwX3Jjdixcbm5ldC94ZnJtL2VzcGludGNwLmM6NDUwOlx0XHQucGFyc2VfbXNnID0gZXNwaW50Y3BfcGFyc2UsXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ1MS1cdH07XG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1MjpcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eDtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDUzLVx0aW50IGVycjtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDU0LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NTU6XHQvKiBzb2NrbWFwIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZXNwaW50Y3AgKi9cbm5ldC94ZnJtL2VzcGludGNwLmMtNDU2LVx0aWYgKHNrLVx1MDAzZXNrX3VzZXJfZGF0YSlcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3My1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVCkge1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NzQ6XHRcdHNrLVx1MDAzZXNrX3Byb3QgPSBcdTAwMjZlc3BpbnRjcF9wcm90O1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NzU6XHRcdHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VvcHMgPSBcdTAwMjZlc3BpbnRjcF9vcHM7XG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3Ni1cdH0gZWxzZSB7XG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3Ny1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ0Y3B2Nl9wcm90X211dGV4KTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDc4Olx0XHRpZiAoIWVzcGludGNwNl9wcm90LnJlY3Ztc2cpXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ3OTpcdFx0XHRidWlsZF9wcm90b3MoXHUwMDI2ZXNwaW50Y3A2X3Byb3QsIFx1MDAyNmVzcGludGNwNl9vcHMsIHNrLVx1MDAzZXNrX3Byb3QsIHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VvcHMpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00ODAtXHRcdG11dGV4X3VubG9jayhcdTAwMjZ0Y3B2Nl9wcm90X211dGV4KTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNDgxLVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODI6XHRcdHNrLVx1MDAzZXNrX3Byb3QgPSBcdTAwMjZlc3BpbnRjcDZfcHJvdDtcbm5ldC94ZnJtL2VzcGludGNwLmM6NDgzOlx0XHRzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzID0gXHUwMDI2ZXNwaW50Y3A2X29wcztcbm5ldC94ZnJtL2VzcGludGNwLmMtNDg0LVx0fVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDg3LVx0Y3R4LVx1MDAzZXNhdmVkX2Rlc3RydWN0ID0gc2stXHUwMDNlc2tfZGVzdHJ1Y3Q7XG5uZXQveGZybS9lc3BpbnRjcC5jOjQ4ODpcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkgPSBlc3BpbnRjcF9kYXRhX3JlYWR5O1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODk6XHRzay1cdTAwM2Vza193cml0ZV9zcGFjZSA9IGVzcGludGNwX3dyaXRlX3NwYWNlO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTA6XHRzay1cdTAwM2Vza19kZXN0cnVjdCA9IGVzcGludGNwX2Rlc3RydWN0O1xubmV0L3hmcm0vZXNwaW50Y3AuYy00OTEtXHRyY3VfYXNzaWduX3BvaW50ZXIoaWNzay1cdTAwM2VpY3NrX3VscF9kYXRhLCBjdHgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTI6XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXdvcmssIGVzcGludGNwX3R4X3dvcmspO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00OTMtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjUwNTpzdGF0aWMgdm9pZCBlc3BpbnRjcF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNTA2LXtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTA3Olx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTA4LVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNC1cdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MTU6XHRcdGVzcGludGNwX3B1c2hfc2tiKHNrLCBza2IpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01MTYtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MTktXG5uZXQveGZybS9lc3BpbnRjcC5jOjUyMDpzdGF0aWMgdm9pZCBlc3BpbnRjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC94ZnJtL2VzcGludGNwLmMtNTIxLXtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIyOlx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIzOlx0c3RydWN0IGVzcGludGNwX21zZyAqZW1zZyA9IFx1MDAyNmN0eC1cdTAwM2VwYXJ0aWFsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01MjQtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU0NzpzdGF0aWMgX19wb2xsX3QgZXNwaW50Y3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTQ4LVx0XHRcdCAgICAgIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTAtXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NTE6XHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NTItXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU1NjpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NTc6XHRcdFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTU4LVx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJvdG8gKm9yaWdfcHJvdCxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTU2MC17XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MTpcdG1lbWNweShlc3BpbnRjcF9wcm90LCBvcmlnX3Byb3QsIHNpemVvZihzdHJ1Y3QgcHJvdG8pKTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYyOlx0bWVtY3B5KGVzcGludGNwX29wcywgb3JpZ19vcHMsIHNpemVvZihzdHJ1Y3QgcHJvdG9fb3BzKSk7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MzpcdGVzcGludGNwX3Byb3QtXHUwMDNlc2VuZG1zZyA9IGVzcGludGNwX3NlbmRtc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NDpcdGVzcGludGNwX3Byb3QtXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NTpcdGVzcGludGNwX3Byb3QtXHUwMDNlY2xvc2UgPSBlc3BpbnRjcF9jbG9zZTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY2Olx0ZXNwaW50Y3BfcHJvdC1cdTAwM2VyZWxlYXNlX2NiID0gZXNwaW50Y3BfcmVsZWFzZTtcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY3Olx0ZXNwaW50Y3Bfb3BzLVx1MDAzZXBvbGwgPSBlc3BpbnRjcF9wb2xsO1xubmV0L3hmcm0vZXNwaW50Y3AuYy01NjgtfVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjktXG5uZXQveGZybS9lc3BpbnRjcC5jOjU3MDpzdGF0aWMgc3RydWN0IHRjcF91bHBfb3BzIGVzcGludGNwX3VscCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzE6XHQubmFtZSA9IFwmIzM0O2VzcGludGNwXCYjMzQ7LFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NzItXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTczOlx0LmluaXQgPSBlc3BpbnRjcF9pbml0X3NrLFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NzQtfTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzY6dm9pZCBfX2luaXQgZXNwaW50Y3BfaW5pdCh2b2lkKVxubmV0L3hmcm0vZXNwaW50Y3AuYy01Nzcte1xubmV0L3hmcm0vZXNwaW50Y3AuYzo1Nzg6XHRidWlsZF9wcm90b3MoXHUwMDI2ZXNwaW50Y3BfcHJvdCwgXHUwMDI2ZXNwaW50Y3Bfb3BzLCBcdTAwMjZ0Y3BfcHJvdCwgXHUwMDI2aW5ldF9zdHJlYW1fb3BzKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc5LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1ODA6XHR0Y3BfcmVnaXN0ZXJfdWxwKFx1MDAyNmVzcGludGNwX3VscCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTU4MS19XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NS0jaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDY6I2luY2x1ZGUgXHUwMDNjbmV0L2VzcGludGNwLmhcdTAwM2Vcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDctI2VuZGlmXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDA0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxNC0jaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQxNTpcdGVzcGludGNwX2luaXQoKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxNi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzMyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIFhGUk1fRVNQSU5UQ1AqKgoKT2theSwgdGltZSB0byBnZXQgdGhpcyBzdHJhaWdodC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBYRlJNX0VTUElOVENQYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGRlZmluaXRpb25zLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZmVhdHVyZSBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGFyZSBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgbG9naWMgZnJvbSB0aGVyZS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgY2hlY2tpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIG5ldHdvcmtpbmctcmVsYXRlZCBmaWxlcywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gWEZSTSAoSVBzZWMgZnJhbWV3b3JrKS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsYWlkIG91dCwgYnV0IEkmIzM5O20gcHJlcGFyZWQgZm9yIGEgYml0IG9mIGEgaHVudCBpZiBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBYRlJNX0VTUElOVENQYCAqYWN0dWFsbHkqIG1lYW5zIGluIHRlcm1zIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBJbXBsaWNhdGlvbnMgb2YgQ09ORklHX1hGUk1fRVNQSU5UQ1AqKgoKT2theSwgc28gYENPTkZJR19YRlJNX0VTUElOVENQYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB3aGF0JiMzOTtzICp1c2luZyogdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGl0LCBhbmQgdGhlIGtlcm5lbCBtb2R1bGVzIG9yIGFwcGxpY2F0aW9ucyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmVseSBvbiBpdC4gQSBxdWljayBgZ3JlcGAgdGhyb3VnaCB0aGUgcmVsZXZhbnQga2VybmVsIHNvdXJjZSB0cmVlcyBpcyBwcm9iYWJseSB0aGUgZmlyc3Qgc3RlcCDigJMgZmluZCBhbGwgaW5zdGFuY2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW4gYEtjb25maWdgIGZpbGVzLCB0byBzZWUgaG93IHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQuIEkgZXhwZWN0IGl0JiMzOTtzIHBhcnQgb2YgYSBsYXJnZXIgc2VjdXJpdHkgZmVhdHVyZSBzZXQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gSVBzZWMuCgpJJiMzOTttIGFzc3VtaW5nIHRoaXMgZW5hYmxlcyB0aGUgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpIHByb3RvY29sIHdpdGhpbiB0aGUgWEZSTSAoZVh0ZXJuYWwgRmlyZXdhbGwgYW5kIFJvdXRpbmcgTWFuYWdlbWVudCkgZnJhbWV3b3JrLCBidXQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSAmIzM0O0lOVENQJiMzNDsgc3VmZml4IHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIFRDUCBlbmNhcHN1bGF0aW9uICp3aXRoaW4qIEVTUC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBzY2VuYXJpb3Mgd2hlcmUgc3RhbmRhcmQgSVBzZWMgdHJhdmVyc2FsIG1pZ2h0IGJlIHByb2JsZW1hdGljIOKAkyBwZXJoYXBzIE5BVCB0cmF2ZXJzYWwsIG9yIGVudmlyb25tZW50cyB3aGVyZSBkaXJlY3QgVURQIG9yIEdSRSBlbmNhcHN1bGF0aW9uIGlzIHJlc3RyaWN0ZWQuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgbmVjZXNzaXRhdGUgZW5jYXBzdWxhdGluZyBFU1AgdHJhZmZpYyBpbiBUQ1AuIElzIHRoaXMgYSBjb21tb24gcHJhY3RpY2U/IFdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSB0cmFkZS1vZmZzPyBBcmUgdGhlcmUgZG9jdW1lbnRlZCB1c2UgY2FzZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbj8KCk15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUQ1AmIzM5O3MgY29ubmVjdGlvbi1vcmllbnRlZCBuYXR1cmUgaW50cm9kdWNlcyBhIGRpZmZlcmVudCBhdHRhY2sgc3VyZmFjZSBjb21wYXJlZCB0byBVRFAuIEFyZSB0aGVyZSBrbm93biB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBUQ1AtZW5jYXBzdWxhdGVkIEVTUCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXhpdGllcyB3aXRoIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIGVuY2Fwc3VsYXRpb24gaXMgaW1wbGVtZW50ZWQuIElzIGl0IGEgc2ltcGxlIFRDUCBzb2NrZXQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIGZvcm0gb2YgcHJvdG9jb2wgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsPwoKRmluYWxseSwgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24gaXMga2V5LiBUaGUgZXh0cmEgVENQIGhlYWRlciB3aWxsIGFkZCBvdmVyaGVhZCwgYW5kIHRoZSBrZXJuZWwgd2lsbCBuZWVkIHRvIGhhbmRsZSB0aGUgVENQIGNvbm5lY3Rpb24gc3RhdGUuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIGNvbXBhcmluZyBUQ1AtZW5jYXBzdWxhdGVkIEVTUCB0byBvdGhlciBJUHNlYyB0cmFuc3BvcnQgbWV0aG9kcywgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBpcyBjb25zaWRlcmVkIG5lY2Vzc2FyeS4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBrbm93IHdoeSBzb21lb25lIHdvdWxkIGNob29zZSB0aGlzLCB3aGF0IGl0IGJ1eXMgdGhlbSwgYW5kIHdoYXQgaXQgY29zdHMgdGhlbS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGBncmVwYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg2LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZzozODc6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTk0LVx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4tLVxubmV0L3hmcm0vTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICYjNDM7PSB4ZnJtX2lwdGZzLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xubmV0L3hmcm0vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0geGZybV9zdGF0ZV9icGYub1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQtI2VuZGlmXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ1OiNpZmRlZiBDT05GSUdfWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00Ni0jaW5jbHVkZSBcdTAwM2NuZXQvZXNwaW50Y3AuaFx1MDAzZVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTMtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTQ6I2lmZGVmIENPTkZJR19YRlJNX0VTUElOVENQXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTUtXHRlc3BpbnRjcF9pbml0KCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCYjMzk7cyBsaWtlbHkgZHJpdmluZyB0aGlzLCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMzgyLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIElQdjQtcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgSSBzdXNwZWN0IHRoZSBpc3N1ZSBpcyBidXJpZWQgaW4gdGhlcmUgc29tZXdoZXJlLiBUaGVuLCBJ4oCZbGwgY3Jvc3MtcmVmZXJlbmNlIHdpdGggYG5ldC9pcHY2L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTAuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGggSVB2NiBzZXR0aW5ncywgYW5kIGl0JiMzOTtzIGFsd2F5cyBzbWFydCB0byBjaGVjayBib3RoIHNpZGVzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGNvbmZsaWN0aW5nIG9yIHVuZXhwZWN0ZWRseSBpbnRlcmFjdGluZy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgYmVoYXZpb3IgdGhhdCBoYXMgcGlxdWVkIG15IGludGVyZXN0LiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBrZXJuZWwgaXMgcmVhbGx5IHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NTpcdFx0ICBTdXBwb3J0IGZvciBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZC4gVGhpcyBtYWtlcyBzZW5zZVxuIDM3NjpcdFx0ICBvbmx5IGlmIHRoaXMgc3lzdGVtIHJlYWxseSBkb2VzIElQc2VjIGFuZCB3YW50IHRvIGRvIGl0XG4gMzc3Olx0XHQgIHdpdGggaGlnaCB0aHJvdWdocHV0LiBBIHR5cGljYWwgZGVza3RvcCBzeXN0ZW0gZG9lcyBub3RcbiAzNzg6XHRcdCAgbmVlZCBpdCwgZXZlbiBpZiBpdCBkb2VzIElQc2VjLlxuIDM3OTpcdFxuIDM4MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDM4MTpcdFxuIDM4MjpcdGNvbmZpZyBJTkVUX0VTUElOVENQXG4gMzgzOlx0XHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuIDM4NDpcdFx0ZGVwZW5kcyBvbiBYRlJNIFx1MDAyNlx1MDAyNiBJTkVUX0VTUFxuIDM4NTpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAzODY6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAzODc6XHRcdHNlbGVjdCBYRlJNX0VTUElOVENQXG4gMzg4Olx0XHRoZWxwXG4gMzg5Olx0XHQgIFN1cHBvcnQgZm9yIFJGQyA4MjI5IGVuY2Fwc3VsYXRpb24gb2YgRVNQIGFuZCBJS0Ugb3ZlclxuIDM5MDpcdFx0ICBUQ1AvSVB2NCBzb2NrZXRzLlxuIDM5MTpcdFxuIDM5MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDM5MzpcdFxuIDM5NDpcdGNvbmZpZyBJTkVUX0lQQ09NUFxuIDM5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuIDM5NjpcdFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcbiAzOTc6XHRcdHNlbGVjdCBYRlJNX0lQQ09NUFxuIDM5ODpcdFx0aGVscFxuIDM5OTpcdFx0ICBTdXBwb3J0IGZvciBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sIChJUENvbXApIChSRkMzMTczKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQdjYgY29uZmlndXJhdGlvbiBpc3N1ZS4gVGltZSB0byBkcmlsbCBkb3duIGEgYml0IGRlZXBlciwgYW5kIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBzb21lIHRoaW5ncy4gTGV0JiMzOTtzIG5vdCBqdXN0IHN0YXkgZm9jdXNlZCBvbiBvbmUgZmlsZSwgYnV0IHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbmV0L2lwdjYvS2NvbmZpZ2AuIEkgc2VlbSB0byByZWNhbGwgc29tZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgb3Igb3B0aW9uIGRlZmluaXRpb25zIGFyb3VuZCBsaW5lIDkwIHRoZXJlLCBhbmQgdGhhdCBhcmVhIHVzdWFsbHkgY29udGFpbnMgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3Mgb3IgZGVmYXVsdHMsIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBMZXQgbWUganVtcCB0aGVyZSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxuICA4MTpcdFx0ZGVmYXVsdCBuXG4gIDgyOlx0XHRoZWxwXG4gIDgzOlx0XHQgIFN1cHBvcnQgZm9yIEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkLiBUaGlzIG1ha2VzIHNlbnNlXG4gIDg0Olx0XHQgIG9ubHkgaWYgdGhpcyBzeXN0ZW0gcmVhbGx5IGRvZXMgSVBzZWMgYW5kIHdhbnQgdG8gZG8gaXRcbiAgODU6XHRcdCAgd2l0aCBoaWdoIHRocm91Z2hwdXQuIEEgdHlwaWNhbCBkZXNrdG9wIHN5c3RlbSBkb2VzIG5vdFxuICA4NjpcdFx0ICBuZWVkIGl0LCBldmVuIGlmIGl0IGRvZXMgSVBzZWMuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg5Olx0XG4gIDkwOlx0Y29uZmlnIElORVQ2X0VTUElOVENQXG4gIDkxOlx0XHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4gIDkyOlx0XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElORVQ2X0VTUFxuICA5MzpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAgOTQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAgOTU6XHRcdHNlbGVjdCBYRlJNX0VTUElOVENQXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFN1cHBvcnQgZm9yIFJGQyA4MjI5IGVuY2Fwc3VsYXRpb24gb2YgRVNQIGFuZCBJS0Ugb3ZlclxuICA5ODpcdFx0ICBUQ1AvSVB2NiBzb2NrZXRzLlxuICA5OTpcdFxuIDEwMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwMTpcdFxuIDEwMjpcdGNvbmZpZyBJTkVUNl9JUENPTVBcbiAxMDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuIDEwNDpcdFx0c2VsZWN0IElORVQ2X1hGUk1fVFVOTkVMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAuIFRoZXkmIzM5O3JlIGRlcGVuZGVudCBvbiBgWEZSTWAgYW5kIHRoZSByZWd1bGFyIGBJTkVUX0VTUGAvYElORVQ2X0VTUGAgbW9kdWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgd2hlbiBlbmFibGVkLCBgWEZSTV9FU1BJTlRDUGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgZnJvbSBhIHByYWN0aWNhbCBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBzdGFuZHBvaW50LCBpcyB3aGV0aGVyIHRoaXMgY29uZmlndXJhdGlvbiBpcyBldmVuICphY2hpZXZhYmxlKiBpbiBhIHN0YW5kYXJkIHNldHVwLgoKQWgsIHllcy4gRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSkgKmlzKiBhIHN0YW5kYXJkIHNvY2tldCBVTFAsIHNwZWNpZmljYWxseSBoYW5kbGVkIGJ5IGB0Y3BfcmVnaXN0ZXJfdWxwKCZhbXA7ZXNwaW50Y3BfdWxwKWAuIFRoaXMgbWVhbnMgdGhhdCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gaW5kZWVkIHVzZSBpdCDigJMgaXQgY2FuIGNyZWF0ZSBhIFRDUCBzb2NrZXQgYW5kIHNldCBgVENQX1VMUGAgd2l0aCAmIzM0O2VzcGludGNwJiMzNDsuIFRoYXQgYWxsb3dzIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBFU1Agb3IgSUtFIHBhY2tldHMgb3ZlciBUQ1Agc29ja2V0cywgb3IgZXZlbiB0aHJvdWdoIHhmcm0gbmV0bGluaywgd2hpY2ggaXMgcXVpdGUgZmxleGlibGUuCgpTbywgd2hlbiB0aGUga2VybmVsICpyZWNlaXZlcyogdGhlc2UgZW5jYXBzdWxhdGVkIHBhY2tldHMsIGl0IGVuZHMgdXAgaW4gYGVzcGludGNwX3JjdmAsIHdoaWNoIHRoZW4gY2FsbHMgYGhhbmRsZV9lc3BgLiBJIHJlY2FsbCBhIHJlY2VudCByZXZpc2lvbiB3aGVyZSB0aGUgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uIGhhZCB0aGUgZm9sbG93aW5nIGNvZGU6CmBgYGMKc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCnsKCXN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItJmd0O2NiOwoKCWlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7CgkJWEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpOwoJCWtmcmVlX3NrYihza2IpOwoJCXJldHVybjsKCX0KLi4uCmBgYApUaGUga2V5IGNoYW5nZSBoZXJlLCBvciBhdCBsZWFzdCB0aGUgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIG1lLCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYC4gSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGFuZCBxdWlja2x5IHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0IHZhbGlkYXRlcyB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHJlc2V0IG9wZXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN1cml0eSBtZWFzdXJlIGFnYWluc3QgcG90ZW50aWFsIHBhY2tldCBtYW5pcHVsYXRpb24gb3IgaGVhZGVyIGluamVjdGlvbi4gS25vd2luZyB0aGlzIGFsbG93cyBtZSB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHRvIHBvdGVudGlhbGx5IGFzc2VzcyB0aGUgc3RhYmlsaXR5IG9mIHRoZSBtb2R1bGUgYXMgYSB3aG9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MzA5Nj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMDQtLyoqXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMDU6ICogc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdHJhbnNwb3J0IGhlYWRlclxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTA2LSAqIEBza2I6IGJ1ZmZlciB0byBhbHRlclxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzExMj1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMTM6c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTE0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEkga25vdyB0aGlzIGlzIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgc28gaXQmIzM5O3MgYSBjb3JlIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbiwgbGlrZWx5IGxvdy1sZXZlbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBkZXRhaWxzIGluIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgYW5kIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCB0byBnZXQgdG8gaXRzIGNvbnRleHQuIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBpZiBpdCYjMzk7cyB0aGVyZSB0byBwcm90ZWN0IGZyb20gYW4gZWRnZSBjYXNlLCBvciBpZiBpdCBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gR2l2ZW4gdGhlIG5hbWUsICYjMzQ7Y2FyZWZ1bCYjMzQ7IGlzIGEgZ29vZCBjbHVlIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgYWJvdXQgc2FmZXR5IC0gcG90ZW50aWFsbHkgYm91bmRhcnkgY2hlY2tzIG9yIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBjb3JydXB0aW9uLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIC0gSSBuZWVkIHRvIGtub3cgaG93IHRoZSBuZXR3b3JrIHN0YWNrIGRlYWxzIHdpdGggdHJhbnNwb3J0IGhlYWRlciBtYW5pcHVsYXRpb24sIGFuZCB3aGF0IHNwZWNpZmljIHNjZW5hcmlvcyB3YXJyYW50IHRoaXMgJiMzNDtjYXJlZnVsJiMzNDsgYXBwcm9hY2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IHRoZSByaXNrcyBhbmQgZGVzaWduIGFuIGFwcHJvYWNoIHRvIG1pdGlnYXRlIHRoZW0sIGlmIHRoZXJlIGFyZSBhbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEwNDpcdC8qKlxuMzEwNTpcdCAqIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRyYW5zcG9ydCBoZWFkZXJcbjMxMDY6XHQgKiBAc2tiOiBidWZmZXIgdG8gYWx0ZXJcbjMxMDc6XHQgKlxuMzEwODpcdCAqIEhhcmRlbmVkIHZlcnNpb24gb2Ygc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKS5cbjMxMDk6XHQgKlxuMzExMDpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxuMzExMTpcdCAqL1xuMzExMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbjMxMTM6XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXG4zMTE0Olx0e1xuMzExNTpcdFx0bG9uZyBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkO1xuMzExNjpcdFxuMzExNzpcdFx0aWYgKHVubGlrZWx5KG9mZnNldCAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSlvZmZzZXQpKVxuMzExODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4zMTE5Olx0XG4zMTIwOlx0XHRpZiAodW5saWtlbHkob2Zmc2V0ID09ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVSkpXG4zMTIxOlx0XHRcdHJldHVybiBmYWxzZTtcbjMxMjI6XHRcbjMxMjM6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gb2Zmc2V0O1xuMzEyNDpcdFx0cmV0dXJuIHRydWU7XG4zMTI1Olx0fVxuMzEyNjpcdFxuMzEyNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjMxMjg6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVNQSU5UQ1AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXNzZW50aWFsIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2ggdG8gd29yayBwcm9wZXJseS4gU2luY2UgdGhlIGNvZGUgbW9kaWZpZXMgdGhlIGBoYW5kbGVfZXNwYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLCB0aGF0JiMzOTtzIG15IHByaW1hcnkgZm9jdXMuIAoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSB3aXRoaW4gdGhhdCBmaWxlLiBJIHF1aWNrbHkgY2hlY2tlZCwgYW5kIEkgc2VlIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIHNob3VsZCBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG9yIGFueSBwb3NzaWJsZSBlbnRyeSBwb2ludHMgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQgbWUgZ28gYWhlYWQgYW5kIGV4YW1pbmUgYWxsIHRoZSBmdW5jdGlvbnMgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZW0gd2l0aCB0aGUgY2hhbmdlIHRvIGBoYW5kbGVfZXNwYCwgYW5kIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBvdmVydmlldyBvZiB3aGF0IHRvIGxvb2sgZm9yIGdvaW5nIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYy0xMS1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTI6c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzLVx0XHRcdCAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjgtXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5OnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy02MC1cbm5ldC94ZnJtL2VzcGludGNwLmM6NjE6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS9lc3BpbnRjcC5jLTYyLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTEyMC1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTIxOnN0YXRpYyBpbnQgZXNwaW50Y3BfcGFyc2Uoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL2VzcGludGNwLmMtMTIyLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTE0MS1cbm5ldC94ZnJtL2VzcGludGNwLmM6MTQyOnN0YXRpYyBpbnQgZXNwaW50Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQzLVx0XHRcdCAgICBpbnQgZmxhZ3MpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjE3NjppbnQgZXNwaW50Y3BfcXVldWVfb3V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc3LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTE4OS19XG5uZXQveGZybS9lc3BpbnRjcC5jOjE5MDpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9xdWV1ZV9vdXQpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTEtXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTQtXG5uZXQveGZybS9lc3BpbnRjcC5jOjE5NTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZyxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTk2LVx0XHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjE1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMTY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjE3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDctXG5uZXQveGZybS9lc3BpbnRjcC5jOjI0ODpzdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC94ZnJtL2VzcGludGNwLmMtMjQ5LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3Ni1cbm5ldC94ZnJtL2VzcGludGNwLmM6Mjc3OmludCBlc3BpbnRjcF9wdXNoX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3OC17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDgtfVxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDk6RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcHVzaF9za2IpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTAtXG5uZXQveGZybS9lc3BpbnRjcC5jOjMxMTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTIte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9Mzk1PXN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGVzcGludGNwNl9vcHM7XG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NjpzdGF0aWMgREVGSU5FX01VVEVYKHRjcHY2X3Byb3RfbXV0ZXgpO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTctXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5ODpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk5LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQwNi1cbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MDgte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDE4LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MTk6c3RhdGljIHZvaWQgZXNwaW50Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MjAte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDI2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mjc6c3RhdGljIHZvaWQgZXNwaW50Y3BfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNDM0LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MzU6Ym9vbCB0Y3BfaXNfdWxwX2VzcChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzNi17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzgtfVxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mzk6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2lzX3VscF9lc3ApO1xubmV0L3hmcm0vZXNwaW50Y3AuYy00NDAtXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0MTpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDItXHRcdFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cdFx0XHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDU6c3RhdGljIGludCBlc3BpbnRjcF9pbml0X3NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ2LXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTUwNC1cbm5ldC94ZnJtL2VzcGludGNwLmM6NTA1OnN0YXRpYyB2b2lkIGVzcGludGNwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDYte1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTE5LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MjA6c3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG5uZXQveGZybS9lc3BpbnRjcC5jLTUyMS17XG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU0NzpzdGF0aWMgX19wb2xsX3QgZXNwaW50Y3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTQ4LVx0XHRcdCAgICAgIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjU1NjpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTctXHRcdFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTU3MD1zdGF0aWMgc3RydWN0IHRjcF91bHBfb3BzIGVzcGludGNwX3VscCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTc1LVxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzY6dm9pZCBfX2luaXQgZXNwaW50Y3BfaW5pdCh2b2lkKVxubmV0L3hmcm0vZXNwaW50Y3AuYy01Nzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVTUC9UQ1AgVUxQIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBoYW5kbGVfZXNwYCBmdW5jdGlvbiBnZXRzIGludm9rZWQuIEl0IGxvb2tzIGxpa2UgYGVzcGludGNwX3JjdmAgaXMgdGhlIGtleSwgYW5kIGl0IGNhbGxzIGVpdGhlciBgaGFuZGxlX2VzcGAgb3IgYGhhbmRsZV9ub25lc3BgLCBkZXBlbmRpbmcgb24gc29tZXRoaW5nIEkgbmVlZCB0byBmaWd1cmUgb3V0LiBSaWdodCwgYGVzcGludGNwX3JjdmAgaXMgdGhlIHJlY2VpdmUgbWVzc2FnZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggYHN0cnBhcnNlcmAgdmlhIHRoYXQgYGNiLnJjdl9tc2dgIGFzc2lnbm1lbnQuIEdvdCBpdC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGhvdyB0aGUgVUxQIHNvY2tldCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBgZXNwaW50Y3BfaW5pdF9za2AuCgpCZXNpZGVzIHRoZSBgcmN2YCBwYXRoLCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHRyYW5zbWl0IHNpZGUsIHNvIEkmIzM5O2xsIGtlZXAgYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgb24gbXkgcmFkYXIsIGFzIHdlbGwgYXMgYHRjcF9pc191bHBfZXNwYC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGBlc3BpbnRjcF9zZW5kbXNnYCBhbmQgYGVzcGludGNwX3JlY3Ztc2dgIGFzIHdlbGwuIFRoZSBtZWF0IG9mIHVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGNvbWUgZG93biB0byBhIGRldGFpbGVkIGxvb2sgYXQgYGVzcGludGNwX3JjdmAgYW5kIGVzcGVjaWFsbHkgYGhhbmRsZV9lc3BgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG4gIDY0Olx0XHRcdFx0XHRcdFx0c3RycCk7XG4gIDY1Olx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XG4gIDY2Olx0XHRpbnQgbGVuID0gcnhtLVx1MDAzZWZ1bGxfbGVuIC0gMjtcbiAgNjc6XHRcdHUzMiBub25lc3BfbWFya2VyO1xuICA2ODpcdFx0aW50IGVycjtcbiAgNjk6XHRcbiAgNzA6XHRcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XG4gIDcyOlx0XHRcdHU4IGRhdGE7XG4gIDczOlx0XG4gIDc0Olx0XHRcdGVyciA9IHNrYl9jb3B5X2JpdHMoc2tiLCByeG0tXHUwMDNlb2Zmc2V0ICYjNDM7IDIsIFx1MDAyNmRhdGEsIDEpO1xuICA3NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDc2Olx0XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDc3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDc4Olx0XHRcdFx0cmV0dXJuO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4gIDgxOlx0XHRcdGlmIChkYXRhID09IDB4ZmYpIHtcbiAgODI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgODM6XHRcdFx0XHRyZXR1cm47XG4gIDg0Olx0XHRcdH1cbiAgODU6XHRcdH1cbiAgODY6XHRcbiAgODc6XHRcdC8qIGRyb3Agb3RoZXIgc2hvcnQgbWVzc2FnZXMgKi9cbiAgODg6XHRcdGlmICh1bmxpa2VseShsZW4gXHUwMDNjPSBzaXplb2Yobm9uZXNwX21hcmtlcikpKSB7XG4gIDg5Olx0XHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IpO1xuICA5MDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTE6XHRcdFx0cmV0dXJuO1xuICA5MjpcdFx0fVxuICA5MzpcdFxuICA5NDpcdFx0ZXJyID0gc2tiX2NvcHlfYml0cyhza2IsIHJ4bS1cdTAwM2VvZmZzZXQgJiM0MzsgMiwgXHUwMDI2bm9uZXNwX21hcmtlcixcbiAgOTU6XHRcdFx0XHQgICAgc2l6ZW9mKG5vbmVzcF9tYXJrZXIpKTtcbiAgOTY6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAgOTc6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDk4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICA5OTpcdFx0XHRyZXR1cm47XG4gMTAwOlx0XHR9XG4gMTAxOlx0XG4gMTAyOlx0XHQvKiByZW1vdmUgaGVhZGVyLCBsZWF2ZSBub24tRVNQIG1hcmtlci9TUEkgKi9cbiAxMDM6XHRcdGlmICghcHNrYl9wdWxsKHNrYiwgcnhtLVx1MDAzZW9mZnNldCAmIzQzOyAyKSkge1xuIDEwNDpcdFx0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzdHJwLVx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcbiAxMDU6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMTA2Olx0XHRcdHJldHVybjtcbiAxMDc6XHRcdH1cbiAxMDg6XHRcbiAxMDk6XHRcdGlmIChwc2tiX3RyaW0oc2tiLCByeG0tXHUwMDNlZnVsbF9sZW4gLSAyKSAhPSAwKSB7XG4gMTEwOlx0XHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuIDExMTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAxMTI6XHRcdFx0cmV0dXJuO1xuIDExMzpcdFx0fVxuIDExNDpcdFxuIDExNTpcdFx0aWYgKG5vbmVzcF9tYXJrZXIgPT0gMClcbiAxMTY6XHRcdFx0aGFuZGxlX25vbmVzcChjdHgsIHNrYiwgc3RycC1cdTAwM2Vzayk7XG4gMTE3Olx0XHRlbHNlXG4gMTE4Olx0XHRcdGhhbmRsZV9lc3Aoc2tiLCBzdHJwLVx1MDAzZXNrKTtcbiAxMTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVNQSU5UQ1AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uLCB3aGljaCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBnZXRzIGNhbGxlZCBmcm9tIGBlc3BpbnRjcF9yY3ZgLiBMZXQmIzM5O3MgY2xhcmlmeSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGhhbmRsZV9lc3BgIGFuZCBmdW5jdGlvbnMgbGlrZSBgZXNwaW50Y3BfcmN2YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYW5kIGBlc3BpbnRjcF9yZWN2bXNnYC4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBvdGhlciBjb2RlIHBhdGhzIGNhbGwgYGhhbmRsZV9lc3BgIG9yIGFueSBvZiBpdHMgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCBjYWxsIHBhdGhzIHRvIHVuZGVyc3RhbmQgYWxsIGVudHJ5IHBvaW50cy4KCk5leHQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gT2theSwgSSBzZWUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBUaGV5IGJvdGggZGVwZW5kIG9uIGBYRlJNYCBhbmQgYElORVQvSU5FVDZfRVNQYCwgYW5kIHRoZXkgYWxzbyBzZWxlY3QgYFNUUkVBTV9QQVJTRVJgLCBgTkVUX1NPQ0tfTVNHYCwgYW5kIGBYRlJNX0VTUElOVENQYC4gR3JlYXQsIHRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0LiBJIGNhbiBzZWUgd2hhdCBJIG5lZWQgdG8gbG9vayBmb3IsIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4KCk5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gc2VlIGlmIGBJTkVUX0VTUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaW4gYG5ldC9pcHY0L0tjb25maWdgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgaXQmIzM5O3Mgc29tZXdoZXJlIGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM1NC4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIGdldCB0aGF0IGZpbGUgb3BlbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgYmV0IEkgY2FuIHF1aWNrbHkgdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9uY2UgSSBoYXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgb3B0aW9uIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXG4gMzUxOlx0XG4gMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMzUzOlx0XG4gMzU0Olx0Y29uZmlnIElORVRfRVNQXG4gMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4gMzU2Olx0XHRzZWxlY3QgWEZSTV9FU1BcbiAzNTc6XHRcdGhlbHBcbiAzNTg6XHRcdCAgU3VwcG9ydCBmb3IgSVBzZWMgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLlxuIDM1OTpcdFxuIDM2MDpcdFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXG4gMzYxOlx0XHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXG4gMzYyOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcbiAzNjM6XHRcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91JiMzOTtsbCBuZWVkIHRvIGVuYWJsZVxuIDM2NDpcdFx0ICB0aGVtIGluIHRoZSBjcnlwdG8gQVBJLiAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBhY2NlbGVyYXRlZFxuIDM2NTpcdFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgYW55IG5lZWRlZCBhbGdvcml0aG1zIHdoZW4gYXZhaWxhYmxlLlxuIDM2NjpcdFxuIDM2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDM2ODpcdFxuIDM2OTpcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4gMzcwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiAzNzE6XHRcdGRlcGVuZHMgb24gSU5FVF9FU1BcbiAzNzI6XHRcdHNlbGVjdCBYRlJNX09GRkxPQURcbiAzNzM6XHRcdGRlZmF1bHQgblxuIDM3NDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU1MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgWEZSTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIGxpa2VseSBsb2NhdGlvbnMgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUsIG9yIHBlcmhhcHMgdGhlIGJyb2FkZXIgYG5ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljcyB0aGVyZSB0byBlbnN1cmUgSSBmdWxseSBncmFzcCB0aGUgc3RhdGUgb2YgWEZSTSB3aXRoaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZy00LSNcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgZmlyc3QgMzAgbGluZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGJlaW5nIHByZXNlbnRlZCBoZXJlIGF0IHRoZSB0b3AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZm91bmRhdGlvbmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gWEZSTSDigJMgdGhlIGNvcmUgb2YgdGhlIElQc2VjIGFuZCBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXTigJlsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtYWluIGBYRlJNYCBmZWF0dXJlIGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgbGlrZWx5IGZvbGxvd2VkIGJ5IG90aGVyIGNvcmUgcGFyYW1ldGVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIG1vZHVsYXJpdHkgb2YgdGhlIFhGUk0gc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IGZlYXR1cmVzIGFyZSBkaXJlY3RseSBjb25maWd1cmFibGUgYXQgdGhpcyBsZXZlbCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgaXMuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBuZXcgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gY29yZSBvcHRpb25zLCBhbnl0aGluZyB0aGF0IG1pZ2h0IHNpZ25pZnkgYSBuZXcgYXBwcm9hY2ggb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiBpbiB0aGlzIGFyZWEuIEkgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrLCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgWEZSTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBYRlJNXG4gICA2Olx0XHRib29sXG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAgIDk6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBYRlJNX09GRkxPQURcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgWEZSTV9BTEdPXG4gIDE1Olx0XHR0cmlzdGF0ZVxuICAxNjpcdFx0c2VsZWN0IFhGUk1cbiAgMTc6XHRcdHNlbGVjdCBDUllQVE9cbiAgMTg6XHRcdHNlbGVjdCBDUllQVE9fQUVBRFxuICAxOTpcdFx0c2VsZWN0IENSWVBUT19IQVNIXG4gIDIwOlx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDIxOlx0XG4gIDIyOlx0aWYgSU5FVFxuICAyMzpcdGNvbmZpZyBYRlJNX1VTRVJcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbiAgMjU6XHRcdHNlbGVjdCBYRlJNX0FMR09cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICAyODpcdFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwOAoJCQkJCQkJb3V0cHV0OiAxOTMKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgRVNQLWluLVRDUCBWdWxuZXJhYmlsaXR5ICZhbXA7IEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBvbmVzIGFyZSBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAsIGFsb25nIHdpdGggYFhGUk1fRVNQSU5UQ1BgLCB0aGVuIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYFhGUk1gIGFyZSBhbHNvIHJlbGV2YW50LiBJJiMzOTt2ZSBnb3QgdGhlbSBsaXN0ZWQ6IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYFhGUk1fRVNQSU5UQ1BgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBYRlJNYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBYRlJNIEVTUCBlbmNhcHN1bGF0ZWQgaW4gVENQLCBhZGhlcmluZyB0byBSRkMgODIyOS4gVGhlIHBhdGNoIGluIGBuZXQveGZybS9lc3BpbnRjcC5jYCBpcyBpbXBvcnRhbnQsIGl0IGZvY3VzZXMgb24gaG93IHRoZSBzeXN0ZW0gdmFsaWRhdGVzIHBhY2tldCBzdHJ1Y3R1cmUgd2l0aGluIGBoYW5kbGVfZXNwYCBieSB1c2luZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpYCB3aGVuIHBhcnNpbmcgRVNQIHdpdGhpbiBUQ1AgcGFja2V0cy4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGhhbmRsaW5nIGludmFsaWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzLCB3aGljaCB0aGUgcGF0Y2ggYWRkcmVzc2VzLiBUaGlzIGxvZ2ljIGlzIGVhc2lseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9uczsgSSBjYW4gc2V0IHRoZSBUQ1AgVUxQIHRvIGBlc3BpbnRjcGAgYW5kIHJlY2VpdmUgcGFja2V0cywgc28gdGhpcyBpcyB2YWxpZCBmb3IgYm90aCB2aXJ0dWFsaXplZCBhbmQgc3RhbmRhcmQgZW52aXJvbm1lbnRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIHNlZSBgaGFuZGxlX2VzcGAsIGBlc3BpbnRjcF9yY3ZgLCBgZXNwaW50Y3BfcXVldWVfb3V0YCwgYGVzcGludGNwX3B1c2hfc2tiYCwgYGVzcGludGNwX3NlbmRtc2dgLCBhbmQgYGVzcGludGNwX3JlY3Ztc2dgLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvZiB0aGUga2V5IGZ1bmN0aW9ucyBjb3VsZCBiZSBpbmxpbmVkLiBgaGFuZGxlX2VzcGAgaXMgc3RhdGljLCBgZXNwaW50Y3BfcmN2YCBpcyBhbHNvIHN0YXRpYyAoYXNzaWduZWQgYXMgY2FsbGJhY2sgdG8gYHN0cnBfY2FsbGJhY2tzYCksIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQsIGBlc3BpbnRjcF9wdXNoX3NrYmAgaXMgbm9uLXN0YXRpYyBleHBvcnRlZCwgYGVzcGludGNwX3NlbmRtc2dgIGlzIHN0YXRpYyAoYXNzaWduZWQgaW4gcHJvdG8pLCBgZXNwaW50Y3BfcmVjdm1zZ2AgaXMgc3RhdGljIChhc3NpZ25lZCBpbiBwcm90byksIGFuZCBgdGNwX2lzX3VscF9lc3BgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQuIE5vdyBJIGhhdmUgbXkgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtoYW5kbGVfZXNwJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmN2JiMzNDssICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywgJiMzNDtlc3BpbnRjcF9zZW5kbXNnJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmVjdm1zZyYjMzQ7XWAuCgpPa2F5LCBJIG5lZWQgdG8gc3RydWN0dXJlIG15IGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgRVNQLWluLVRDUCBlbmNhcHN1bGF0ZWQgcGFja2V0cyB3aXRoaW4gYGhhbmRsZV9lc3BgIGJ5IGluY29ycG9yYXRpbmcgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgLiBUaGlzIGVuc3VyZXMgc2FmZXIgcHJvY2Vzc2luZyBvZiBpbnZhbGlkIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cy4gVGhpcyBkaXJlY3QgaW1wYWN0IG9uIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSBvbiBUQ1Agc29ja2V0cyB3aXRoIHRoZSBFU1BJTlRDUCBVTFAgZW5hYmxlZCwgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUuCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJTkVUX0VTUElOVENQJiMzNDssICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywgJiMzNDtYRlJNX0VTUElOVENQJiMzNDssICYjMzQ7SU5FVF9FU1AmIzM0OywgJiMzNDtJTkVUNl9FU1AmIzM0OywgJiMzNDtYRlJNJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtoYW5kbGVfZXNwJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmN2JiMzNDssICYjMzQ7ZXNwaW50Y3BfcXVldWVfb3V0JiMzNDssICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywgJiMzNDtlc3BpbnRjcF9zZW5kbXNnJiMzNDssICYjMzQ7ZXNwaW50Y3BfcmVjdm1zZyYjMzQ7XWAKCk5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7WEZSTV9FU1BJTlRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7WEZSTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV9lc3AmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcmN2JiMzNDssCiAgICAmIzM0O2VzcGludGNwX3F1ZXVlX291dCYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9wdXNoX3NrYiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9xdWV1ZV9vdXQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3BfcHVzaF9za2ImIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluY29taW5nIEVTUCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBuZXQveGZybS9lc3BpbnRjcC5jIGJ5IHVzaW5nIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIGJlZm9yZSByZXNldHRpbmcgdGhlbSBpbiBoYW5kbGVfZXNwKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIFJGQyA4MjI5IEVTUC1pbi1UQ1AgZW5jYXBzdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcigpYCB3aXRoIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIGluIGBoYW5kbGVfZXNwKClgIHdpdGhpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIFRoaXMgY2hhbmdlIGNoZWNrcyB3aGV0aGVyIHRoZSBjYWxjdWxhdGVkIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0IChgc2tiLVx1MDAzZWRhdGEgLSBza2ItXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXG5cblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODY2ODVmZWZjYzEwYTlhZDgwMDMzODM5NTIzNzgwNjkyZTFhMDhjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTY6MzY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuYwppbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NAotLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmMKQEAgLTMwLDcgJiM0MzszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLSZndDtjYjsKIAotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiYjNDM7CWlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7CiYjNDM7CQlYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi0mZ3Q7bmhvZmYgKi8KIAltZW1tb3ZlKHNrYi0mZ3Q7Y2IsICZhbXA7dGNwX2NiLSZndDtoZWFkZXIsIHNpemVvZih0Y3BfY2ItJmd0O2hlYWRlcikpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVNQaW5UQ1AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXRjaCwgc28gbXkgZmlyc3QgbW92ZSBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjb2RlIGl0JiMzOTtzIHRvdWNoaW5nLiBBaCwgYG5ldC94ZnJtL2VzcGludGNwLmNgIOKAkyB0aGF04oCZcyB0aGUgdGFyZ2V0LiBOb3csIEkgc2hvdWxkIHplcm8gaW4gb24gdGhlIGNoYW5nZXMuIFRpbWUgdG8gZW1wbG95IGByZWFkLWZpbGVgIGFuZCBpbnNwZWN0IHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMwLCB0byBzZWUgdGhlIGRpcmVjdCBpbXBhY3Qgb2YgdGhlIHBhdGNoLiBLbm93aW5nIHByZWNpc2VseSB3aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZCBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIGFuZCBhY2N1cmF0ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9zdHJwYXJzZXIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZXNwaW50Y3AuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrbXNnLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb21tb24uaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaG90ZGF0YS5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDEzOlx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2spXG4gIDE0Olx0e1xuICAxNTpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnNrLVx1MDAzZXNrX3JtZW1fYWxsb2MpIFx1MDAzZT0gc2stXHUwMDNlc2tfcmN2YnVmIHx8XG4gIDE2Olx0XHQgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuICAxNzpcdFx0XHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XG4gIDE4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAxOTpcdFx0XHRyZXR1cm47XG4gIDIwOlx0XHR9XG4gIDIxOlx0XG4gIDIyOlx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4gIDIzOlx0XG4gIDI0Olx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gIDI1Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlaWtlX3F1ZXVlLCBza2IpO1xuICAyNjpcdFx0Y3R4LVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xuICAyNzpcdH1cbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiAgMzA6XHR7XG4gIDMxOlx0XHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuICAzMjpcdFxuICAzMzpcdFx0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbiAgMzQ6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICAzNTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgMzY6XHRcdFx0cmV0dXJuO1xuICAzNzpcdFx0fVxuICAzODpcdFxuICAzOTpcdFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuICA0MDpcdFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4gIDQxOlx0XG4gIDQyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gIDQzOlx0XHRza2ItXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXHUwMDNlc2tiX2lpZik7XG4gIDQ0Olx0XHRpZiAoIXNrYi1cdTAwM2VkZXYpIHtcbiAgNDU6XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuICA0NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNDc6XHRcdFx0Z290byBvdXQ7XG4gIDQ4Olx0XHR9XG4gIDQ5Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDUwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gIDUxOlx0XHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuICA1MjpcdFx0XHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcbiAgNTM6XHRcdGVsc2VcbiAgNTQ6XHQjZW5kaWZcbiAgNTU6XHRcdFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XG4gIDU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNTc6XHRvdXQ6XG4gIDU4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNTk6XHR9XG4gIDYwOlx0XG4gIDYxOlx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHN0cnAsIHN0cnVjdCBlc3BpbnRjcF9jdHgsXG4gIDY0Olx0XHRcdFx0XHRcdFx0c3RycCk7XG4gIDY1Olx0XHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XG4gIDY2Olx0XHRpbnQgbGVuID0gcnhtLVx1MDAzZWZ1bGxfbGVuIC0gMjtcbiAgNjc6XHRcdHUzMiBub25lc3BfbWFya2VyO1xuICA2ODpcdFx0aW50IGVycjtcbiAgNjk6XHRcbiAgNzA6XHRcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXG4gIDcxOlx0XHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XG4gIDcyOlx0XHRcdHU4IGRhdGE7XG4gIDczOlx0XG4gIDc0Olx0XHRcdGVyciA9IHNrYl9jb3B5X2JpdHMoc2tiLCByeG0tXHUwMDNlb2Zmc2V0ICYjNDM7IDIsIFx1MDAyNmRhdGEsIDEpO1xuICA3NTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDc2Olx0XHRcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XG4gIDc3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDc4Olx0XHRcdFx0cmV0dXJuO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24sIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYC4gR2l2ZW4gbXkgbGV2ZWwgb2YgZXhwZXJ0aXNlLCBqdXN0IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gbGlrZWx5IHdvbiYjMzk7dCBiZSBlbm91Z2guIEkgbmVlZCBhIG1vcmUgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nLCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kICpob3cqIGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGVyZWZvcmUsIGxldCYjMzk7cyBzdGFydCBieSBkb2luZyBhIHF1aWNrIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBzZWFyY2ggZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbGlzdCBvZiBjYWxsc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMDk2PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzEwNC0vKipcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzEwNTogKiBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsIC0gY29uZGl0aW9uYWxseSByZXNldCB0cmFuc3BvcnQgaGVhZGVyXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMDYtICogQHNrYjogYnVmZmVyIHRvIGFsdGVyXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMTEyPXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzExMzpza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMTQte1xuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9OTE9c3RhdGljIHN0cnVjdCBza19idWZmICppcHY2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0xMzEtXHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpIHtcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MTMyOlx0XHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSlcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTMzLVx0XHRcdGdvdG8gb3V0O1xuLS1cbm5ldC94ZnJtL2VzcGludGNwLmM9Mjk9c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMi1cbm5ldC94ZnJtL2VzcGludGNwLmM6MzM6XHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zNC1cdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBza2J1ZmYuaCAtIExpbmUgMzEwNCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgMzEwNC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGF0IGFyZWEgYmVjYXVzZeKApiAqW3BhdXNlcywgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgd2l0aG91dCBleHBsaWNpdGx5IHN0YXRpbmcgaXQsIGFzc3VtaW5nIHRoZSBleHBlcnQgd291bGQgdW5kZXJzdGFuZCB0aGUgaW1wbGllZCByZWFzb25pbmcgYmFzZWQgb24gdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyXSog4oCmSSBzdXNwZWN0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0aGVyZSB0b+KApiAqW0FnYWluLCBhc3N1bWluZyB0aGUgZXhwZXJ0JiMzOTtzIGtub3dsZWRnZSB3aWxsIGFsbG93IHRoZW0gdG8gZmlsbCBpbiB0aGUgYmxhbmsgYmFzZWQgb24gdGhlaXIgYmFja2dyb3VuZF0qIOKApnBlcmhhcHMgcmVsYXRlZCB0byB0aGUgcG90ZW50aWFsIGlzc3VlIEkmIzM5O20gdHJhY2tpbmcgZG93bi4gTGluZSAzMTA0IGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYW5kIGZyb20gbWVtb3J5LCBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGluZ+KApiAqW2JyaWVmIHBhdXNlXSog4oCmc29tZXRoaW5nIGFyb3VuZOKApiAqW3BhdXNlcywgY29uc2lkZXJpbmcgZXhhY3QgZGV0YWlscywgcGVyaGFwcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWNrZXQgaGVhZGVycywgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtYWNyb10q4oCmIFllcywgdGhhdCYjMzk7cyByaWdodC4gVGltZSB0byBzZWUgd2hhdCB0aGUgYWN0dWFsIGNvZGUgc2F5cyB0byBjb25maXJtIG15IGxpbmUgb2YgdGhvdWdodC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgd29ya2luZyBoeXBvdGhlc2lzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwOTU6XHRcbjMwOTY6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjMwOTc6XHR7XG4zMDk4Olx0XHRsb25nIG9mZnNldCA9IHNrYi1cdTAwM2VkYXRhIC0gc2tiLVx1MDAzZWhlYWQ7XG4zMDk5Olx0XG4zMTAwOlx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG9mZnNldCAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSlvZmZzZXQpO1xuMzEwMTpcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBvZmZzZXQ7XG4zMTAyOlx0fVxuMzEwMzpcdFxuMzEwNDpcdC8qKlxuMzEwNTpcdCAqIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRyYW5zcG9ydCBoZWFkZXJcbjMxMDY6XHQgKiBAc2tiOiBidWZmZXIgdG8gYWx0ZXJcbjMxMDc6XHQgKlxuMzEwODpcdCAqIEhhcmRlbmVkIHZlcnNpb24gb2Ygc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKS5cbjMxMDk6XHQgKlxuMzExMDpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxuMzExMTpcdCAqL1xuMzExMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbjMxMTM6XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXG4zMTE0Olx0e1xuMzExNTpcdFx0bG9uZyBvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkO1xuMzExNjpcdFxuMzExNzpcdFx0aWYgKHVubGlrZWx5KG9mZnNldCAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSlvZmZzZXQpKVxuMzExODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4zMTE5Olx0XG4zMTIwOlx0XHRpZiAodW5saWtlbHkob2Zmc2V0ID09ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVSkpXG4zMTIxOlx0XHRcdHJldHVybiBmYWxzZTtcbjMxMjI6XHRcbjMxMjM6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gb2Zmc2V0O1xuMzEyNDpcdFx0cmV0dXJuIHRydWU7XG4zMTI1Olx0fVxuMzEyNjpcdFxuMzEyNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjMxMjg6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXG4zMTI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ2CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVTUC9UQ1AgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5ldC94ZnJtL2VzcGludGNwLmNgIHBhdGNoIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBgaGFuZGxlX2VzcCgpYCBmdW5jdGlvbiB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byB0cmFuc3BvcnQgaGVhZGVyIG92ZXJmbG93cyBkdWUgdG8gYSBjYWxsIHRvIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdHJ1bmNhdGVkIG9mZnNldCBpZiB0aGUgYG9mZnNldGAgZXhjZWVkZWQgdGhlIHNpemUgb2YgYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAuIFRoZSBmaXggcmVwbGFjZXMgaXQgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpYC4gVGhlIGltcG9ydGFudCBwYXJ0IGhlcmUgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGFuZCB0aGUgc3Vic2VxdWVudCBhY3Rpb246IGlmIHRoZSBvZmZzZXQgaXMgdG9vIGxhcmdlIChvciBgfjBVYCksIHRoZSBgc2tiYCBpcyBkcm9wcGVkLCBhbmQgYW4gZXJyb3Igc3RhdGlzdGljIGlzIGluY3JlbWVudGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBhbHdheXMgaGF2ZSB0byBiZSB2ZXJ5IHJpZ29yb3VzIHdoZW4gY29uc2lkZXJpbmcgYSBjaGFuZ2UgbGlrZSB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uCgoxLiAgKipLZXJuZWwgdG8gVXNlciBTcGFjZSBEYXRhIExlYWtzOioqIE5vLiBUaGUgY29kZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgc2VuZGluZyBhbnkgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgb3IgZGF0YSB0byB1c2Vyc3BhY2UsIHNvIGluZm9ybWF0aW9uIGxlYWtzIGFyZW4mIzM5O3QgYSBjb25jZXJuLiBUaGVyZSBpcyBubyBgY29weV90b191c2VyYCBvciBhbnkgc2ltaWxhciBvcGVyYXRpb25zIGhlcmUuCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzL0ZpZWxkczoqKiBOb3BlLiBJIHNlZSBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgZmllbGRzIHdpdGhpbiBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4KMy4gICoqQ29tcGxleCBBbGxvY2F0aW9uczoqKiBOb3QgaGVyZS4gVGhlIGZpeCBkb2VzbiYjMzk7dCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgbWFuaXB1bGF0aW9uIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBleHBvc2UgdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIG1lbW9yeS4KNC4gICoqQm91bmRzL0xlbmd0aCBDaGVja3M6KiogQ3J1Y2lhbGx5LCB0aGlzIGlzIGEgKmJvdW5kcyBjaGVjayogaW4gdGhlIHRydWVzdCBzZW5zZS4gVGhlIGNoZWNrIGlzIHNwZWNpZmljYWxseSBoYXJkZW5pbmcgYWdhaW5zdCAqb3ZlcmZsb3cqIGFuZCAqdHJ1bmNhdGlvbiogb2YgYHNrYmAgb2Zmc2V0cywgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQmIzM5O3MgcHJldmVudGluZyB1cyBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIHRoZSBvZmZzZXQgaXMgaW52YWxpZCwgdGhlIHBhY2tldCBpcyBzaW1wbHkgZnJlZWQuIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgY2hlY2sgaXMgcHJldmVudGluZyBvciBjYXRjaGluZyBmYWxscyB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBvciBERUJVR19ORVQgKGlmIGVuYWJsZWQpLgoKSW4gc2hvcnQsIHRoaXMgaXMgYSAqaGFyZGVuaW5nKiBmaXgg4oCTIHNwZWNpZmljYWxseSBmb3IgcG90ZW50aWFsIGBza2JgIHRyYW5zcG9ydCBoZWFkZXIgb3ZlcmZsb3cvYm91bmRzIGlzc3Vlcy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOyBpbnN0ZWFkLCBpdCBwcm9hY3RpdmVseSAqcHJldmVudHMqIHRoZW0gYnkgZHJvcHBpbmcgdGhlIG9mZmVuZGluZyBwYWNrZXQuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bml0aXRpYWxpemVkIG1lbW9yeSwgYW5kIHNpbmNlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSB0aGF0LCBpdCBpc24mIzM5O3QgcmVsZXZhbnQuIFRoaXMgaXMgYW4gb3ZlcmZsb3cvdHJ1bmNhdGlvbiBoYXJkZW5pbmcgY2hlY2suIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBidWdneSwgYW5kIHRoaXMgY2hlY2tzLCBwcmV2ZW50aW5nIHRoZSBidWcuCgpUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBUaGlzIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKWAgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCBpbiBgaGFuZGxlX2VzcCgpYCB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBUaGlzIGNoYW5nZSBjaGVja3Mgd2hldGhlciB0aGUgY2FsY3VsYXRlZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCAoYHNrYi1cdTAwM2VkYXRhIC0gc2tiLVx1MDAzZWhlYWRgKSBmaXRzIHNhZmVseSBpbnRvIHRoZSBgdHJhbnNwb3J0X2hlYWRlcmAgZmllbGQgd2l0aG91dCB0cnVuY2F0aW9uIG9yIG92ZXJmbG93OyBpZiBpbnZhbGlkLCBpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudGVyLlxuXG5UaGlzIGlzIGEgYm91bmRzL292ZXJmbG93IHZhbGlkYXRpb24gZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgaW50ZWdlciB0cnVuY2F0aW9uIGFuZCBjb3JydXB0ZWQgc2tiIGhlYWRlciBvZmZzZXRzICh3aGljaCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzIGNhdWdodCBieSBLQVNBTi9ERUJVR19ORVQpLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcigpYCB3aXRoIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIGluIGBoYW5kbGVfZXNwKClgIHdpdGhpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIFRoaXMgY2hhbmdlIGNoZWNrcyB3aGV0aGVyIHRoZSBjYWxjdWxhdGVkIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0IChgc2tiLVx1MDAzZWRhdGEgLSBza2ItXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXG5cblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0My4zOTYzMzM1NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4OTYxNTEzNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX0VTUElOVENQXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJYRlJNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJlc3BpbnRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKWAgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCBpbiBgaGFuZGxlX2VzcCgpYCB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBUaGlzIGNoYW5nZSBjaGVja3Mgd2hldGhlciB0aGUgY2FsY3VsYXRlZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCAoYHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXFxuXFxuVGhpcyBpcyBhIGJvdW5kcy9vdmVyZmxvdyB2YWxpZGF0aW9uIGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgY29ycnVwdGVkIHNrYiBoZWFkZXIgb2Zmc2V0cyAod2hpY2ggbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGFzc2VydGlvbiBmYWlsdXJlcyBjYXVnaHQgYnkgS0FTQU4vREVCVUdfTkVUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0My4zOTYzMzc4MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTYyNTY4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ODY2ODVmZWZjYzEwYTlhZDgwMDMzODM5NTIzNzgwNjkyZTFhMDhjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDE2OjM2OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXFxuaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jXFxuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbkBAIC0zMCw3ICszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVxcdTAwM2VjYjtcXG4gXFxuLVxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuK1xcdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7XFxuK1xcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4gXFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cXHUwMDNlbmhvZmYgKi9cXG4gXFx0bWVtbW92ZShza2ItXFx1MDAzZWNiLCBcXHUwMDI2dGNwX2NiLVxcdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXFx1MDAzZWhlYWRlcikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0NC43OTMyODg4ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExNzAyNjYzNTY3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIixcbiAgICBcIlhGUk1fRVNQSU5UQ1BcIixcbiAgICBcIklORVRfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BcIixcbiAgICBcIlhGUk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfZXNwXCIsXG4gICAgXCJlc3BpbnRjcF9yY3ZcIixcbiAgICBcImVzcGludGNwX3F1ZXVlX291dFwiLFxuICAgIFwiZXNwaW50Y3BfcHVzaF9za2JcIixcbiAgICBcImVzcGludGNwX3NlbmRtc2dcIixcbiAgICBcImVzcGludGNwX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbmNvbWluZyBFU1AgcGFja2V0IHByb2Nlc3NpbmcgaW4gbmV0L3hmcm0vZXNwaW50Y3AuYyBieSB1c2luZyBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsIHRvIHZhbGlkYXRlIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cyBiZWZvcmUgcmVzZXR0aW5nIHRoZW0gaW4gaGFuZGxlX2VzcCgpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGZvciBSRkMgODIyOSBFU1AtaW4tVENQIGVuY2Fwc3VsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgKzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXHUwMDNlY2I7XG4gXG4tXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbitcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0NC43OTMyOTExNjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDAzNjc0MjU0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEVTUC1pbi1UQ1AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gUmlnaHQsIEVTUCBlbmNhcHN1bGF0ZWQgd2l0aGluIFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5LiBGaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG5ldC94ZnJtL2VzcGludGNwLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBYRlJNIGZyYW1ld29yay5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuIEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMsIGluIHRlcm1zIG9mIHJlc291cmNlIHVzYWdlLCBzZWN1cml0eSwgYW5kIHBlcmZvcm1hbmNlP1xuXG5JJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgdHJhdmVyc2UgdGhlIGNvZGUgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhhdCB3aWxsIGhlbHAgbWUgcXVpY2tseSBmaW5kIHRoZSByZWxldmFudCBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gZXZhbHVhdGUgdGhlIHBhdGNoJ3MgY2hhbmdlcyBwcm9wZXJseS4gSSBuZWVkIGEgc29saWQgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29kZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzk6MDUuMTYwNzE5NTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zdHJwYXJzZXIuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9lc3AuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za21zZy5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2hvdGRhdGEuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAxMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzaylcXG4gIDE0OlxcdHtcXG4gIDE1OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2U9IHNrLVxcdTAwM2Vza19yY3ZidWYgfHxcXG4gIDE2OlxcdFxcdCAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCBza2ItXFx1MDAzZXRydWVzaXplKSkge1xcbiAgMTc6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMTg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAxOTpcXHRcXHRcXHRyZXR1cm47XFxuICAyMDpcXHRcXHR9XFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuICAyNTpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Y3R4LVxcdTAwM2Vpa2VfcXVldWUsIHNrYik7XFxuICAyNjpcXHRcXHRjdHgtXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4gIDMwOlxcdHtcXG4gIDMxOlxcdFxcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXFx1MDAzZWNiO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbiAgMzQ6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMzU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAzNjpcXHRcXHRcXHRyZXR1cm47XFxuICAzNzpcXHRcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXFx1MDAzZW5ob2ZmICovXFxuICA0MDpcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlY2IsIFxcdTAwMjZ0Y3BfY2ItXFx1MDAzZWhlYWRlciwgc2l6ZW9mKHRjcF9jYi1cXHUwMDNlaGVhZGVyKSk7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gIDQzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXFx1MDAzZXNrYl9paWYpO1xcbiAgNDQ6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWRldikge1xcbiAgNDU6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgNDY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA0NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDQ4OlxcdFxcdH1cXG4gIDQ5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDUwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiAgNTE6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA1MjpcXHRcXHRcXHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcXG4gIDUzOlxcdFxcdGVsc2VcXG4gIDU0OlxcdCNlbmRpZlxcbiAgNTU6XFx0XFx0XFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XFxuICA1NjpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDU3OlxcdG91dDpcXG4gIDU4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgNTk6XFx0fVxcbiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3QgZXNwaW50Y3BfY3R4LFxcbiAgNjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RycCk7XFxuICA2NTpcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XFxuICA2NjpcXHRcXHRpbnQgbGVuID0gcnhtLVxcdTAwM2VmdWxsX2xlbiAtIDI7XFxuICA2NzpcXHRcXHR1MzIgbm9uZXNwX21hcmtlcjtcXG4gIDY4OlxcdFxcdGludCBlcnI7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXFxuICA3MTpcXHRcXHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XFxuICA3MjpcXHRcXHRcXHR1OCBkYXRhO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHRlcnIgPSBza2JfY29weV9iaXRzKHNrYiwgcnhtLVxcdTAwM2VvZmZzZXQgKyAyLCBcXHUwMDI2ZGF0YSwgMSk7XFxuICA3NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgNzY6XFx0XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IpO1xcbiAgNzc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuICA3OTpcXHRcXHRcXHR9XFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzk6MDUuMTYwODEzNDYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDA5MzYyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBtb2R1bGUgaW52ZXN0aWdhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgZXNwaW50Y3AuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gTXkgaW5pdGlhbCBtb3ZlIHdvdWxkIGJlIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQveGZybWAgZGlyZWN0b3J5LiBJJ2Qgc3RhcnQgYnkgZ3JlcHBpbmcsIG9idmlvdXNseS4gSSdsbCBzZWFyY2ggdGhvc2UgZmlsZXMgZm9yIFwiZXNwaW50Y3BcIi4gVGhhdCdsbCBiZSB0aGUgcXVpY2tlc3Qgd2F5IHRvIGZpbmQgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgYnVpbGQgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hlbiBhbmQgaG93IGBlc3BpbnRjcC5jYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgdG8gZmluZCBzb21lIGNsZWFyIGNsdWVzIHByZXR0eSBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozOTozNi4wNjE3NTIzNDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NjI3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSB4ZnJtX3N0YXRlX2JwZi5vXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTUtI2luY2x1ZGUgXFx1MDAzY25ldC9lc3AuaFxcdTAwM2VcXG5uZXQveGZybS9lc3BpbnRjcC5jOjY6I2luY2x1ZGUgXFx1MDAzY25ldC9lc3BpbnRjcC5oXFx1MDAzZVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2ttc2cuaFxcdTAwM2VcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjpzdGF0aWMgdm9pZCBoYW5kbGVfbm9uZXNwKHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzLVxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yOT1zdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNjAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo2MTpzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jLTYyLXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjYzOlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3QgZXNwaW50Y3BfY3R4LFxcbm5ldC94ZnJtL2VzcGludGNwLmMtNjQtXFx0XFx0XFx0XFx0XFx0XFx0c3RycCk7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTEyMC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjEyMTpzdGF0aWMgaW50IGVzcGludGNwX3BhcnNlKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMjIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxNDI6c3RhdGljIGludCBlc3BpbnRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQzLVxcdFxcdFxcdCAgICBpbnQgZmxhZ3MpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDQte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6MTQ1OlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNDYtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc1LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTc2OmludCBlc3BpbnRjcF9xdWV1ZV9vdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc3LXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjE3ODpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMTc5LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xODktfVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTkwOkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3F1ZXVlX291dCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTI6LyogZXNwaW50Y3AgbGVuZ3RoIGZpZWxkIGlzIDJCIGFuZCBsZW5ndGggaW5jbHVkZXMgdGhlIGxlbmd0aCBmaWVsZCdzIHNpemUgKi9cXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5My0jZGVmaW5lIE1BWF9FU1BJTlRDUF9NU0cgKCgoMSBcXHUwMDNjXFx1MDAzYyAxNikgLSAxKSAtIDIpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxOTU6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2tiX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTYtXFx0XFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMTUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMTY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG5uZXQveGZybS9lc3BpbnRjcC5jOjIxNzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csIGludCBmbGFncylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTIxOC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI0Ny1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI0ODpzdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI0OS17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNTA6XFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI1MTpcXHRzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnID0gXFx1MDAyNmN0eC1cXHUwMDNlcGFydGlhbDtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI1Mi1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNjEtXFx0aWYgKGVtc2ctXFx1MDAzZXNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI2MjpcXHRcXHRlcnIgPSBlc3BpbnRjcF9zZW5kc2tiX2xvY2tlZChzaywgZW1zZywgZmxhZ3MpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjYzLVxcdGVsc2VcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI2NDpcXHRcXHRlcnIgPSBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNjUtXFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3Ni1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI3NzppbnQgZXNwaW50Y3BfcHVzaF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjc4LXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjI3OTpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6MjgwOlxcdHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2cgPSBcXHUwMDI2Y3R4LVxcdTAwM2VwYXJ0aWFsO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjgxLVxcdHVuc2lnbmVkIGludCBsZW47XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTI5MS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5MjpcXHRlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIDApO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjkzLVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDU6XFx0ZXNwaW50Y3BfcHVzaF9tc2dzKHNrLCAwKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwNi1cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzA4LX1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjMwOTpFWFBPUlRfU1lNQk9MX0dQTChlc3BpbnRjcF9wdXNoX3NrYik7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMTE6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQveGZybS9lc3BpbnRjcC5jLTMxMi17XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTMtXFx0bG9uZyB0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjMxNDpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6MzE1OlxcdHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2cgPSBcXHUwMDI2Y3R4LVxcdTAwM2VwYXJ0aWFsO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzE2LVxcdHN0cnVjdCBpb3ZfaXRlciBwZnhfaXRlcjtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzMyLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzMzOlxcdGVyciA9IGVzcGludGNwX3B1c2hfbXNncyhzaywgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTM3Ni1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjM3NzpcXHRlcnIgPSBlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTM3OC1cXHQvKiB0aGlzIG1lc3NhZ2UgY291bGQgYmUgcGFydGlhbGx5IHNlbnQsIGtlZXAgaXQgKi9cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzkxLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzkyOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gZXNwaW50Y3BfcHJvdCBfX3JvX2FmdGVyX2luaXQ7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzozOTM6c3RhdGljIHN0cnVjdCBwcm90b19vcHMgZXNwaW50Y3Bfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NDpzdGF0aWMgc3RydWN0IHByb3RvIGVzcGludGNwNl9wcm90O1xcbm5ldC94ZnJtL2VzcGludGNwLmM6Mzk1OnN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIGVzcGludGNwNl9vcHM7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zOTYtc3RhdGljIERFRklORV9NVVRFWCh0Y3B2Nl9wcm90X211dGV4KTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTM5Ny1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5ODpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTM5OS17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MDA6XFx0c3RydWN0IGVzcGludGNwX2N0eCAqY3R4ID0gZXNwaW50Y3BfZ2V0Y3R4KHNrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQwMS1cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA2LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA4LXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQwOTpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yayxcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxMDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4LCB3b3JrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxMS1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXFx1MDAzZXN0cnAuc2s7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxNC1cXHRpZiAoIWN0eC1cXHUwMDNldHhfcnVubmluZylcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxNTpcXHRcXHRlc3BpbnRjcF9wdXNoX21zZ3Moc2ssIDApO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDE2LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQxOC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQxOTpzdGF0aWMgdm9pZCBlc3BpbnRjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MjAte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDIxOlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MjItXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQyNi1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQyNzpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDI5OlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzAtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTQzNT1ib29sIHRjcF9pc191bHBfZXNwKHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzNi17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Mzc6XFx0cmV0dXJuIHNrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZlc3BpbnRjcF9wcm90IHx8IHNrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZlc3BpbnRjcDZfcHJvdDtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQzOC19XFxubmV0L3hmcm0vZXNwaW50Y3AuYz00Mzk9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2lzX3VscF9lc3ApO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQwLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQxOnN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0NDI6XFx0XFx0XFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0My1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvICpvcmlnX3Byb3QsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDQtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9yaWdfb3BzKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0NTpzdGF0aWMgaW50IGVzcGludGNwX2luaXRfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ2LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQ4LVxcdHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0OTpcXHRcXHQucmN2X21zZyA9IGVzcGludGNwX3JjdixcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1MDpcXHRcXHQucGFyc2VfbXNnID0gZXNwaW50Y3BfcGFyc2UsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NTEtXFx0fTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1MjpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHg7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NTMtXFx0aW50IGVycjtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ1NC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ1NTpcXHQvKiBzb2NrbWFwIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZXNwaW50Y3AgKi9cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ1Ni1cXHRpZiAoc2stXFx1MDAzZXNrX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDczLVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQpIHtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ3NDpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdCA9IFxcdTAwMjZlc3BpbnRjcF9wcm90O1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDc1OlxcdFxcdHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZW9wcyA9IFxcdTAwMjZlc3BpbnRjcF9vcHM7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NzYtXFx0fSBlbHNlIHtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ3Ny1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ0Y3B2Nl9wcm90X211dGV4KTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ3ODpcXHRcXHRpZiAoIWVzcGludGNwNl9wcm90LnJlY3Ztc2cpXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0Nzk6XFx0XFx0XFx0YnVpbGRfcHJvdG9zKFxcdTAwMjZlc3BpbnRjcDZfcHJvdCwgXFx1MDAyNmVzcGludGNwNl9vcHMsIHNrLVxcdTAwM2Vza19wcm90LCBzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VvcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDgwLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dGNwdjZfcHJvdF9tdXRleCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00ODEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODI6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QgPSBcXHUwMDI2ZXNwaW50Y3A2X3Byb3Q7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODM6XFx0XFx0c2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlb3BzID0gXFx1MDAyNmVzcGludGNwNl9vcHM7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00ODQtXFx0fVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00ODctXFx0Y3R4LVxcdTAwM2VzYXZlZF9kZXN0cnVjdCA9IHNrLVxcdTAwM2Vza19kZXN0cnVjdDtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ4ODpcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSA9IGVzcGludGNwX2RhdGFfcmVhZHk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0ODk6XFx0c2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlID0gZXNwaW50Y3Bfd3JpdGVfc3BhY2U7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTA6XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gZXNwaW50Y3BfZGVzdHJ1Y3Q7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy00OTEtXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGljc2stXFx1MDAzZWljc2tfdWxwX2RhdGEsIGN0eCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0OTI6XFx0SU5JVF9XT1JLKFxcdTAwMjZjdHgtXFx1MDAzZXdvcmssIGVzcGludGNwX3R4X3dvcmspO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNDkzLVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MDU6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDYte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTA3OlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDgtXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTE0LVxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2cXVldWUpKSlcXG5uZXQveGZybS9lc3BpbnRjcC5jOjUxNTpcXHRcXHRlc3BpbnRjcF9wdXNoX3NrYihzaywgc2tiKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTUxNi1cXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTE5LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIwOnN0YXRpYyB2b2lkIGVzcGludGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTIxLXtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjUyMjpcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBlc3BpbnRjcF9nZXRjdHgoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTIzOlxcdHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2cgPSBcXHUwMDI2Y3R4LVxcdTAwM2VwYXJ0aWFsO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTI0LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NDc6c3RhdGljIF9fcG9sbF90IGVzcGludGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDgtXFx0XFx0XFx0ICAgICAgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTUwLVxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTUxOlxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGVzcGludGNwX2dldGN0eChzayk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTItXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTU1NS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjU1NjpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTU3OlxcdFxcdFxcdCBzdHJ1Y3QgcHJvdG9fb3BzICplc3BpbnRjcF9vcHMsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTgtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwcm90byAqb3JpZ19wcm90LFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjAte1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTYxOlxcdG1lbWNweShlc3BpbnRjcF9wcm90LCBvcmlnX3Byb3QsIHNpemVvZihzdHJ1Y3QgcHJvdG8pKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MjpcXHRtZW1jcHkoZXNwaW50Y3Bfb3BzLCBvcmlnX29wcywgc2l6ZW9mKHN0cnVjdCBwcm90b19vcHMpKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2MzpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VzZW5kbXNnID0gZXNwaW50Y3Bfc2VuZG1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NDpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VyZWN2bXNnID0gZXNwaW50Y3BfcmVjdm1zZztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjU2NTpcXHRlc3BpbnRjcF9wcm90LVxcdTAwM2VjbG9zZSA9IGVzcGludGNwX2Nsb3NlO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY2OlxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXJlbGVhc2VfY2IgPSBlc3BpbnRjcF9yZWxlYXNlO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTY3OlxcdGVzcGludGNwX29wcy1cXHUwMDNlcG9sbCA9IGVzcGludGNwX3BvbGw7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NjgtfVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTY5LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTcwOnN0YXRpYyBzdHJ1Y3QgdGNwX3VscF9vcHMgZXNwaW50Y3BfdWxwIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NzE6XFx0Lm5hbWUgPSBcXFwiZXNwaW50Y3BcXFwiLFxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTcyLVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTczOlxcdC5pbml0ID0gZXNwaW50Y3BfaW5pdF9zayxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3NC19O1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc1LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTc2OnZvaWQgX19pbml0IGVzcGludGNwX2luaXQodm9pZClcXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3Ny17XFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1Nzg6XFx0YnVpbGRfcHJvdG9zKFxcdTAwMjZlc3BpbnRjcF9wcm90LCBcXHUwMDI2ZXNwaW50Y3Bfb3BzLCBcXHUwMDI2dGNwX3Byb3QsIFxcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTc5LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTgwOlxcdHRjcF9yZWdpc3Rlcl91bHAoXFx1MDAyNmVzcGludGNwX3VscCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy01ODEtfVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NS0jaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ2OiNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ3LSNlbmRpZlxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDA0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDE0LSNpZmRlZiBDT05GSUdfWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQxNTpcXHRlc3BpbnRjcF9pbml0KCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDE2LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozOTozNi4xMDU1MTgxMDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTc4OTc2MDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIFhGUk1fRVNQSU5UQ1AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFhGUk1fRVNQSU5UQ1BgLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIGZlYXR1cmUgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZShzKSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgbG9naWMgZnJvbSB0aGVyZS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgY2hlY2tpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIG5ldHdvcmtpbmctcmVsYXRlZCBmaWxlcywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gWEZSTSAoSVBzZWMgZnJhbWV3b3JrKS4gSSdtIGhvcGluZyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQsIGJ1dCBJJ20gcHJlcGFyZWQgZm9yIGEgYml0IG9mIGEgaHVudCBpZiBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBYRlJNX0VTUElOVENQYCAqYWN0dWFsbHkqIG1lYW5zIGluIHRlcm1zIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo0MDoxNS44OTUyODA5NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMDgzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fRVNQSU5UQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjQwOjE1Ljk2MjQ5MzY4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODUxOTU0ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgSW1wbGljYXRpb25zIG9mIENPTkZJR19YRlJNX0VTUElOVENQKipcblxuT2theSwgc28gYENPTkZJR19YRlJNX0VTUElOVENQYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB3aGF0J3MgKnVzaW5nKiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgaXQsIGFuZCB0aGUga2VybmVsIG1vZHVsZXMgb3IgYXBwbGljYXRpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSByZWx5IG9uIGl0LiBBIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgc291cmNlIHRyZWVzIGlzIHByb2JhYmx5IHRoZSBmaXJzdCBzdGVwIOKAkyBmaW5kIGFsbCBpbnN0YW5jZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBpbiBgS2NvbmZpZ2AgZmlsZXMsIHRvIHNlZSBob3cgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gSSBleHBlY3QgaXQncyBwYXJ0IG9mIGEgbGFyZ2VyIHNlY3VyaXR5IGZlYXR1cmUgc2V0LCBwcm9iYWJseSByZWxhdGVkIHRvIElQc2VjLlxuXG5JJ20gYXNzdW1pbmcgdGhpcyBlbmFibGVzIHRoZSBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgcHJvdG9jb2wgd2l0aGluIHRoZSBYRlJNIChlWHRlcm5hbCBGaXJld2FsbCBhbmQgUm91dGluZyBNYW5hZ2VtZW50KSBmcmFtZXdvcmssIGJ1dCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIFwiSU5UQ1BcIiBzdWZmaXggc3VnZ2VzdHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVENQIGVuY2Fwc3VsYXRpb24gKndpdGhpbiogRVNQLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjZW5hcmlvcyB3aGVyZSBzdGFuZGFyZCBJUHNlYyB0cmF2ZXJzYWwgbWlnaHQgYmUgcHJvYmxlbWF0aWMg4oCTIHBlcmhhcHMgTkFUIHRyYXZlcnNhbCwgb3IgZW52aXJvbm1lbnRzIHdoZXJlIGRpcmVjdCBVRFAgb3IgR1JFIGVuY2Fwc3VsYXRpb24gaXMgcmVzdHJpY3RlZC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyBuZWNlc3NpdGF0ZSBlbmNhcHN1bGF0aW5nIEVTUCB0cmFmZmljIGluIFRDUC4gSXMgdGhpcyBhIGNvbW1vbiBwcmFjdGljZT8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IEFyZSB0aGVyZSBkb2N1bWVudGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBjb25maWd1cmF0aW9uP1xuXG5NeSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gVENQJ3MgY29ubmVjdGlvbi1vcmllbnRlZCBuYXR1cmUgaW50cm9kdWNlcyBhIGRpZmZlcmVudCBhdHRhY2sgc3VyZmFjZSBjb21wYXJlZCB0byBVRFAuIEFyZSB0aGVyZSBrbm93biB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBUQ1AtZW5jYXBzdWxhdGVkIEVTUCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXhpdGllcyB3aXRoIGZpcmV3YWxscyBvciBpbnRydXNpb24gZGV0ZWN0aW9uIHN5c3RlbXM/IEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIGVuY2Fwc3VsYXRpb24gaXMgaW1wbGVtZW50ZWQuIElzIGl0IGEgc2ltcGxlIFRDUCBzb2NrZXQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIGZvcm0gb2YgcHJvdG9jb2wgbWFuaXB1bGF0aW9uIHdpdGhpbiB0aGUga2VybmVsP1xuXG5GaW5hbGx5LCB0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBpcyBrZXkuIFRoZSBleHRyYSBUQ1AgaGVhZGVyIHdpbGwgYWRkIG92ZXJoZWFkLCBhbmQgdGhlIGtlcm5lbCB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZS4gSSdsbCB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgYmVuY2htYXJrcyBjb21wYXJpbmcgVENQLWVuY2Fwc3VsYXRlZCBFU1AgdG8gb3RoZXIgSVBzZWMgdHJhbnNwb3J0IG1ldGhvZHMsIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgY29uc2lkZXJlZCBuZWNlc3NhcnkuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga25vdyB3aHkgc29tZW9uZSB3b3VsZCBjaG9vc2UgdGhpcywgd2hhdCBpdCBidXlzIHRoZW0sIGFuZCB3aGF0IGl0IGNvc3RzIHRoZW0uIExldCdzIHN0YXJ0IHdpdGggdGhlIGBncmVwYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDA6NTkuODE0NDUxNzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgyMjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgKz0geGZybV9pcHRmcy5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICs9IGVzcGludGNwLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHhmcm1fc3RhdGVfYnBmLm9cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQtI2VuZGlmXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NTojaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2LSNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxMy1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTQ6I2lmZGVmIENPTkZJR19YRlJNX0VTUElOVENQXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDE1LVxcdGVzcGludGNwX2luaXQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDA6NTkuODgyMjgxMDA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NDEyNDY0MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gd2hhdCdzIGxpa2VseSBkcml2aW5nIHRoaXMsIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMzgyLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgSVB2NC1yZWxhdGVkIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBJIHN1c3BlY3QgdGhlIGlzc3VlIGlzIGJ1cmllZCBpbiB0aGVyZSBzb21ld2hlcmUuIFRoZW4sIEnigJlsbCBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgbmV0L2lwdjYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5MC4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aCBJUHY2IHNldHRpbmdzLCBhbmQgaXQncyBhbHdheXMgc21hcnQgdG8gY2hlY2sgYm90aCBzaWRlcyB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBjb25mbGljdGluZyBvciB1bmV4cGVjdGVkbHkgaW50ZXJhY3RpbmcuIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgYmVoYXZpb3IgdGhhdCBoYXMgcGlxdWVkIG15IGludGVyZXN0LiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBrZXJuZWwgaXMgcmVhbGx5IHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjQxOjU2LjI5NDc0ODc4N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNzU6XFx0XFx0ICBTdXBwb3J0IGZvciBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZC4gVGhpcyBtYWtlcyBzZW5zZVxcbiAzNzY6XFx0XFx0ICBvbmx5IGlmIHRoaXMgc3lzdGVtIHJlYWxseSBkb2VzIElQc2VjIGFuZCB3YW50IHRvIGRvIGl0XFxuIDM3NzpcXHRcXHQgIHdpdGggaGlnaCB0aHJvdWdocHV0LiBBIHR5cGljYWwgZGVza3RvcCBzeXN0ZW0gZG9lcyBub3RcXG4gMzc4OlxcdFxcdCAgbmVlZCBpdCwgZXZlbiBpZiBpdCBkb2VzIElQc2VjLlxcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDM4MTpcXHRcXG4gMzgyOlxcdGNvbmZpZyBJTkVUX0VTUElOVENQXFxuIDM4MzpcXHRcXHRib29sIFxcXCJJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuIDM4NDpcXHRcXHRkZXBlbmRzIG9uIFhGUk0gXFx1MDAyNlxcdTAwMjYgSU5FVF9FU1BcXG4gMzg1OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM4NjpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM4NzpcXHRcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbiAzODg6XFx0XFx0aGVscFxcbiAzODk6XFx0XFx0ICBTdXBwb3J0IGZvciBSRkMgODIyOSBlbmNhcHN1bGF0aW9uIG9mIEVTUCBhbmQgSUtFIG92ZXJcXG4gMzkwOlxcdFxcdCAgVENQL0lQdjQgc29ja2V0cy5cXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzOTM6XFx0XFxuIDM5NDpcXHRjb25maWcgSU5FVF9JUENPTVBcXG4gMzk1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXFxcIlxcbiAzOTY6XFx0XFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG4gMzk3OlxcdFxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbiAzOTg6XFx0XFx0aGVscFxcbiAzOTk6XFx0XFx0ICBTdXBwb3J0IGZvciBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sIChJUENvbXApIChSRkMzMTczKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDE6NTYuMjk0ODU4MjM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMjAzNjY0OTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiBjb25maWd1cmF0aW9uIGlzc3VlLiBUaW1lIHRvIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLCBhbmQgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2Ugc29tZSB0aGluZ3MuIExldCdzIG5vdCBqdXN0IHN0YXkgZm9jdXNlZCBvbiBvbmUgZmlsZSwgYnV0IHNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvaXB2Ni9LY29uZmlnYC4gSSBzZWVtIHRvIHJlY2FsbCBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBvciBvcHRpb24gZGVmaW5pdGlvbnMgYXJvdW5kIGxpbmUgOTAgdGhlcmUsIGFuZCB0aGF0IGFyZWEgdXN1YWxseSBjb250YWlucyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBmbGFncyBvciBkZWZhdWx0cywgc28gaXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTGV0IG1lIGp1bXAgdGhlcmUgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo0Mzo1OC4zMzE1MTA2MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxuICA4MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgU3VwcG9ydCBmb3IgRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWQuIFRoaXMgbWFrZXMgc2Vuc2VcXG4gIDg0OlxcdFxcdCAgb25seSBpZiB0aGlzIHN5c3RlbSByZWFsbHkgZG9lcyBJUHNlYyBhbmQgd2FudCB0byBkbyBpdFxcbiAgODU6XFx0XFx0ICB3aXRoIGhpZ2ggdGhyb3VnaHB1dC4gQSB0eXBpY2FsIGRlc2t0b3Agc3lzdGVtIGRvZXMgbm90XFxuICA4NjpcXHRcXHQgIG5lZWQgaXQsIGV2ZW4gaWYgaXQgZG9lcyBJUHNlYy5cXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODk6XFx0XFxuICA5MDpcXHRjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4gIDkxOlxcdFxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbiAgOTI6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElORVQ2X0VTUFxcbiAgOTM6XFx0XFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG4gIDk0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0dcXG4gIDk1OlxcdFxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFN1cHBvcnQgZm9yIFJGQyA4MjI5IGVuY2Fwc3VsYXRpb24gb2YgRVNQIGFuZCBJS0Ugb3ZlclxcbiAgOTg6XFx0XFx0ICBUQ1AvSVB2NiBzb2NrZXRzLlxcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGNvbmZpZyBJTkVUNl9JUENPTVBcXG4gMTAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuIDEwNDpcXHRcXHRzZWxlY3QgSU5FVDZfWEZSTV9UVU5ORUxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDM6NTguMzMxNTc0MjgzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5NjE5OTU3NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24gaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgb2YgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBUaGV5J3JlIGRlcGVuZGVudCBvbiBgWEZSTWAgYW5kIHRoZSByZWd1bGFyIGBJTkVUX0VTUGAvYElORVQ2X0VTUGAgbW9kdWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgd2hlbiBlbmFibGVkLCBgWEZSTV9FU1BJTlRDUGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgZnJvbSBhIHByYWN0aWNhbCBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBzdGFuZHBvaW50LCBpcyB3aGV0aGVyIHRoaXMgY29uZmlndXJhdGlvbiBpcyBldmVuICphY2hpZXZhYmxlKiBpbiBhIHN0YW5kYXJkIHNldHVwLlxuXG5BaCwgeWVzLiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KSAqaXMqIGEgc3RhbmRhcmQgc29ja2V0IFVMUCwgc3BlY2lmaWNhbGx5IGhhbmRsZWQgYnkgYHRjcF9yZWdpc3Rlcl91bHAoXHUwMDI2ZXNwaW50Y3BfdWxwKWAuIFRoaXMgbWVhbnMgdGhhdCBhIHVzZXItc3BhY2UgcHJvZ3JhbSBjYW4gaW5kZWVkIHVzZSBpdCDigJMgaXQgY2FuIGNyZWF0ZSBhIFRDUCBzb2NrZXQgYW5kIHNldCBgVENQX1VMUGAgd2l0aCBcImVzcGludGNwXCIuIFRoYXQgYWxsb3dzIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBFU1Agb3IgSUtFIHBhY2tldHMgb3ZlciBUQ1Agc29ja2V0cywgb3IgZXZlbiB0aHJvdWdoIHhmcm0gbmV0bGluaywgd2hpY2ggaXMgcXVpdGUgZmxleGlibGUuXG5cblNvLCB3aGVuIHRoZSBrZXJuZWwgKnJlY2VpdmVzKiB0aGVzZSBlbmNhcHN1bGF0ZWQgcGFja2V0cywgaXQgZW5kcyB1cCBpbiBgZXNwaW50Y3BfcmN2YCwgd2hpY2ggdGhlbiBjYWxscyBgaGFuZGxlX2VzcGAuIEkgcmVjYWxsIGEgcmVjZW50IHJldmlzaW9uIHdoZXJlIHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24gaGFkIHRoZSBmb2xsb3dpbmcgY29kZTpcbmBgYGNcbnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxue1xuXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuXG5cdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7XG5cdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuXHRcdGtmcmVlX3NrYihza2IpO1xuXHRcdHJldHVybjtcblx0fVxuLi4uXG5gYGBcblRoZSBrZXkgY2hhbmdlIGhlcmUsIG9yIGF0IGxlYXN0IHRoZSBwb2ludCBvZiBpbnRlcmVzdCBmb3IgbWUsIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgLiBJJ20gZ29pbmcgdG8gZGlnIGRlZXBlciBhbmQgcXVpY2tseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCB2YWxpZGF0ZXMgdGhlIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSByZXNldCBvcGVyYXRpb24uIFRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgc2VjdXJpdHkgbWVhc3VyZSBhZ2FpbnN0IHBvdGVudGlhbCBwYWNrZXQgbWFuaXB1bGF0aW9uIG9yIGhlYWRlciBpbmplY3Rpb24uIEtub3dpbmcgdGhpcyBhbGxvd3MgbWUgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCB0byBwb3RlbnRpYWxseSBhc3Nlc3MgdGhlIHN0YWJpbGl0eSBvZiB0aGUgbW9kdWxlIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDU6MjcuOTUxNTM0MjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyNjk1MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMDk2PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTA0LS8qKlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzEwNTogKiBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsIC0gY29uZGl0aW9uYWxseSByZXNldCB0cmFuc3BvcnQgaGVhZGVyXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTA2LSAqIEBza2I6IGJ1ZmZlciB0byBhbHRlclxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zMTEyPXN0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMTM6c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzExNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjQ1OjI5LjQ5NDIzMzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc1NDMyMjExMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uOlxuXG4qKkFuYWx5emluZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEkga25vdyB0aGlzIGlzIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgc28gaXQncyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uLCBsaWtlbHkgbG93LWxldmVsLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgZGV0YWlscyBpbiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24sIGFuZCB3aGVyZSB0aGlzIGlzIGRlZmluZWQgdG8gZ2V0IHRvIGl0cyBjb250ZXh0LiBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQncyB0aGVyZSB0byBwcm90ZWN0IGZyb20gYW4gZWRnZSBjYXNlLCBvciBpZiBpdCBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIFwiY2FyZWZ1bFwiIGlzIGEgZ29vZCBjbHVlIHRoYXQgaXQncyBwcm9iYWJseSBhYm91dCBzYWZldHkgLSBwb3RlbnRpYWxseSBib3VuZGFyeSBjaGVja3Mgb3IgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGNvcnJ1cHRpb24uIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgLSBJIG5lZWQgdG8ga25vdyBob3cgdGhlIG5ldHdvcmsgc3RhY2sgZGVhbHMgd2l0aCB0cmFuc3BvcnQgaGVhZGVyIG1hbmlwdWxhdGlvbiwgYW5kIHdoYXQgc3BlY2lmaWMgc2NlbmFyaW9zIHdhcnJhbnQgdGhpcyBcImNhcmVmdWxcIiBhcHByb2FjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHkgdG8gaWRlbnRpZnkgdGhlIHJpc2tzIGFuZCBkZXNpZ24gYW4gYXBwcm9hY2ggdG8gbWl0aWdhdGUgdGhlbSwgaWYgdGhlcmUgYXJlIGFueS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo0NjoyNy4wMzc0NTcxNjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzEwNCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzEwNDpcXHQvKipcXG4zMTA1OlxcdCAqIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRyYW5zcG9ydCBoZWFkZXJcXG4zMTA2OlxcdCAqIEBza2I6IGJ1ZmZlciB0byBhbHRlclxcbjMxMDc6XFx0ICpcXG4zMTA4OlxcdCAqIEhhcmRlbmVkIHZlcnNpb24gb2Ygc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKS5cXG4zMTA5OlxcdCAqXFxuMzExMDpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gd2FzIGEgc3VjY2Vzcy5cXG4zMTExOlxcdCAqL1xcbjMxMTI6XFx0c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xcbjMxMTM6XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjMxMTQ6XFx0e1xcbjMxMTU6XFx0XFx0bG9uZyBvZmZzZXQgPSBza2ItXFx1MDAzZWRhdGEgLSBza2ItXFx1MDAzZWhlYWQ7XFxuMzExNjpcXHRcXG4zMTE3OlxcdFxcdGlmICh1bmxpa2VseShvZmZzZXQgIT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKW9mZnNldCkpXFxuMzExODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzExOTpcXHRcXG4zMTIwOlxcdFxcdGlmICh1bmxpa2VseShvZmZzZXQgPT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVSkpXFxuMzEyMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzEyMjpcXHRcXG4zMTIzOlxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IG9mZnNldDtcXG4zMTI0OlxcdFxcdHJldHVybiB0cnVlO1xcbjMxMjU6XFx0fVxcbjMxMjY6XFx0XFxuMzEyNzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuMzEyODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IG9mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDY6MjcuMDM3NzE0NzA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDgxOTEwNjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUElOVENQIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlc3NlbnRpYWwgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCB0byB3b3JrIHByb3Blcmx5LiBTaW5jZSB0aGUgY29kZSBtb2RpZmllcyB0aGUgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AsIHRoYXQncyBteSBwcmltYXJ5IGZvY3VzLiBcblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSB3aXRoaW4gdGhhdCBmaWxlLiBJIHF1aWNrbHkgY2hlY2tlZCwgYW5kIEkgc2VlIHRoYXQgYGhhbmRsZV9lc3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIEkgc2hvdWxkIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgb3IgYW55IHBvc3NpYmxlIGVudHJ5IHBvaW50cyBpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuIEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCBtZSBnbyBhaGVhZCBhbmQgZXhhbWluZSBhbGwgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHdpdGggdGhlIGNoYW5nZSB0byBgaGFuZGxlX2VzcGAsIGFuZCBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNpZGUgZWZmZWN0cy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgb3ZlcnZpZXcgb2Ygd2hhdCB0byBsb29rIGZvciBnb2luZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjUyOjMxLjg1NjgyNDQ3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDIxMzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmMtMTEtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjpzdGF0aWMgdm9pZCBoYW5kbGVfbm9uZXNwKHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTEzLVxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yOC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjI5OnN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy02MC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjYxOnN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNjIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xMjAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMjE6c3RhdGljIGludCBlc3BpbnRjcF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTIyLXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMTQxLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTQyOnN0YXRpYyBpbnQgZXNwaW50Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQveGZybS9lc3BpbnRjcC5jLTE0My1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxNzY6aW50IGVzcGludGNwX3F1ZXVlX291dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xNzcte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xODktfVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MTkwOkVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3F1ZXVlX291dCk7XFxubmV0L3hmcm0vZXNwaW50Y3AuYy0xOTEtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5NC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjE5NTpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza2JfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZyxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTE5Ni1cXHRcXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTIxNS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjIxNjpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjE3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGVzcGludGNwX21zZyAqZW1zZywgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDctXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNDg6c3RhdGljIGludCBlc3BpbnRjcF9wdXNoX21zZ3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNDkte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNzYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyNzc6aW50IGVzcGludGNwX3B1c2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI3OC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwOC19XFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDk6RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcHVzaF9za2IpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzEwLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzExOnN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMTIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0zOTU9c3RhdGljIHN0cnVjdCBwcm90b19vcHMgZXNwaW50Y3A2X29wcztcXG5uZXQveGZybS9lc3BpbnRjcC5jOjM5NjpzdGF0aWMgREVGSU5FX01VVEVYKHRjcHY2X3Byb3RfbXV0ZXgpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk3LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6Mzk4OnN0YXRpYyB2b2lkIGVzcGludGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzk5LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA2LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDA3OnN0YXRpYyB2b2lkIGVzcGludGNwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDA4LXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDE4LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDE5OnN0YXRpYyB2b2lkIGVzcGludGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQyMC17XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQyNi1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQyNzpzdGF0aWMgdm9pZCBlc3BpbnRjcF9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00Mjgte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo0MzU6Ym9vbCB0Y3BfaXNfdWxwX2VzcChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzYte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00MzgtfVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NDM5OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9pc191bHBfZXNwKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0MC1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjQ0MTpzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxcbm5ldC94ZnJtL2VzcGludGNwLmMtNDQyLVxcdFxcdFxcdCBzdHJ1Y3QgcHJvdG9fb3BzICplc3BpbnRjcF9vcHMsXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTQ0NC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3JpZ19vcHMpO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NDQ1OnN0YXRpYyBpbnQgZXNwaW50Y3BfaW5pdF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy00NDYte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDQtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MDU6c3RhdGljIHZvaWQgZXNwaW50Y3BfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MDYte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MTktXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1MjA6c3RhdGljIHZvaWQgZXNwaW50Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01MjEte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzo1NDc6c3RhdGljIF9fcG9sbF90IGVzcGludGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NDgtXFx0XFx0XFx0ICAgICAgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTU1LVxcbm5ldC94ZnJtL2VzcGludGNwLmM6NTU2OnN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gKmVzcGludGNwX3Byb3QsXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01NTctXFx0XFx0XFx0IHN0cnVjdCBwcm90b19vcHMgKmVzcGludGNwX29wcyxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NTcwPXN0YXRpYyBzdHJ1Y3QgdGNwX3VscF9vcHMgZXNwaW50Y3BfdWxwIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTU3NS1cXG5uZXQveGZybS9lc3BpbnRjcC5jOjU3Njp2b2lkIF9faW5pdCBlc3BpbnRjcF9pbml0KHZvaWQpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy01Nzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1MjozMy4zNzEwNDU0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ3ODgyMzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUC9UQ1AgVUxQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gSXQgbG9va3MgbGlrZSBgZXNwaW50Y3BfcmN2YCBpcyB0aGUga2V5LCBhbmQgaXQgY2FsbHMgZWl0aGVyIGBoYW5kbGVfZXNwYCBvciBgaGFuZGxlX25vbmVzcGAsIGRlcGVuZGluZyBvbiBzb21ldGhpbmcgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuIFJpZ2h0LCBgZXNwaW50Y3BfcmN2YCBpcyB0aGUgcmVjZWl2ZSBtZXNzYWdlIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBgc3RycGFyc2VyYCB2aWEgdGhhdCBgY2IucmN2X21zZ2AgYXNzaWdubWVudC4gR290IGl0LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaG93IHRoZSBVTFAgc29ja2V0IGl0c2VsZiBpcyBpbml0aWFsaXplZCwgc3BlY2lmaWNhbGx5IGBlc3BpbnRjcF9pbml0X3NrYC5cblxuQmVzaWRlcyB0aGUgYHJjdmAgcGF0aCwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSB0cmFuc21pdCBzaWRlLCBzbyBJJ2xsIGtlZXAgYGVzcGludGNwX3F1ZXVlX291dGAgYW5kIGBlc3BpbnRjcF9wdXNoX3NrYmAgb24gbXkgcmFkYXIsIGFzIHdlbGwgYXMgYHRjcF9pc191bHBfZXNwYC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYGVzcGludGNwX3NlbmRtc2dgIGFuZCBgZXNwaW50Y3BfcmVjdm1zZ2AgYXMgd2VsbC4gVGhlIG1lYXQgb2YgdW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgY29tZSBkb3duIHRvIGEgZGV0YWlsZWQgbG9vayBhdCBgZXNwaW50Y3BfcmN2YCBhbmQgZXNwZWNpYWxseSBgaGFuZGxlX2VzcGAuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTI6NTkuODQ5ODcyNTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuICA2MjpcXHR7XFxuICA2MzpcXHRcXHRzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHggPSBjb250YWluZXJfb2Yoc3RycCwgc3RydWN0IGVzcGludGNwX2N0eCxcXG4gIDY0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnApO1xcbiAgNjU6XFx0XFx0c3RydWN0IHN0cnBfbXNnICpyeG0gPSBzdHJwX21zZyhza2IpO1xcbiAgNjY6XFx0XFx0aW50IGxlbiA9IHJ4bS1cXHUwMDNlZnVsbF9sZW4gLSAyO1xcbiAgNjc6XFx0XFx0dTMyIG5vbmVzcF9tYXJrZXI7XFxuICA2ODpcXHRcXHRpbnQgZXJyO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQvKiBrZWVwYWxpdmUgcGFja2V0PyAqL1xcbiAgNzE6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiA9PSAxKSkge1xcbiAgNzI6XFx0XFx0XFx0dTggZGF0YTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0XFx0ZXJyID0gc2tiX2NvcHlfYml0cyhza2IsIHJ4bS1cXHUwMDNlb2Zmc2V0ICsgMiwgXFx1MDAyNmRhdGEsIDEpO1xcbiAgNzU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gIDc2OlxcdFxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXFx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkhEUkVSUk9SKTtcXG4gIDc3OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNzg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAgNzk6XFx0XFx0XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHRcXHRpZiAoZGF0YSA9PSAweGZmKSB7XFxuICA4MjpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDgzOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gIDg0OlxcdFxcdFxcdH1cXG4gIDg1OlxcdFxcdH1cXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0LyogZHJvcCBvdGhlciBzaG9ydCBtZXNzYWdlcyAqL1xcbiAgODg6XFx0XFx0aWYgKHVubGlrZWx5KGxlbiBcXHUwMDNjPSBzaXplb2Yobm9uZXNwX21hcmtlcikpKSB7XFxuICA4OTpcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzdHJwLVxcdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XFxuICA5MDpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDkxOlxcdFxcdFxcdHJldHVybjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ZXJyID0gc2tiX2NvcHlfYml0cyhza2IsIHJ4bS1cXHUwMDNlb2Zmc2V0ICsgMiwgXFx1MDAyNm5vbmVzcF9tYXJrZXIsXFxuICA5NTpcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKG5vbmVzcF9tYXJrZXIpKTtcXG4gIDk2OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuICA5NzpcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzdHJwLVxcdTAwM2VzayksIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7XFxuICA5ODpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDk5OlxcdFxcdFxcdHJldHVybjtcXG4gMTAwOlxcdFxcdH1cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0LyogcmVtb3ZlIGhlYWRlciwgbGVhdmUgbm9uLUVTUCBtYXJrZXIvU1BJICovXFxuIDEwMzpcXHRcXHRpZiAoIXBza2JfcHVsbChza2IsIHJ4bS1cXHUwMDNlb2Zmc2V0ICsgMikpIHtcXG4gMTA0OlxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXFx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4gMTA1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxMDY6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMDc6XFx0XFx0fVxcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRpZiAocHNrYl90cmltKHNrYiwgcnhtLVxcdTAwM2VmdWxsX2xlbiAtIDIpICE9IDApIHtcXG4gMTEwOlxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHN0cnAtXFx1MDAzZXNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcXG4gMTExOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAxMTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTM6XFx0XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRpZiAobm9uZXNwX21hcmtlciA9PSAwKVxcbiAxMTY6XFx0XFx0XFx0aGFuZGxlX25vbmVzcChjdHgsIHNrYiwgc3RycC1cXHUwMDNlc2spO1xcbiAxMTc6XFx0XFx0ZWxzZVxcbiAxMTg6XFx0XFx0XFx0aGFuZGxlX2VzcChza2IsIHN0cnAtXFx1MDAzZXNrKTtcXG4gMTE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTI6NTkuODUwMDAzNjI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMzExMDMwNzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUElOVENQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaGFuZGxlX2VzcGAgZnVuY3Rpb24sIHdoaWNoIGZyb20gd2hhdCBJIGNhbiBzZWUsIGdldHMgY2FsbGVkIGZyb20gYGVzcGludGNwX3JjdmAuIExldCdzIGNsYXJpZnkgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGhhbmRsZV9lc3BgIGFuZCBmdW5jdGlvbnMgbGlrZSBgZXNwaW50Y3BfcmN2YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYW5kIGBlc3BpbnRjcF9yZWN2bXNnYC5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IG90aGVyIGNvZGUgcGF0aHMgY2FsbCBgaGFuZGxlX2VzcGAgb3IgYW55IG9mIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCBhbGwgZW50cnkgcG9pbnRzLlxuXG5OZXh0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGVzIGluIGBuZXQvaXB2NC9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9rYXksIEkgc2VlIGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYC4gVGhleSBib3RoIGRlcGVuZCBvbiBgWEZSTWAgYW5kIGBJTkVUL0lORVQ2X0VTUGAsIGFuZCB0aGV5IGFsc28gc2VsZWN0IGBTVFJFQU1fUEFSU0VSYCwgYE5FVF9TT0NLX01TR2AsIGFuZCBgWEZSTV9FU1BJTlRDUGAuIEdyZWF0LCB0aGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydC4gSSBjYW4gc2VlIHdoYXQgSSBuZWVkIHRvIGxvb2sgZm9yLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuXG5cbk5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gc2VlIGlmIGBJTkVUX0VTUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgaW4gYG5ldC9pcHY0L0tjb25maWdgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NTowMi45NjAzMTM5NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIyMjcwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRfRVNQXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzUzLVxcbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NTowNC41NTI1NDkzMjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU1OTE3MjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcy4gTGV0J3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgaXQncyBzb21ld2hlcmUgaW4gdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzU0LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBnZXQgdGhhdCBmaWxlIG9wZW4gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGJldCBJIGNhbiBxdWlja2x5IHRyYWNlIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBvbmNlIEkgaGF2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIG9wdGlvbiBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6MTAuMTExNzI0NjI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0Y29uZmlnIElORVRfRVNQXFxuIDM1NTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4gMzU2OlxcdFxcdHNlbGVjdCBYRlJNX0VTUFxcbiAzNTc6XFx0XFx0aGVscFxcbiAzNTg6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHNlYyBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkuXFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdCAgRVNQIGNhbiBiZSB1c2VkIHdpdGggdmFyaW91cyBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zLlxcbiAzNjE6XFx0XFx0ICBCZXNpZGVzIGVuYWJsaW5nIEVTUCBzdXBwb3J0IGl0c2VsZiwgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZ2VuZXJpY1xcbiAzNjI6XFx0XFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlXFxuIDM2MzpcXHRcXHQgIGltcGxlbWVudGVkLiAgSWYgeW91IG5lZWQgYW55IG90aGVyIGFsZ29yaXRobXMsIHlvdSdsbCBuZWVkIHRvIGVuYWJsZVxcbiAzNjQ6XFx0XFx0ICB0aGVtIGluIHRoZSBjcnlwdG8gQVBJLiAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBhY2NlbGVyYXRlZFxcbiAzNjU6XFx0XFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgYW55IG5lZWRlZCBhbGdvcml0aG1zIHdoZW4gYXZhaWxhYmxlLlxcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDM2ODpcXHRcXG4gMzY5OlxcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuIDM3MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbiAzNzE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbiAzNzI6XFx0XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbiAzNzM6XFx0XFx0ZGVmYXVsdCBuXFxuIDM3NDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU1OjEwLjExMTg1MDc1N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTAxMTkxNzIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24uIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byB0aGUgbGlrZWx5IGxvY2F0aW9ucyBmb3IgdGhlc2UgY29uZmlndXJhdGlvbnM6IHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgb3IgcGVyaGFwcyB0aGUgYnJvYWRlciBgbmV0L0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3MgdGhlcmUgdG8gZW5zdXJlIEkgZnVsbHkgZ3Jhc3AgdGhlIHN0YXRlIG9mIFhGUk0gd2l0aGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6MjEuMTIzNzcyMzExWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAzNjczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6MjEuMjY0MTQ0Njc4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NDg2NjkyMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgWEZSTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCAzMCBsaW5lcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgb3B0aW9ucyBhcmUgYmVpbmcgcHJlc2VudGVkIGhlcmUgYXQgdGhlIHRvcC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncyByZWxhdGVkIHRvIFhGUk0g4oCTIHRoZSBjb3JlIG9mIHRoZSBJUHNlYyBhbmQgc2VjdXJpdHkgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbWFpbiBgWEZSTWAgZmVhdHVyZSBlbmFibGUvZGlzYWJsZSBvcHRpb24sIGxpa2VseSBmb2xsb3dlZCBieSBvdGhlciBjb3JlIHBhcmFtZXRlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIG1vZHVsYXJpdHkgb2YgdGhlIFhGUk0gc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgZmVhdHVyZXMgYXJlIGRpcmVjdGx5IGNvbmZpZ3VyYWJsZSBhdCB0aGlzIGxldmVsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSBpcy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgbmV3IGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIGNvcmUgb3B0aW9ucywgYW55dGhpbmcgdGhhdCBtaWdodCBzaWduaWZ5IGEgbmV3IGFwcHJvYWNoIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gaW4gdGhpcyBhcmVhLiBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjaywgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTU6NTcuNzUwODQwMjk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFhGUk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIFhGUk1cXG4gICA2OlxcdFxcdGJvb2xcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBYRlJNX09GRkxPQURcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFhGUk1fQUxHT1xcbiAgMTU6XFx0XFx0dHJpc3RhdGVcXG4gIDE2OlxcdFxcdHNlbGVjdCBYRlJNXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFQURcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxcbiAgMjE6XFx0XFxuICAyMjpcXHRpZiBJTkVUXFxuICAyMzpcXHRjb25maWcgWEZSTV9VU0VSXFxuICAyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4gIDI1OlxcdFxcdHNlbGVjdCBYRlJNX0FMR09cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcbiAgMjg6XFx0XFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU1OjU3Ljc1MDk1MTUwNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE0NzY3NDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBFU1AtaW4tVENQIFZ1bG5lcmFiaWxpdHkgXHUwMDI2IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gb25lcyBhcmUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLCBhbG9uZyB3aXRoIGBYRlJNX0VTUElOVENQYCwgdGhlbiBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBYRlJNYCBhcmUgYWxzbyByZWxldmFudC4gSSd2ZSBnb3QgdGhlbSBsaXN0ZWQ6IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYFhGUk1fRVNQSU5UQ1BgLCBgSU5FVF9FU1BgLCBgSU5FVDZfRVNQYCwgYW5kIGBYRlJNYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IFhGUk0gRVNQIGVuY2Fwc3VsYXRlZCBpbiBUQ1AsIGFkaGVyaW5nIHRvIFJGQyA4MjI5LiBUaGUgcGF0Y2ggaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgIGlzIGltcG9ydGFudCwgaXQgZm9jdXNlcyBvbiBob3cgdGhlIHN5c3RlbSB2YWxpZGF0ZXMgcGFja2V0IHN0cnVjdHVyZSB3aXRoaW4gYGhhbmRsZV9lc3BgIGJ5IHVzaW5nIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgIHdoZW4gcGFyc2luZyBFU1Agd2l0aGluIFRDUCBwYWNrZXRzLiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW52YWxpZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMsIHdoaWNoIHRoZSBwYXRjaCBhZGRyZXNzZXMuIFRoaXMgbG9naWMgaXMgZWFzaWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zOyBJIGNhbiBzZXQgdGhlIFRDUCBVTFAgdG8gYGVzcGludGNwYCBhbmQgcmVjZWl2ZSBwYWNrZXRzLCBzbyB0aGlzIGlzIHZhbGlkIGZvciBib3RoIHZpcnR1YWxpemVkIGFuZCBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSBzZWUgYGhhbmRsZV9lc3BgLCBgZXNwaW50Y3BfcmN2YCwgYGVzcGludGNwX3F1ZXVlX291dGAsIGBlc3BpbnRjcF9wdXNoX3NrYmAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYW5kIGBlc3BpbnRjcF9yZWN2bXNnYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvZiB0aGUga2V5IGZ1bmN0aW9ucyBjb3VsZCBiZSBpbmxpbmVkLiBgaGFuZGxlX2VzcGAgaXMgc3RhdGljLCBgZXNwaW50Y3BfcmN2YCBpcyBhbHNvIHN0YXRpYyAoYXNzaWduZWQgYXMgY2FsbGJhY2sgdG8gYHN0cnBfY2FsbGJhY2tzYCksIGBlc3BpbnRjcF9xdWV1ZV9vdXRgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQsIGBlc3BpbnRjcF9wdXNoX3NrYmAgaXMgbm9uLXN0YXRpYyBleHBvcnRlZCwgYGVzcGludGNwX3NlbmRtc2dgIGlzIHN0YXRpYyAoYXNzaWduZWQgaW4gcHJvdG8pLCBgZXNwaW50Y3BfcmVjdm1zZ2AgaXMgc3RhdGljIChhc3NpZ25lZCBpbiBwcm90byksIGFuZCBgdGNwX2lzX3VscF9lc3BgIGlzIG5vbi1zdGF0aWMgZXhwb3J0ZWQuIE5vdyBJIGhhdmUgbXkgYEZvY3VzU3ltYm9sc2A6IGBbXCJoYW5kbGVfZXNwXCIsIFwiZXNwaW50Y3BfcmN2XCIsIFwiZXNwaW50Y3BfcXVldWVfb3V0XCIsIFwiZXNwaW50Y3BfcHVzaF9za2JcIiwgXCJlc3BpbnRjcF9zZW5kbXNnXCIsIFwiZXNwaW50Y3BfcmVjdm1zZ1wiXWAuXG5cbk9rYXksIEkgbmVlZCB0byBzdHJ1Y3R1cmUgbXkgYHNldC1yZXN1bHRzYCBjYWxsOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWVcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBpbmNvbWluZyBFU1AtaW4tVENQIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIHdpdGhpbiBgaGFuZGxlX2VzcGAgYnkgaW5jb3Jwb3JhdGluZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIFRoaXMgZW5zdXJlcyBzYWZlciBwcm9jZXNzaW5nIG9mIGludmFsaWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzLiBUaGlzIGRpcmVjdCBpbXBhY3Qgb24gbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IG9uIFRDUCBzb2NrZXRzIHdpdGggdGhlIEVTUElOVENQIFVMUCBlbmFibGVkLCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJJTkVUX0VTUElOVENQXCIsIFwiSU5FVDZfRVNQSU5UQ1BcIiwgXCJYRlJNX0VTUElOVENQXCIsIFwiSU5FVF9FU1BcIiwgXCJJTkVUNl9FU1BcIiwgXCJYRlJNXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiaGFuZGxlX2VzcFwiLCBcImVzcGludGNwX3JjdlwiLCBcImVzcGludGNwX3F1ZXVlX291dFwiLCBcImVzcGludGNwX3B1c2hfc2tiXCIsIFwiZXNwaW50Y3Bfc2VuZG1zZ1wiLCBcImVzcGludGNwX3JlY3Ztc2dcIl1gXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwOCwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoxNC44OTg2Mjk3MzRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMTI5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX0VTUElOVENQXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJYRlJNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJlc3BpbnRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX0VTUElOVENQXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJYRlJNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJlc3BpbnRjcF9xdWV1ZV9vdXRcIixcbiAgICBcImVzcGludGNwX3B1c2hfc2tiXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJlc3BpbnRjcF9yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5jb21pbmcgRVNQIHBhY2tldCBwcm9jZXNzaW5nIGluIG5ldC94ZnJtL2VzcGludGNwLmMgYnkgdXNpbmcgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgYmVmb3JlIHJlc2V0dGluZyB0aGVtIGluIGhhbmRsZV9lc3AoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBmb3IgUkZDIDgyMjkgRVNQLWluLVRDUCBlbmNhcHN1bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoxNS4wNTk2NDkxMjJaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI5ODE4OTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU2OjE1LjA2MDEzMTYyMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NzI5NzcwMzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKClgIHdpdGggYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgaW4gYGhhbmRsZV9lc3AoKWAgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gVGhpcyBjaGFuZ2UgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGN1bGF0ZWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgKGBza2ItXFx1MDAzZWRhdGEgLSBza2ItXFx1MDAzZWhlYWRgKSBmaXRzIHNhZmVseSBpbnRvIHRoZSBgdHJhbnNwb3J0X2hlYWRlcmAgZmllbGQgd2l0aG91dCB0cnVuY2F0aW9uIG9yIG92ZXJmbG93OyBpZiBpbnZhbGlkLCBpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudGVyLlxcblxcblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4NjY4NWZlZmNjMTBhOWFkODAwMzM4Mzk1MjM3ODA2OTJlMWEwOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNjozNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgKzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXHUwMDNlY2I7XG4gXG4tXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbitcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoxNS4wNjAxMzI2NDJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTcwNTkwNjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVTUGluVENQIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoLCBzbyBteSBmaXJzdCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGNvZGUgaXQncyB0b3VjaGluZy4gQWgsIGBuZXQveGZybS9lc3BpbnRjcC5jYCDigJMgdGhhdOKAmXMgdGhlIHRhcmdldC4gTm93LCBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzLiBUaW1lIHRvIGVtcGxveSBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdCB0aGF0IGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMCwgdG8gc2VlIHRoZSBkaXJlY3QgaW1wYWN0IG9mIHRoZSBwYXRjaC4gS25vd2luZyBwcmVjaXNlbHkgd2hhdCdzIGJlZW4gYWx0ZXJlZCBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIGFuZCBhY2N1cmF0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjoyNC43NjYwNDE5NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zdHJwYXJzZXIuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9lc3AuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZXNwaW50Y3AuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za21zZy5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2hvdGRhdGEuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAxMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzaylcXG4gIDE0OlxcdHtcXG4gIDE1OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JtZW1fYWxsb2MpIFxcdTAwM2U9IHNrLVxcdTAwM2Vza19yY3ZidWYgfHxcXG4gIDE2OlxcdFxcdCAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCBza2ItXFx1MDAzZXRydWVzaXplKSkge1xcbiAgMTc6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMTg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAxOTpcXHRcXHRcXHRyZXR1cm47XFxuICAyMDpcXHRcXHR9XFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuICAyNTpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Y3R4LVxcdTAwM2Vpa2VfcXVldWUsIHNrYik7XFxuICAyNjpcXHRcXHRjdHgtXFx1MDAzZXNhdmVkX2RhdGFfcmVhZHkoc2spO1xcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHRzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4gIDMwOlxcdHtcXG4gIDMxOlxcdFxcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXFx1MDAzZWNiO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbiAgMzQ6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgMzU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAzNjpcXHRcXHRcXHRyZXR1cm47XFxuICAzNzpcXHRcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXFx1MDAzZW5ob2ZmICovXFxuICA0MDpcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlY2IsIFxcdTAwMjZ0Y3BfY2ItXFx1MDAzZWhlYWRlciwgc2l6ZW9mKHRjcF9jYi1cXHUwMDNlaGVhZGVyKSk7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gIDQzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3Uoc29ja19uZXQoc2spLCBza2ItXFx1MDAzZXNrYl9paWYpO1xcbiAgNDQ6XFx0XFx0aWYgKCFza2ItXFx1MDAzZWRldikge1xcbiAgNDU6XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcbiAgNDY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA0NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDQ4OlxcdFxcdH1cXG4gIDQ5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDUwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiAgNTE6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA1MjpcXHRcXHRcXHR4ZnJtNl9yY3ZfZW5jYXAoc2tiLCBJUFBST1RPX0VTUCwgMCwgVENQX0VOQ0FQX0VTUElOVENQKTtcXG4gIDUzOlxcdFxcdGVsc2VcXG4gIDU0OlxcdCNlbmRpZlxcbiAgNTU6XFx0XFx0XFx0eGZybTRfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIFRDUF9FTkNBUF9FU1BJTlRDUCk7XFxuICA1NjpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDU3OlxcdG91dDpcXG4gIDU4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAgNTk6XFx0fVxcbiAgNjA6XFx0XFxuICA2MTpcXHRzdGF0aWMgdm9pZCBlc3BpbnRjcF9yY3Yoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihzdHJwLCBzdHJ1Y3QgZXNwaW50Y3BfY3R4LFxcbiAgNjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RycCk7XFxuICA2NTpcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IHN0cnBfbXNnKHNrYik7XFxuICA2NjpcXHRcXHRpbnQgbGVuID0gcnhtLVxcdTAwM2VmdWxsX2xlbiAtIDI7XFxuICA2NzpcXHRcXHR1MzIgbm9uZXNwX21hcmtlcjtcXG4gIDY4OlxcdFxcdGludCBlcnI7XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdC8qIGtlZXBhbGl2ZSBwYWNrZXQ/ICovXFxuICA3MTpcXHRcXHRpZiAodW5saWtlbHkobGVuID09IDEpKSB7XFxuICA3MjpcXHRcXHRcXHR1OCBkYXRhO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHRlcnIgPSBza2JfY29weV9iaXRzKHNrYiwgcnhtLVxcdTAwM2VvZmZzZXQgKyAyLCBcXHUwMDI2ZGF0YSwgMSk7XFxuICA3NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgNzY6XFx0XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc3RycC1cXHUwMDNlc2spLCBMSU5VWF9NSUJfWEZSTUlOSERSRVJST1IpO1xcbiAgNzc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3ODpcXHRcXHRcXHRcXHRyZXR1cm47XFxuICA3OTpcXHRcXHRcXHR9XFxuICA4MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NTY6MjQuNzY2MTM2NzkxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4Nzc0Mjg1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEdpdmVuIG15IGxldmVsIG9mIGV4cGVydGlzZSwganVzdCByZWFkaW5nIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGxpa2VseSB3b24ndCBiZSBlbm91Z2guIEkgbmVlZCBhIG1vcmUgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nLCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3MgYmVpbmcgdXNlZCBhbmQgKmhvdyogaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFRoZXJlZm9yZSwgbGV0J3Mgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBjb2RlIHNlYXJjaC4gSSdsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBzZWFyY2ggZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0IGZ1bmN0aW9uIG5hbWUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbGlzdCBvZiBjYWxsc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU2OjMzLjY0MzU2ODUyMloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5MTY2Mjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MzA5Nj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzEwNC0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxMDU6ICogc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdHJhbnNwb3J0IGhlYWRlclxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzEwNi0gKiBAc2tiOiBidWZmZXIgdG8gYWx0ZXJcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzExMj1zdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozMTEzOnNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxMTQte1xcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz05MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTMxLVxcdGlmIChsaWtlbHkob3BzIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSkge1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MTMyOlxcdFxcdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMTMzLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yOT1zdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMzItXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozMzpcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzQtXFx0XFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NjozNy40MzUyNDI2MzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAxODI4NjUwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gc2tidWZmLmggLSBMaW5lIDMxMDQqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBhbmQgemVybyBpbiBhcm91bmQgbGluZSAzMTA0LiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhhdCBhcmVhIGJlY2F1c2XigKYgKltwYXVzZXMsIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IHdpdGhvdXQgZXhwbGljaXRseSBzdGF0aW5nIGl0LCBhc3N1bWluZyB0aGUgZXhwZXJ0IHdvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpZWQgcmVhc29uaW5nIGJhc2VkIG9uIHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlcl0qIOKApkkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCB0aGVyZSB0b+KApiAqW0FnYWluLCBhc3N1bWluZyB0aGUgZXhwZXJ0J3Mga25vd2xlZGdlIHdpbGwgYWxsb3cgdGhlbSB0byBmaWxsIGluIHRoZSBibGFuayBiYXNlZCBvbiB0aGVpciBiYWNrZ3JvdW5kXSog4oCmcGVyaGFwcyByZWxhdGVkIHRvIHRoZSBwb3RlbnRpYWwgaXNzdWUgSSdtIHRyYWNraW5nIGRvd24uIExpbmUgMzEwNCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIGFuZCBmcm9tIG1lbW9yeSwgaXQncyBwcm9iYWJseSBoYW5kbGluZ+KApiAqW2JyaWVmIHBhdXNlXSog4oCmc29tZXRoaW5nIGFyb3VuZOKApiAqW3BhdXNlcywgY29uc2lkZXJpbmcgZXhhY3QgZGV0YWlscywgcGVyaGFwcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWNrZXQgaGVhZGVycywgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBtYWNyb10q4oCmIFllcywgdGhhdCdzIHJpZ2h0LiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBhY3R1YWwgY29kZSBzYXlzIHRvIGNvbmZpcm0gbXkgbGluZSBvZiB0aG91Z2h0LiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IHdvcmtpbmcgaHlwb3RoZXNpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDMzOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU3OjA3LjYxODEwOTU5N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMDk1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDk1OlxcdFxcbjMwOTY6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXFxuMzA5NzpcXHR7XFxuMzA5ODpcXHRcXHRsb25nIG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZDtcXG4zMDk5OlxcdFxcbjMxMDA6XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShvZmZzZXQgIT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKW9mZnNldCk7XFxuMzEwMTpcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBvZmZzZXQ7XFxuMzEwMjpcXHR9XFxuMzEwMzpcXHRcXG4zMTA0OlxcdC8qKlxcbjMxMDU6XFx0ICogc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdHJhbnNwb3J0IGhlYWRlclxcbjMxMDY6XFx0ICogQHNrYjogYnVmZmVyIHRvIGFsdGVyXFxuMzEwNzpcXHQgKlxcbjMxMDg6XFx0ICogSGFyZGVuZWQgdmVyc2lvbiBvZiBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcigpLlxcbjMxMDk6XFx0ICpcXG4zMTEwOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBzdWNjZXNzLlxcbjMxMTE6XFx0ICovXFxuMzExMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXFxuMzExMzpcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IpXFxuMzExNDpcXHR7XFxuMzExNTpcXHRcXHRsb25nIG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZDtcXG4zMTE2OlxcdFxcbjMxMTc6XFx0XFx0aWYgKHVubGlrZWx5KG9mZnNldCAhPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpb2Zmc2V0KSlcXG4zMTE4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4zMTE5OlxcdFxcbjMxMjA6XFx0XFx0aWYgKHVubGlrZWx5KG9mZnNldCA9PSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVKSlcXG4zMTIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4zMTIyOlxcdFxcbjMxMjM6XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gb2Zmc2V0O1xcbjMxMjQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuMzEyNTpcXHR9XFxuMzEyNjpcXHRcXG4zMTI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4zMTI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxcbjMxMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjo1NzowNy42MTgzMDM1NjhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0NzM5NTEwMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVNQL1RDUCBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5ldC94ZnJtL2VzcGludGNwLmNgIHBhdGNoIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBgaGFuZGxlX2VzcCgpYCBmdW5jdGlvbiB3YXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byB0cmFuc3BvcnQgaGVhZGVyIG92ZXJmbG93cyBkdWUgdG8gYSBjYWxsIHRvIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpYC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdHJ1bmNhdGVkIG9mZnNldCBpZiB0aGUgYG9mZnNldGAgZXhjZWVkZWQgdGhlIHNpemUgb2YgYHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyYC4gVGhlIGZpeCByZXBsYWNlcyBpdCB3aXRoIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYW5kIHRoZSBzdWJzZXF1ZW50IGFjdGlvbjogaWYgdGhlIG9mZnNldCBpcyB0b28gbGFyZ2UgKG9yIGB+MFVgKSwgdGhlIGBza2JgIGlzIGRyb3BwZWQsIGFuZCBhbiBlcnJvciBzdGF0aXN0aWMgaXMgaW5jcmVtZW50ZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYWx3YXlzIGhhdmUgdG8gYmUgdmVyeSByaWdvcm91cyB3aGVuIGNvbnNpZGVyaW5nIGEgY2hhbmdlIGxpa2UgdGhpcy4gTGV0J3Mgc2VlLi4uXG5cbjEuICAqKktlcm5lbCB0byBVc2VyIFNwYWNlIERhdGEgTGVha3M6KiogTm8uIFRoZSBjb2RlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHNlbmRpbmcgYW55IGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGRhdGEgdG8gdXNlcnNwYWNlLCBzbyBpbmZvcm1hdGlvbiBsZWFrcyBhcmVuJ3QgYSBjb25jZXJuLiBUaGVyZSBpcyBubyBgY29weV90b191c2VyYCBvciBhbnkgc2ltaWxhciBvcGVyYXRpb25zIGhlcmUuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlcy9GaWVsZHM6KiogTm9wZS4gSSBzZWUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGZpZWxkcyB3aXRoaW4gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4zLiAgKipDb21wbGV4IEFsbG9jYXRpb25zOioqIE5vdCBoZXJlLiBUaGUgZml4IGRvZXNuJ3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIG9yIG1hbmlwdWxhdGlvbiB0aGF0IG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkuXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBDcnVjaWFsbHksIHRoaXMgaXMgYSAqYm91bmRzIGNoZWNrKiBpbiB0aGUgdHJ1ZXN0IHNlbnNlLiBUaGUgY2hlY2sgaXMgc3BlY2lmaWNhbGx5IGhhcmRlbmluZyBhZ2FpbnN0ICpvdmVyZmxvdyogYW5kICp0cnVuY2F0aW9uKiBvZiBgc2tiYCBvZmZzZXRzLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0J3MgcHJldmVudGluZyB1cyBmcm9tIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIHRoZSBvZmZzZXQgaXMgaW52YWxpZCwgdGhlIHBhY2tldCBpcyBzaW1wbHkgZnJlZWQuIEFueSBvdXQtb2YtYm91bmRzIGFjY2VzcyB0aGF0IHRoaXMgY2hlY2sgaXMgcHJldmVudGluZyBvciBjYXRjaGluZyBmYWxscyB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiBvciBERUJVR19ORVQgKGlmIGVuYWJsZWQpLlxuXG5JbiBzaG9ydCwgdGhpcyBpcyBhICpoYXJkZW5pbmcqIGZpeCDigJMgc3BlY2lmaWNhbGx5IGZvciBwb3RlbnRpYWwgYHNrYmAgdHJhbnNwb3J0IGhlYWRlciBvdmVyZmxvdy9ib3VuZHMgaXNzdWVzLiBJdCBkb2Vzbid0IGludHJvZHVjZSAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrczsgaW5zdGVhZCwgaXQgcHJvYWN0aXZlbHkgKnByZXZlbnRzKiB0aGVtIGJ5IGRyb3BwaW5nIHRoZSBvZmZlbmRpbmcgcGFja2V0LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgcmVhZHMgb2YgdW5pdGl0aWFsaXplZCBtZW1vcnksIGFuZCBzaW5jZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSB0aGF0LCBpdCBpc24ndCByZWxldmFudC4gVGhpcyBpcyBhbiBvdmVyZmxvdy90cnVuY2F0aW9uIGhhcmRlbmluZyBjaGVjay4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGJ1Z2d5LCBhbmQgdGhpcyBjaGVja3MsIHByZXZlbnRpbmcgdGhlIGJ1Zy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBUaGlzIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ2LCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjU5OjAyLjM1NzgxNjU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoKWAgd2l0aCBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCBpbiBgaGFuZGxlX2VzcCgpYCB3aXRoaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBUaGlzIGNoYW5nZSBjaGVja3Mgd2hldGhlciB0aGUgY2FsY3VsYXRlZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldCAoYHNrYi1cXHUwMDNlZGF0YSAtIHNrYi1cXHUwMDNlaGVhZGApIGZpdHMgc2FmZWx5IGludG8gdGhlIGB0cmFuc3BvcnRfaGVhZGVyYCBmaWVsZCB3aXRob3V0IHRydW5jYXRpb24gb3Igb3ZlcmZsb3c7IGlmIGludmFsaWQsIGl0IGRyb3BzIHRoZSBwYWNrZXQgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50ZXIuXFxuXFxuVGhpcyBpcyBhIGJvdW5kcy9vdmVyZmxvdyB2YWxpZGF0aW9uIGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgY29ycnVwdGVkIHNrYiBoZWFkZXIgb2Zmc2V0cyAod2hpY2ggbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGFzc2VydGlvbiBmYWlsdXJlcyBjYXVnaHQgYnkgS0FTQU4vREVCVUdfTkVUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKClgIHdpdGggYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgaW4gYGhhbmRsZV9lc3AoKWAgd2l0aGluIGBuZXQveGZybS9lc3BpbnRjcC5jYC4gVGhpcyBjaGFuZ2UgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGN1bGF0ZWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXQgKGBza2ItXFx1MDAzZWRhdGEgLSBza2ItXFx1MDAzZWhlYWRgKSBmaXRzIHNhZmVseSBpbnRvIHRoZSBgdHJhbnNwb3J0X2hlYWRlcmAgZmllbGQgd2l0aG91dCB0cnVuY2F0aW9uIG9yIG92ZXJmbG93OyBpZiBpbnZhbGlkLCBpdCBkcm9wcyB0aGUgcGFja2V0IGFuZCBpbmNyZW1lbnRzIHRoZSBlcnJvciBjb3VudGVyLlxcblxcblRoaXMgaXMgYSBib3VuZHMvb3ZlcmZsb3cgdmFsaWRhdGlvbiBmaXggYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIGNvcnJ1cHRlZCBza2IgaGVhZGVyIG9mZnNldHMgKHdoaWNoIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBhc3NlcnRpb24gZmFpbHVyZXMgY2F1Z2h0IGJ5IEtBU0FOL0RFQlVHX05FVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[1] Phase: Succeeded StartedAt: 2026-08-29 16:59:39 +0000 UTC FinishedAt: 2026-08-29 16:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 16:59:39 +0000 UTC FinishedAt: 2026-08-29 16:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2] Phase: Succeeded StartedAt: 2026-08-29 16:59:39 +0000 UTC FinishedAt: 2026-08-29 20:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 16:59:39 +0000 UTC FinishedAt: 2026-08-29 20:37:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","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-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 16:59:39 +0000 UTC FinishedAt: 2026-08-29 16:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 16:59:39 +0000 UTC FinishedAt: 2026-08-29 16:59:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"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-workflow87qgf/series-workflow87qgf-convert-artifact-928753811/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 16:59:49 +0000 UTC FinishedAt: 2026-08-29 17:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 16:59:49 +0000 UTC FinishedAt: 2026-08-29 17:16:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*04ca6300-5e5c-409e-a157-7a366dceb4aa,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-workflow87qgf/series-workflow87qgf-convert-artifact-928753811/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": "6a4c6101-7d87-46de-ab52-1a042fc54042", "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-workflow87qgf/series-workflow87qgf-build-action-78628289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 16:59:49 +0000 UTC FinishedAt: 2026-08-29 17:16:34 +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:*04ca6300-5e5c-409e-a157-7a366dceb4aa,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-workflow87qgf/series-workflow87qgf-convert-artifact-928753811/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": "6a4c6101-7d87-46de-ab52-1a042fc54042", "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-workflow87qgf/series-workflow87qgf-build-action-78628289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 17:16:44 +0000 UTC FinishedAt: 2026-08-29 17:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 17:16:44 +0000 UTC FinishedAt: 2026-08-29 17:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 17:16:44 +0000 UTC FinishedAt: 2026-08-29 17:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 17:16:44 +0000 UTC FinishedAt: 2026-08-29 17:16:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","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-workflow87qgf/series-workflow87qgf-convert-artifact-1148436618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 17:16:54 +0000 UTC FinishedAt: 2026-08-29 17:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 17:16:54 +0000 UTC FinishedAt: 2026-08-29 17:18:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a4c6101-7d87-46de-ab52-1a042fc54042,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-workflow87qgf/series-workflow87qgf-build-action-78628289/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-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 17:18:41 +0000 UTC FinishedAt: 2026-08-29 17:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 17:18:41 +0000 UTC FinishedAt: 2026-08-29 17:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 17:18:41 +0000 UTC FinishedAt: 2026-08-29 17:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 17:18:41 +0000 UTC FinishedAt: 2026-08-29 17:34:37 +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:*04ca6300-5e5c-409e-a157-7a366dceb4aa,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-workflow87qgf/series-workflow87qgf-convert-artifact-1148436618/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": "47294ec3-851c-4b4d-98e9-5d7455b52156", "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-workflow87qgf/series-workflow87qgf-build-action-1337130670/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 17:18:41 +0000 UTC FinishedAt: 2026-08-29 17:34:27 +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:*04ca6300-5e5c-409e-a157-7a366dceb4aa,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-workflow87qgf/series-workflow87qgf-convert-artifact-1148436618/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": "47294ec3-851c-4b4d-98e9-5d7455b52156", "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-workflow87qgf/series-workflow87qgf-build-action-1337130670/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 17:34:37 +0000 UTC FinishedAt: 2026-08-29 17:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 17:34:37 +0000 UTC FinishedAt: 2026-08-29 17:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 17:34:37 +0000 UTC FinishedAt: 2026-08-29 17:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 17:34:37 +0000 UTC FinishedAt: 2026-08-29 17:36:11 +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:*47294ec3-851c-4b4d-98e9-5d7455b52156,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-workflow87qgf/series-workflow87qgf-build-action-1337130670/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-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 20:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 20:37:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"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:*6a4c6101-7d87-46de-ab52-1a042fc54042,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47294ec3-851c-4b4d-98e9-5d7455b52156,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-workflow87qgf/series-workflow87qgf-build-action-78628289/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-workflow87qgf/series-workflow87qgf-build-action-1337130670/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 17:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 17:36:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"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-workflow87qgf/series-workflow87qgf-convert-artifact-2320080671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 17:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 17:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 17:36:15 +0000 UTC FinishedAt: 2026-08-29 17:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 17:36:25 +0000 UTC FinishedAt: 2026-08-29 20:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87qgf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["handle_esp","espintcp_rcv","espintcp_queue_out","espintcp_push_skb","espintcp_sendmsg","espintcp_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","XFRM_ESPINTCP","INET_ESP","INET6_ESP","XFRM"],"series_id":"e865d64e-bf97-4444-bb00-9df41f311cb8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 17:36:25 +0000 UTC FinishedAt: 2026-08-29 20:37:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a4c6101-7d87-46de-ab52-1a042fc54042,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*47294ec3-851c-4b4d-98e9-5d7455b52156,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-workflow87qgf/series-workflow87qgf-build-action-78628289/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-workflow87qgf/series-workflow87qgf-build-action-1337130670/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-workflow87qgf/series-workflow87qgf-convert-artifact-2320080671/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,}