Name: series-workflownzblr Phase: Succeeded StartedAt: 2026-09-08 09:11:34 +0000 UTC FinishedAt: 2026-09-08 13:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[0] Phase: Succeeded StartedAt: 2026-09-08 09:11:34 +0000 UTC FinishedAt: 2026-09-08 09:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 09:11:34 +0000 UTC FinishedAt: 2026-09-08 09:41:28 +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": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPPOATM", "ATM", "PPP", "NETDEVICES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPPOATM", "ATM", "PPP", "NETDEVICES" ], "series_id": "626bfae5-b417-4297-ac88-3d03e373db5c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pppoatm_send", "pppoatm_assign_vcc", "pppoatm_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtORVRERVZJQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBwcHBvYXRtX3NlbmQgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2JfcmVhbGxvY19oZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBza2JfY293X2hlYWQuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBQUFAgb3ZlciBBVE0gZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBhbmQgaW9jdGwgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIyM2Q3MjhlZTcwMjEyMTBiOTJhODgzODE4MDc2ZjcyMTA3YTJjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjQwOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjRjZTdmYTZlNDkzZTkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zMTcsMjEgJiM0MzszMTcsMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiYjNDM7XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuJiM0MztcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4gXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBPQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7TkVUREVWSUNFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMjNkNzI4ZWU3MDIxMjEwYjkyYTg4MzgxODA3NmY3MjEwN2EyY2IyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwOTo0MDoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uNGNlN2ZhNmU0OTNlOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTMxNywyMSAmIzQzOzMxNywxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCiAJY2FzZSBlX2xsYzoKLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgTExDX0xFTikgewotCQkJc3RydWN0IHNrX2J1ZmYgKm47Ci0JCQluID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTsKLQkJCWlmIChuICE9IE5VTEwgJmFtcDsmYW1wOwotCQkJICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tJmd0O3RydWVzaXplKSkgewotCQkJCWtmcmVlX3NrYihuKTsKLQkJCQlnb3RvIG5vc3BhY2U7Ci0JCQl9Ci0JCQljb25zdW1lX3NrYihza2IpOwotCQkJc2tiID0gbjsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCWJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTsKLQkJCQlyZXR1cm4gRFJPUF9QQUNLRVQ7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLSZndDt0cnVlc2l6ZSkpCiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHsKJiM0MzsJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwkJfQomIzQzOwkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQogCQkJZ290byBub3NwYWNlOwogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjgKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyB0b3VjaGVkIGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQVRNIG92ZXIgUFBQb0UsIHNwZWNpZmljYWxseSB0aGUgc2VuZGluZyBwYXRoLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLgoKRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcHBvYXRtX3NlbmRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBQUFBvQS9QUFBvRSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHJlYWRpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYCBkaXJlY3RseSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhlbiBtYWtlIGEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgZmlsZSB0byBzZWUgdGhlIGJ1aWxkIG9wdGlvbnMuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBkbyB0aGF0LCBhbmQgbWlnaHQgdXNlIGBncmVwcGVyYCBvciBjaGVjayBgbmV0L2F0bS9LY29uZmlnYCB0byBwaW5wb2ludCBhbnl0aGluZyByZWxldmFudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XHR2Y2MgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjO1xuIDMwMTpcdFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMDI6XHRcdGlmIChzb2NrX293bmVkX2J5X3VzZXIoc2tfYXRtKHZjYykpKSB7XG4gMzAzOlx0XHRcdC8qXG4gMzA0Olx0XHRcdCAqIE5lZWRzIHRvIGhhcHBlbiAoYW5kIGJlIGZsdXNoZWQsIGhlbmNlIHRlc3RfYW5kXykgYmVmb3JlIHdlIHVubG9ja1xuIDMwNTpcdFx0XHQgKiB0aGUgc29ja2V0LiBJdCBuZWVkcyB0byBiZSBzZWVuIGJ5IHRoZSB0aW1lIG91ciAtXHUwMDNlcmVsZWFzZV9jYiBnZXRzXG4gMzA2Olx0XHRcdCAqIGNhbGxlZC5cbiAzMDc6XHRcdFx0ICovXG4gMzA4Olx0XHRcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXHUwMDI2cHZjYy1cdTAwM2VibG9ja2VkKTtcbiAzMDk6XHRcdFx0Z290byBub3NwYWNlO1xuIDMxMDpcdFx0fVxuIDMxMTpcdFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSB8fFxuIDMxMjpcdFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAzMTM6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMxNDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMTU6XHRcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuIDMxNjpcdFx0fVxuIDMxNzpcdFxuIDMxODpcdFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiAzMTk6XHRcdGNhc2UgZV9sbGM6XG4gMzIwOlx0XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuIDMyMTpcdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMjI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMjM6XHRcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzI0Olx0XHRcdH1cbiAzMjU6XHRcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4gMzI2Olx0XHRcdFx0Z290byBub3NwYWNlO1xuIDMyNzpcdFx0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHRjYXNlIGVfdmM6XG4gMzMwOlx0XHRcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXHUwMDNldHJ1ZXNpemUpKVxuIDMzMTpcdFx0XHRcdGdvdG8gbm9zcGFjZTtcbiAzMzI6XHRcdFx0YnJlYWs7XG4gMzMzOlx0XHRjYXNlIGVfYXV0b2RldGVjdDpcbiAzMzQ6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMzNTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcblwmIzM0Oyk7XG4gMzM2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMzNzpcdFx0XHRyZXR1cm4gMTtcbiAzMzg6XHRcdH1cbiAzMzk6XHRcbiAzNDA6XHRcdGF0bV9hY2NvdW50X3R4KHZjYywgc2tiKTtcbiAzNDE6XHRcdHByX2RlYnVnKFwmIzM0O2F0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwmIzM0OyxcbiAzNDI6XHRcdFx0IHNrYiwgQVRNX1NLQihza2IpLVx1MDAzZXZjYywgQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VkZXYpO1xuIDM0MzpcdFx0cmV0ID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VzZW5kKEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MsIHNrYilcbiAzNDQ6XHRcdCAgICA/IERST1BfUEFDS0VUIDogMTtcbiAzNDU6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDY6XHRcdHJldHVybiByZXQ7XG4gMzQ3Olx0bm9zcGFjZTpcbiAzNDg6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDk6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2F0bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4tLVxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9pb2N0bC5jLTk0LVx0XHRjYXNlIEFUTV9CQUNLRU5EX1BQUDpcbm5ldC9hdG0vaW9jdGwuYzo5NTpcdFx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDtwcHBvYXRtXCYjMzQ7KTtcbm5ldC9hdG0vaW9jdGwuYy05Ni1cdFx0XHRicmVhaztcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoyOi8qIG5ldC9hdG0vcHBwb2F0bS5jIC0gUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNSAqL1xubmV0L2F0bS9wcHBvYXRtLmMtMy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00OS1cbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xubmV0L2F0bS9wcHBvYXRtLmMtNTEtXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTU1LVxubmV0L2F0bS9wcHBvYXRtLmM6NTY6c3RydWN0IHBwcG9hdG1fdmNjIHtcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVx0c3RydWN0IGF0bV92Y2NcdCphdG12Y2M7XHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTYyLVx0XHRcdFx0XHQvKiBrZWVwIG9sZCBwdXNoL3BvcCBmb3IgZGV0YWNoaW5nICovXG5uZXQvYXRtL3BwcG9hdG0uYzo2MzpcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xubmV0L2F0bS9wcHBvYXRtLmMtNjQtXHRhdG9taWNfdCBpbmZsaWdodDtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz04Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xubmV0L2F0bS9wcHBvYXRtLmM6OTE6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjayk7XG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XG5uZXQvYXRtL3BwcG9hdG0uYy05My1cbm5ldC9hdG0vcHBwb2F0bS5jOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xubmV0L2F0bS9wcHBvYXRtLmM6OTY6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTk3LX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDMtICovXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDQ6c3RhdGljIHZvaWQgcHBwb2F0bV93YWtldXBfc2VuZGVyKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBmcm9tX3Rhc2tsZXQocHZjYywgdCwgd2FrZXVwX3Rhc2tsZXQpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTA3LVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMTM6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTE0LVxubmV0L2F0bS9wcHBvYXRtLmMtMTE1LVx0Lypcbm5ldC9hdG0vcHBwb2F0bS5jOjExNjpcdCAqIEFzIGluIHBwcG9hdG1fcG9wKCksIGl0JiMzOTtzIHNhZmUgdG8gY2xlYXIgdGhlIEJMT0NLRUQgYml0IGhlcmUgYmVjYXVzZVxubmV0L2F0bS9wcHBvYXRtLmM6MTE3Olx0ICogdGhlIHdha2V1cCAqY2FuJiMzOTt0KiByYWNlIHdpdGggcHBwb2F0bV9zZW5kKCkuIFRoZXkgYm90aCBob2xkIHRoZSBQUFBcbm5ldC9hdG0vcHBwb2F0bS5jLTExOC1cdCAqIGNoYW5uZWwmIzM5O3MgLVx1MDAzZWRvd25sIGxvY2suIEFuZCB0aGUgcG90ZW50aWFsIHJhY2Ugd2l0aCAqc2V0dGluZyogaXQsXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTk6XHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24mIzM5O3Rcbm5ldC9hdG0vcHBwb2F0bS5jOjEyMDpcdCAqIGV4aXN0IGhlcmUuIEluIHRoZSBzb2NrX293bmVkX2J5X3VzZXIoKSBjYXNlIGluIHBwcG9hdG1fc2VuZCgpLCB3ZVxubmV0L2F0bS9wcHBvYXRtLmMtMTIxLVx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTMzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xubmV0L2F0bS9wcHBvYXRtLmM6MTM2Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEzNy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXHQgKiBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSBjbGVhciB0aGUgQkxPQ0tFRCBmbGFnIGp1c3QgYXMgd2Vcbm5ldC9hdG0vcHBwb2F0bS5jOjE0NDpcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDUtXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2Olx0ICogSW4gZmFjdCBpdCYjMzk7cyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGNoYW5uZWwtXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OC1cdCAqIGNhbGxlZCBieSB0aGUgdGFza2xldCB3aWxsICphbHNvKiBncmFiIHRoYXQgbG9jay4gU28gZXZlbiBpZiBhbm90aGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDk6XHQgKiBDUFUgaXMgaW4gcHBwb2F0bV9zZW5kKCkgcmlnaHQgbm93LCB0aGUgdGFza2xldCBpc24mIzM5O3QgZ29pbmcgdG8gcmFjZVxubmV0L2F0bS9wcHBvYXRtLmMtMTUwLVx0ICogd2l0aCBpdC4gVGhlIHdha2V1cCAqd2lsbCogaGFwcGVuIGFmdGVyIHRoZSBvdGhlciBDUFUgaXMgc2FmZWx5IG91dFxubmV0L2F0bS9wcHBvYXRtLmM6MTUxOlx0ICogb2YgcHBwb2F0bV9zZW5kKCkgYWdhaW4uXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTItXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTUzOlx0ICogU28gaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSBoYXMgYWxyZWFkeSBzZXQgdGhlIEJMT0NLRUQgYml0IGFuZFxubmV0L2F0bS9wcHBvYXRtLmMtMTU0LVx0ICogaXQgYWJvdXQgdG8gcmV0dXJuLCB0aGF0JiMzOTtzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxubmV0L2F0bS9wcHBvYXRtLmM6MTU1Olx0ICogaGFwcGVuIGxhdGVyLiBBbmQgaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSAqaGFzbiYjMzk7dCogc2V0IHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMTU2LVx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0JiMzOTtzIGZpbmUgdG9vIGJlY2F1c2Ugb2YgdGhlIGRvdWJsZSBjaGVjayBpblxubmV0L2F0bS9wcHBvYXRtLmM6MTU3Olx0ICogcHBwb2F0bV9tYXlfc2VuZCgpIHdoaWNoIGlzIGNvbW1lbnRlZCB0aGVyZS5cbm5ldC9hdG0vcHBwb2F0bS5jLTE1OC1cdCAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE2OTpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcbm5ldC9hdG0vcHBwb2F0bS5jLTE3MC1cdHB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4MC0vKiBDYWxsZWQgd2hlbiBhbiBBQUw1IFBEVSBjb21lcyBpbiAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTgxOnN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMTgyLXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MzpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXHRwcl9kZWJ1ZyhcJiMzNDtcXG5cJiMzNDspO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4OS1cdFx0bW9kdWxlID0gcHZjYy1cdTAwM2VvbGRfb3duZXI7XG5uZXQvYXRtL3BwcG9hdG0uYzoxOTA6XHRcdHBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xOTEtXHRcdGF0bXZjYy1cdTAwM2VwdXNoKGF0bXZjYywgTlVMTCk7XHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjMzLVxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTYtXHQvKlxubmV0L2F0bS9wcHBvYXRtLmM6MjU3Olx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMjU4LVx0ICogbGFzdCBwYWNrZXQgaW4gdGhlIHF1ZXVlLCAqanVzdCogYmVmb3JlIHdlIHNldCB0aGUgQkxPQ0tFRFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTI2NC1cdCAqIHJ1biB0aGUgd2FrZXVwIHRhc2tsZXQuIEFub3RoZXIgd2FrZXVwIHdpbGwgbmV2ZXIgaHVydC5cbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcdCAqIElmIHBwcG9hdG1fcG9wKCkgaXMgcnVubmluZyBidXQgaGFzbiYjMzk7dCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVx0ICogc3BhY2Ugb24gdGhlIHF1ZXVlIHlldCwgdGhlbiBpdCBoYXNuJiMzOTt0IGNoZWNrZWQgdGhlIEJMT0NLRURcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjktXHQgKiB0YWtpbmcgdGhlIFBQUCBjaGFubmVsJiMzOTtzIC1cdTAwM2Vkb3dubCBsb2NrLCB3aGljaCBpcyBoZWxkIGJ5IHRoZVxubmV0L2F0bS9wcHBvYXRtLmM6MjcwOlx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXG5uZXQvYXRtL3BwcG9hdG0uYy0yNzEtXHQgKiB3YWl0IGZvciB1cyB0byBmaW5pc2guXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjg4LSNkZWZpbmUgRFJPUF9QQUNLRVQgMVxubmV0L2F0bS9wcHBvYXRtLmM6Mjg5OnN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTI5MC17XG5uZXQvYXRtL3BwcG9hdG0uYzoyOTE6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG5uZXQvYXRtL3BwcG9hdG0uYy0yOTItXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMyNC1cdFx0fVxubmV0L2F0bS9wcHBvYXRtLmM6MzI1Olx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNi1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzI5LVx0Y2FzZSBlX3ZjOlxubmV0L2F0bS9wcHBvYXRtLmM6MzMwOlx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMS1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzU5LS8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG5uZXQvYXRtL3BwcG9hdG0uYzozNjA6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG5uZXQvYXRtL3BwcG9hdG0uYy0zNjEtXHR1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzMtXG5uZXQvYXRtL3BwcG9hdG0uYzozNzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG5uZXQvYXRtL3BwcG9hdG0uYzozNzU6XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbm5ldC9hdG0vcHBwb2F0bS5jOjM3NjpcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxubmV0L2F0bS9wcHBvYXRtLmMtMzc3LX07XG5uZXQvYXRtL3BwcG9hdG0uYy0zNzgtXG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MC17XG5uZXQvYXRtL3BwcG9hdG0uYy0zODEtXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xubmV0L2F0bS9wcHBvYXRtLmM6MzgyOlx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmMtMzgzLVx0aW50IGVycjtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MDAtXHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDE6XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDItXHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDM6XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDQtXHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbm5ldC9hdG0vcHBwb2F0bS5jLTQwNS1cdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDY6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDctXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQxMi1cdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmM6NDEzOlx0YXRtdmNjLVx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTQ6XHRhdG12Y2MtXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTU6XHRhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcbm5ldC9hdG0vcHBwb2F0bS5jLTQxNi1cdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDI4LSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6NDI5OnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtNDMwLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDM0LVxubmV0L2F0bS9wcHBvYXRtLmM6NDM1Olx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxubmV0L2F0bS9wcHBvYXRtLmMtNDM2LVx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ0Ny1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ0ODpcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xubmV0L2F0bS9wcHBvYXRtLmMtNDQ5LVx0XHR9XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDU5LVxubmV0L2F0bS9wcHBvYXRtLmM6NDYwOnN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtNDYxLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxubmV0L2F0bS9wcHBvYXRtLmM6NDYyOlx0LmlvY3RsXHQ9IHBwcG9hdG1faW9jdGwsXG5uZXQvYXRtL3BwcG9hdG0uYy00NjMtfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2NC1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ2NTpzdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2Ni17XG5uZXQvYXRtL3BwcG9hdG0uYzo0Njc6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDY4LVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDcwLVxubmV0L2F0bS9wcHBvYXRtLmM6NDcxOnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Mi17XG5uZXQvYXRtL3BwcG9hdG0uYzo0NzM6XHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NzQtfVxubmV0L2F0bS9wcHBvYXRtLmMtNDc1LVxubmV0L2F0bS9wcHBvYXRtLmM6NDc2Om1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzc6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQUFBPQVRNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBzeW1ib2wgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBPQVRNLiBUbyBkbyB0aGlzLCBJJiMzOTtsbCBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbmV0L2F0bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlIHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGFuZCBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgUFBQT0FUTSBpcyBjb250cm9sbGVkIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGFsc28gdml0YWw7IHRoZXkgY2FuIGxlYWQgdG8gcmlwcGxlIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQVRNXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBBVE0gaXMgYSBoaWdoLXNwZWVkIG5ldHdvcmtpbmcgdGVjaG5vbG9neSBmb3IgTG9jYWwgQXJlYSBOZXR3b3Jrc1xuICAxMDpcdFx0ICBhbmQgV2lkZSBBcmVhIE5ldHdvcmtzLiAgSXQgdXNlcyBhIGZpeGVkIHBhY2tldCBzaXplIGFuZCBpc1xuICAxMTpcdFx0ICBjb25uZWN0aW9uIG9yaWVudGVkLCBhbGxvd2luZyBmb3IgdGhlIG5lZ290aWF0aW9uIG9mIG1pbmltdW1cbiAgMTI6XHRcdCAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgSW4gb3JkZXIgdG8gcGFydGljaXBhdGUgaW4gYW4gQVRNIG5ldHdvcmssIHlvdXIgTGludXggYm94IG5lZWRzIGFuXG4gIDE1Olx0XHQgIEFUTSBuZXR3b3JraW5nIGNhcmQuIElmIHlvdSBoYXZlIHRoYXQsIHNheSBZIGhlcmUgYW5kIHRvIHRoZSBkcml2ZXJcbiAgMTY6XHRcdCAgb2YgeW91ciBBVE0gY2FyZCBiZWxvdy5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcbiAgMTk6XHRcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F0bS5yc3RcdTAwM2UgZm9yXG4gIDIwOlx0XHQgIGZ1cnRoZXIgZGV0YWlscy5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgQVRNX0JSMjY4NFxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIEFUTSBcdTAwMjZcdTAwMjYgSU5FVFxuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0ICBBVE0gUFZDcyBjYW4gY2FycnkgZXRoZXJuZXQgUERVcyBhY2NvcmRpbmcgdG8gUkZDMjY4NCAoZm9ybWVybHkgMTQ4MylcbiAgMjc6XHRcdCAgVGhpcyBkZXZpY2Ugd2lsbCBhY3QgbGlrZSBhbiBldGhlcm5ldCBmcm9tIHRoZSBrZXJuZWxzIHBvaW50IG9mIHZpZXcsXG4gIDI4Olx0XHQgIHdpdGggdGhlIHRyYWZmaWMgYmVpbmcgY2FycmllZCBieSBBVE0gUFZDcyAoY3VycmVudGx5IDEgUFZDL2RldmljZSkuXG4gIDI5Olx0XHQgIFRoaXMgaXMgc29tZXRpbWVzIHVzZWQgb3ZlciBEU0wgbGluZXMuICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gQVRNX0JSMjY4NFxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBtZWNoYW5pc20gZm9yIHVzZXJzIHdobyBuZWVkIHRvIHRlcm1pbmF0ZSBhXG4gIDM2Olx0XHQgIGxhcmdlIG51bWJlciBvZiBJUC1vbmx5IHZjYyYjMzk7cy4gIERvIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IGFyZSBzdXJlXG4gIDM3Olx0XHQgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldC9BVE0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byBgbmV0L2F0bS9LY29uZmlnYCBub3cuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBVE0gbmV0d29ya2luZyB3aXRoaW4gdGhpcyBidWlsZC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aHJvdWdoIHRoZSByZW1haW5pbmcgZW50cmllcyB3aXRoaW4gdGhpcyBLY29uZmlnIGZpbGUsIGFzc2Vzc2luZyB0aGVpciByZWxldmFuY2UgYW5kIGludGVycGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVhY2ggb3B0aW9uIGltcGFjdHMgdGhlIG92ZXJhbGwgQVRNIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhYm91dCBmaWd1cmluZyBvdXQgdGhlIHByZWNpc2UgZmVhdHVyZXMgYmVpbmcgZXhwb3NlZCwgZGVwZW5kZW5jaWVzIGJldHdlZW4gb3B0aW9ucywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgQVRNIGRyaXZlcnMgYW5kIHByb3RvY29sIHN1cHBvcnQgYW5kIGhvdyBpdCBhbGwgdGllcyB0b2dldGhlciB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ZmlsZSBuZXQvYXRtL0tjb25maWcgZG9lcyBub3QgaGF2ZSBsaW5lIDgxLCBpdCBoYXMgb25seSAzNyBsaW5lczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtmaWxlIG5ldC9hdG0vS2NvbmZpZyBkb2VzIG5vdCBoYXZlIGxpbmUgODEsIGl0IGhhcyBvbmx5IDM3IGxpbmVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjgwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKlRyYWNpbmcgRG93biBQUFBPQVRNIGluIHRoZSBLY29uZmlnIFRyZWUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgUFBQT0FUTSB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgKmV4YWN0bHkqIHdoZXJlIFBQUE9BVE0gaXMgY29udHJvbGxlZCAtIHdoaWNoIGNvbmZpZyBvcHRpb24gZW5hYmxlcyBpdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgcGVyaGFwcyB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBlbmNvbXBhc3NlcyBpdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgJiMzNDtQUFBPQVRNJiMzNDsgYWNyb3NzIHRoZSBlbnRpcmUgS2NvbmZpZyB0cmVlLCB1c2luZyB3aGF0ZXZlciB0b29scyBJIGhhdmUgb24gaGFuZCDigJMgbGlrZWx5IGBncmVwYCBvciBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSBrZXJuZWwgc291cmNlLCBvciBtYXliZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3JpZXMgaWYgSSBoYXZlIGEgZ29vZCBmZWVsaW5nIGFib3V0IHdoZXJlIGl0IG1pZ2h0IGJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN1cnJvdW5kaW5nIGNvbnRleHQg4oCTIGNvbW1lbnRzLCBjb25kaXRpb25hbHMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyB0aGF0IG1pZ2h0IHBvaW50IG1lIHRvd2FyZHMgc3BlY2lmaWMgZGlyZWN0b3JpZXMgb3IgbW9kdWxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBleHBlY3QgdG8gZmluZCBhIG1haW4gY29uZmlnIG9wdGlvbiBhbmQgbWF5YmUgYSBmZXcgc3ViLW9wdGlvbnMsIG1heWJlIGV2ZW4gYSBtb2R1bGUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBwYXRoIGNvbXBsZXRlbHkuIE9uY2UgSSYjMzk7dmUgZm91bmQgaXQsIEkgY2FuIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZz0xNjc9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZzoxNjg6Q09ORklHX1BQUE9BVE09bVxuYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZy0xNjktQ09ORklHX1BQUE9FPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZz0yODE9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc6MjgyOkNPTkZJR19QUFBPQVRNPW1cbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnLTI4My1DT05GSUdfUFBQT0U9bVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9NDc0PUNPTkZJR19QUFBfTVVMVElMSU5LPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6NDc1OkNPTkZJR19QUFBPQVRNPW1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctNDc2LUNPTkZJR19QUFBPRT1tXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaC0xMC1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaDoxMTojZGVmaW5lIFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1RcdCgwKVxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oOjEyOiNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfVkNcdFx0KDEpXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MTM6I2RlZmluZSBQUFBPQVRNX0VOQ0FQU19MTENcdFx0KDIpXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmgtMTQtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oPTIwPXN0cnVjdCBhdG1fYmFja2VuZF9wcHAge1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIxLVx0YXRtX2JhY2tlbmRfdFx0YmFja2VuZF9udW07XHQvKiBBVE1fQkFDS0VORF9QUFAgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaDoyMjpcdGludFx0XHRlbmNhcHM7XHRcdC8qIFBQUE9BVE1fRU5DQVBTXyogKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaC0yMy19O1xuLS1cbm5ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4tLVxubmV0L2F0bS9wcHBvYXRtLmM9NTA9ZW51bSBwcHBvYXRtX2VuY2FwcyB7XG5uZXQvYXRtL3BwcG9hdG0uYzo1MTpcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXG5uZXQvYXRtL3BwcG9hdG0uYzo1MjpcdGVfdmMgPSBQUFBPQVRNX0VOQ0FQU19WQyxcbm5ldC9hdG0vcHBwb2F0bS5jOjUzOlx0ZV9sbGMgPSBQUFBPQVRNX0VOQ0FQU19MTEMsXG5uZXQvYXRtL3BwcG9hdG0uYy01NC19O1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTM3OT1zdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM4Ni1cdFx0cmV0dXJuIC1FRkFVTFQ7XG5uZXQvYXRtL3BwcG9hdG0uYzozODc6XHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXHUwMDI2XHUwMDI2XG5uZXQvYXRtL3BwcG9hdG0uYzozODg6XHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFx1MDAyNlx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUFBQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBQUFAgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGxvY2F0ZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGNvbnRyb2xsaW5nIFBQUCBmdW5jdGlvbmFsaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbW9kdWxlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBQUFAgY29uZmlndXJhdGlvbiBhbmQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnVydGhlciBhZGp1c3RtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHQgIHZlcnNpb24gb2YgdGhlIHBwcGQgZGFlbW9uIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBtdWx0aWxpbmsgcHJvdG9jb2wuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIFBQUE9BVE1cbiAxMDU6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuIDEwNjpcdFx0ZGVwZW5kcyBvbiBBVE1cbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgU3VwcG9ydCBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBlbmNhcHN1bGF0ZWQgaW4gQVRNIGZyYW1lcy5cbiAxMDk6XHRcdCAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgY29tcGx5IHdpdGggc2VjdGlvbiA4IG9mIFJGQzIzNjQsXG4gMTEwOlx0XHQgIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIGlmIHRoZSBBVE0gcGVlciBsb3NlcyBzdGF0ZSBhbmRcbiAxMTE6XHRcdCAgY2hhbmdlcyBpdHMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuXG4gMTEyOlx0XG4gMTEzOlx0Y29uZmlnIFBQUE9YXG4gMTE0Olx0XHR0cmlzdGF0ZVxuIDExNTpcdFxuIDExNjpcdGNvbmZpZyBQUFBPRVxuIDExNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgRXRoZXJuZXRcJiMzNDtcbiAxMTg6XHRcdHNlbGVjdCBQUFBPWFxuIDExOTpcdFx0aGVscFxuIDEyMDpcdFx0ICBTdXBwb3J0IGZvciBQUFAgb3ZlciBFdGhlcm5ldC5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxuIDEyMzpcdFx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcbiAxMjQ6XHRcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBQUE9BVE0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLCB3YXJyYW50cyBjbG9zZXIgc2NydXRpbnkgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBQUFBPQVRNIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBZZXMsIGl0JiMzOTtzIGZlYXNpYmxlLiBJIGNhbiBjcmVhdGUgQVRNIHNvY2tldHMgKEFGX0FUTVNWQy9BRl9BVE1QVkMpLCBBVE0gdmlydHVhbCBkZXZpY2VzLCBhbmQgYXR0YWNoIFBQUE9BVE0gdXNpbmcgaW9jdGxzIGxpa2UgYEFUTV9TRVRCQUNLRU5EYCBvciBgQVRNX05FV0JBQ0tFTkRJRmAuIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIHJlbGV2YW50IHN5c3RlbSBjYWxscywgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbWVhbnMgSSBjYW4gZ2VuZXJhdGUgdHJhZmZpYyB0aGF0IHdpbGwgaGl0IGBwcHBvYXRtX3NlbmRgICh2aWEgYC5zdGFydF94bWl0YCkuCgpOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgdGhlIGNyaXRpY2FsIGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG1hbnVhbCBza2IgcmVhbGxvY2F0aW9uIGxvZ2ljIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYC4gVGhpcyBzaWduaWZpZXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBza2IgaGFuZGxpbmcsIG1lbW9yeSBhbGxvY2F0aW9uLCBoZWFkcm9vbSBtYW5hZ2VtZW50LCBhbmQsIGltcG9ydGFudGx5LCBzb2NrZXQgbG9ja2luZy91bmxvY2tpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGNsZWFybHkgcmVhY2hhYmxlIGNvZGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdWJzeXN0ZW0uCgpDb25zaWRlcmluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0IG9uIHRoZXNlIGxvdy1sZXZlbCBuZXR3b3JraW5nIHByaW1pdGl2ZXMsIGFsb25nIHdpdGggdGhlIGludGVyYWN0aW9uIHdpdGggc29ja2V0IGxvY2tpbmcsIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgc2tiIGJ1ZmZlcnMgYW5kIGFyZSBpbnZvbHZlZCBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgUFBQIG92ZXIgQVRNIGNvbnRleHQsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCkZyb20gYSBzeW1ib2wgcGVyc3BlY3RpdmUsIGBwcHBvYXRtX3NlbmRgIGlzIHRoZSBwcmltYXJ5IHRhcmdldC4gQnV0LCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgcHBwb2F0bS5jYC4gU28sIEkmIzM5O2xsIGtlZXAgdGhlIGZvbGxvd2luZyBpbiBtaW5kOiBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGBwcHBvYXRtX2lvY3RsYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9hdG1fbWF5X3NlbmRgLCBgcHBwb2F0bV9wdXNoYCBhbmQgYHBwcG9hdG1fcG9wYC4gYHBwcG9hdG1fc2VuZGAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gYmUgdGFyZ2V0ZWQgYnV0IEkgc2hvdWxkIHRlc3QgdGhlIG90aGVycyB0b28uCgpGaW5hbGx5LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgYENPTkZJR19QUFBPQVRNYCwgYENPTkZJR19BVE1gLCBhbmQgYENPTkZJR19QUFBgIGFyZSBhbGwgaW1wb3J0YW50LiBJIGtub3cgUFBQT0FUTSBkZXBlbmRzIG9uIEFUTSwgYW5kIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIHRvIHNlZSBpZiBQUFBPQVRNIGhhcyBhbnkgaGFyZCBkZXBlbmRlbmN5IG9uIFBQUC4gVGhpcyBjb25maXJtcyB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyBlbmFibGVkIGFuZCBhY2Nlc3NpYmxlIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBQUFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFBQUCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGZyb20gbGluZXMgMSB0byA1MC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIG91dGxpbmUgdGhlIGNvcmUsIGZ1bmRhbWVudGFsIG9wdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGJhc2UgUFBQIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHZlcnkgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGluZ3MgbGlrZSB0aGUgYWJpbGl0eSB0byBlbmFibGUgb3IgZGlzYWJsZSBQUFAgc3VwcG9ydCBlbnRpcmVseSwgcGVyaGFwcyBkaWZmZXJlbnQgdmFyaWFudHMgb3IgZmxhdm9ycyBvZiBQUFAsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWcgYmxvY2ssIGFueSBjb25kaXRpb25hbHMsIGFuZCB0aGUgcGhyYXNpbmcgb2YgdGhlIGhlbHAgdGV4dC4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBmaW5kaW5nIHRoZSBkZWZhdWx0IHNlbGVjdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYmVmb3JlIEkgZGVsdmUgaW50byBtb3JlIHNwZWNpZmljIGZlYXR1cmVzLiBUaGlzIGluaXRpYWwgZXhhbWluYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGJhc2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc3Vic2VxdWVudCwgbW9yZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQUFAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuICA0MTpcdFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXG4gIDQyOlx0XHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcbiAgNDM6XHRcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cbiAgNDQ6XHRcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJiMzOTt0IHN1cHBvcnQgaXQsXG4gIDQ1Olx0XHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cbiAgNDY6XHRcbiAgNDc6XHRcdCAgVGhlIFBQUCBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAoXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDssXG4gIDQ4Olx0XHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxuICA0OTpcdFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXG4gIDUwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGlzIHdob2xlIHNlY3Rpb24gaXMgZ3VhcmRlZCBieSBhbiBgaWYgUFBQIC4uLiBlbmRpZmAgYmxvY2suIFRoYXQgdGVsbHMgbWUgdGhlIGNvcmUgUFBQIGZ1bmN0aW9uYWxpdHkgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIGFueXRoaW5nIHdpdGhpbiBpdCB0byBldmVuIGJlIGNvbnNpZGVyZWQuIEFuZCB0aGVuLCBkaXZpbmcgZGVlcGVyLCBJIHNlZSBgUFBQT0FUTWAgaXMgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gKmJvdGgqIGBQUFBgIGFuZCBgQVRNYC4gVGhhdCYjMzk7cyBsb2dpY2FsOyB5b3UgbmVlZCB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW5mcmFzdHJ1Y3R1cmUgKmFuZCogdGhlIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIHN1cHBvcnQgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTtsbCBwaXZvdCBhbmQgY2hlY2sgYGRyaXZlcnMvbmV0L0tjb25maWdgIG5vdy4gR290dGEgc2VlIHdoYXQgb3RoZXIgcmVsYXRpb25zaGlwcyBhcmUgZGVmaW5lZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSW5zcGVjdGlvbjogTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTI4LiBUaGUgcmVhc29uIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoYXQgbG9jYXRpb24gaXMgbGlrZWx5IGJlY2F1c2UgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIG9yIHBlcmhhcHMgY29uZmlndXJpbmcgYSBuZXcgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgbGluZSBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGVuY2xvc2luZyBibG9jayDigJMgYSBgY29uZmlnYCBvcHRpb24sIGFuIGBpZmAgc3RhdGVtZW50LCBhIGBzZWxlY3RgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVW5kZXJzdGFuZGluZyB0aGlzIGVuY2xvc2luZyBjb250ZXh0IGlzIGNydWNpYWwgYmVjYXVzZSBpdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBvcHRpb24gYXQgbGluZSA1MjggKGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIG9wdGlvbnMpIHdpbGwgYmUgY29uc2lkZXJlZCBvciBlbmFibGVkLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcJiMzNDtcbiA1MjE6XHRcbiA1MjI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCYjMzQ7XG4gNTIzOlx0XG4gNTI0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXCYjMzQ7XG4gNTI1Olx0XG4gNTI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1wmIzM0O1xuIDUyNzpcdFxuIDUyODpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuIDUyOTpcdFxuIDUzMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcJiMzNDtcbiA1MzE6XHRcbiA1MzI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCYjMzQ7XG4gNTMzOlx0XG4gNTM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCYjMzQ7XG4gNTM1Olx0XG4gNTM2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcJiMzNDtcbiA1Mzc6XHRcbiA1Mzg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2FuL0tjb25maWdcJiMzNDtcbiA1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwOTEKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBQUE9BVE0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdG8gYW5hbHl6ZS4gRmlyc3QsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBsb29rIHN0cmFpZ2h0Zm9yd2FyZDogYFBQUE9BVE1gLCBgQVRNYCwgYFBQUGAsIGFuZCBgTkVUREVWSUNFU2AuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBuYXR1cmUgb2YgUFBQIG92ZXIgQVRNIG5ldHdvcmtpbmcuIE5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIHNlZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGFuZCBgcHBwb2F0bV9pb2N0bGAuIERlZmluaXRlbHkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aG9zZSwgZXNwZWNpYWxseSBgcHBwb2F0bV9zZW5kYCBzaW5jZSB0aGF0JiMzOTtzIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZS4KClJpZ2h0LCB0aW1lIHRvIHBhY2thZ2UgYWxsIHRoaXMgaW50byB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyB0aGlzIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgbmV0d29yayBzdGFjayBjb2RlLCBzbyBmdXp6aW5nIGlzIHdhcnJhbnRlZC4gVGhlIGBFbmFibGVDb25maWdzYCBsaXN0IHdpbGwgYmUgdGhlIGZvdXIgY29uZmlndXJhdGlvbnMgbWVudGlvbmVkIGVhcmxpZXIuIEZvciBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7bGwgaW5jbHVkZSB0aG9zZSB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGFuZCBgcHBwb2F0bV9pb2N0bGAuIEZpbmFsbHksIHRoZSBgUmVhc29uaW5nYCB3aWxsIGJlIGEgY29uY2lzZSBzdW1tYXJ5OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgc29ja2V0IHVubG9ja2luZyBsb2dpYyBpbiBgcHBwb2F0bV9zZW5kYCBieSByZXBsYWNpbmcgbWFudWFsIHJlYWxsb2NhdGlvbiB3aXRoIGBza2JfY293X2hlYWQoKWAuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBoYW5kbGluZywgcGFja2V0IHRyYW5zbWlzc2lvbiwgYW5kIGVycm9yIHBhdGhzIGluIHRoZSBQUFAgb3ZlciBBVE0gbmV0d29ya2luZyBkcml2ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiYjMzQ7CgpPa2F5LCBqdXN0IGEgcXVpY2sgZmluYWwgc2FuaXR5IGNoZWNrLi4uIGNvbmZpZ3VyYXRpb25zLCBzeW1ib2xzLCByZWFzb25pbmcsIGFsbCBpbiBvcmRlci4gTG9va3MgZ29vZC4gVGltZSB0byBzZXQgdGhvc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtORVRERVZJQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBwcHBvYXRtX3NlbmQgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2JfcmVhbGxvY19oZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBza2JfY293X2hlYWQuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBQUFAgb3ZlciBBVE0gZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBhbmQgaW9jdGwgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O05FVERFVklDRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDssCiAgICAmIzM0O3BwcG9hdG1faW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gYW5kIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHBwcG9hdG1fc2VuZCBieSByZXBsYWNpbmcgbWFudWFsIHNrYl9yZWFsbG9jX2hlYWRyb29tIHJlYWxsb2NhdGlvbiB3aXRoIHNrYl9jb3dfaGVhZC4gVGhpcyBtb2RpZmllcyBza2IgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIFBQUCBvdmVyIEFUTSBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IGFuZCBpb2N0bCBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMjNkNzI4ZWU3MDIxMjEwYjkyYTg4MzgxODA3NmY3MjEwN2EyY2IyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwOTo0MDoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uNGNlN2ZhNmU0OTNlOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTMxNywyMSAmIzQzOzMxNywxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCiAJY2FzZSBlX2xsYzoKLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgTExDX0xFTikgewotCQkJc3RydWN0IHNrX2J1ZmYgKm47Ci0JCQluID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTsKLQkJCWlmIChuICE9IE5VTEwgJmFtcDsmYW1wOwotCQkJICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tJmd0O3RydWVzaXplKSkgewotCQkJCWtmcmVlX3NrYihuKTsKLQkJCQlnb3RvIG5vc3BhY2U7Ci0JCQl9Ci0JCQljb25zdW1lX3NrYihza2IpOwotCQkJc2tiID0gbjsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCWJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTsKLQkJCQlyZXR1cm4gRFJPUF9QQUNLRVQ7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLSZndDt0cnVlc2l6ZSkpCiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHsKJiM0MzsJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwkJfQomIzQzOwkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQogCQkJZ290byBub3NwYWNlOwogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgYW5hbHl6aW5nIHRoZSBwYXRjaCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGxldmVyYWdpbmcgbXkgdXN1YWwgdG9vbGtpdC4gTXkgZmlyc3QgdGFyZ2V0IHdpbGwgYmUgYG5ldC9hdG0vcHBwb2F0bS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxNy4gVGhpcyBzZWN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJlc2lkZXMsIG9yIGF0IGxlYXN0LCB3aGVyZSB0aGUgY2hhbmdlIGlzIG1vc3QgcmVsZXZhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBwYXRjaC4gSXMgaXQgYSBidWcgZml4LCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgYSBuZXcgZmVhdHVyZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgLSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgdXNhZ2UsIGFuZCBjb21tZW50cyAtIHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYWx0ZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgbG9jYWwgY29udGV4dCBmaXJzdCwgd2lsbCB0aGVuIGFsbG93IG1lIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHR7XG4gMjkxOlx0XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG4gMjkyOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIDI5MzpcdFx0aW50IHJldDtcbiAyOTQ6XHRcbiAyOTU6XHRcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiAyOTY6XHRcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbiAyOTc6XHRcdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAmIzM5O1xcMCYjMzk7IFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbiAyOTg6XHRcdFx0KHZvaWQpIHNrYl9wdWxsKHNrYiwgMSk7XG4gMjk5Olx0XG4gMzAwOlx0XHR2Y2MgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjO1xuIDMwMTpcdFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMDI6XHRcdGlmIChzb2NrX293bmVkX2J5X3VzZXIoc2tfYXRtKHZjYykpKSB7XG4gMzAzOlx0XHRcdC8qXG4gMzA0Olx0XHRcdCAqIE5lZWRzIHRvIGhhcHBlbiAoYW5kIGJlIGZsdXNoZWQsIGhlbmNlIHRlc3RfYW5kXykgYmVmb3JlIHdlIHVubG9ja1xuIDMwNTpcdFx0XHQgKiB0aGUgc29ja2V0LiBJdCBuZWVkcyB0byBiZSBzZWVuIGJ5IHRoZSB0aW1lIG91ciAtXHUwMDNlcmVsZWFzZV9jYiBnZXRzXG4gMzA2Olx0XHRcdCAqIGNhbGxlZC5cbiAzMDc6XHRcdFx0ICovXG4gMzA4Olx0XHRcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXHUwMDI2cHZjYy1cdTAwM2VibG9ja2VkKTtcbiAzMDk6XHRcdFx0Z290byBub3NwYWNlO1xuIDMxMDpcdFx0fVxuIDMxMTpcdFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSB8fFxuIDMxMjpcdFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAzMTM6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMxNDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMTU6XHRcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuIDMxNjpcdFx0fVxuIDMxNzpcdFxuIDMxODpcdFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiAzMTk6XHRcdGNhc2UgZV9sbGM6XG4gMzIwOlx0XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuIDMyMTpcdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMjI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMjM6XHRcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzI0Olx0XHRcdH1cbiAzMjU6XHRcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4gMzI2Olx0XHRcdFx0Z290byBub3NwYWNlO1xuIDMyNzpcdFx0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHRjYXNlIGVfdmM6XG4gMzMwOlx0XHRcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXHUwMDNldHJ1ZXNpemUpKVxuIDMzMTpcdFx0XHRcdGdvdG8gbm9zcGFjZTtcbiAzMzI6XHRcdFx0YnJlYWs7XG4gMzMzOlx0XHRjYXNlIGVfYXV0b2RldGVjdDpcbiAzMzQ6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMzNTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcblwmIzM0Oyk7XG4gMzM2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMzNzpcdFx0XHRyZXR1cm4gMTtcbiAzMzg6XHRcdH1cbiAzMzk6XHRcbiAzNDA6XHRcdGF0bV9hY2NvdW50X3R4KHZjYywgc2tiKTtcbiAzNDE6XHRcdHByX2RlYnVnKFwmIzM0O2F0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwmIzM0OyxcbiAzNDI6XHRcdFx0IHNrYiwgQVRNX1NLQihza2IpLVx1MDAzZXZjYywgQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VkZXYpO1xuIDM0MzpcdFx0cmV0ID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VzZW5kKEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MsIHNrYilcbiAzNDQ6XHRcdCAgICA/IERST1BfUEFDS0VUIDogMTtcbiAzNDU6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDY6XHRcdHJldHVybiByZXQ7XG4gMzQ3Olx0bm9zcGFjZTpcbiAzNDg6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDk6XHRcdC8qXG4gMzUwOlx0XHQgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcbiAzNTE6XHRcdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cbiAzNTI6XHRcdCAqL1xuIDM1MzpcdFx0aWYgKChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiBza2JfaGVhZHJvb20oc2tiKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiAzNTQ6XHRcdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJiMzOTtcXDAmIzM5OylcbiAzNTU6XHRcdFx0KHZvaWQpIHNrYl9wdXNoKHNrYiwgMSk7XG4gMzU2Olx0XHRyZXR1cm4gMDtcbiAzNTc6XHR9XG4gMzU4Olx0XG4gMzU5Olx0LyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cbiAzNjA6XHRzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbiAzNjE6XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDM2MjpcdHtcbiAzNjM6XHRcdHN3aXRjaCAoY21kKSB7XG4gMzY0Olx0XHRjYXNlIFBQUElPQ0dGTEFHUzpcbiAzNjU6XHRcdFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuIDM2NjpcdFx0XHQgICAgPyAtRUZBVUxUIDogMDtcbiAzNjc6XHRcdGNhc2UgUFBQSU9DU0ZMQUdTOlxuIDM2ODpcdFx0XHRyZXR1cm4gZ2V0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4gMzY5Olx0XHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBvcHRpbWl6aW5nIHRoZSBMTEMgZW5jYXBzdWxhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgUFBQb0FUTSBkcml2ZXIuIEkgc2VlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHdoZW4gZGVhbGluZyB3aXRoIFNoYXJlZCBvciBDbG9uZWQgYHNrYmBzLgoKQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGNoZWNrZWQgaWYgdGhlcmUgd2FzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgYHNrYmAgdXNpbmcgYHNrYl9oZWFkcm9vbShza2IpYC4gSWYgbm90LCBpdCB3b3VsZCBhdHRlbXB0IHRvIHJlYWxsb2NhdGUgd2l0aCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgc2tiX2hlYWRyb29tYCBtaWdodCByZXBvcnQgZW5vdWdoIHNwYWNlICppbml0aWFsbHkqLCBidXQgaWYgdGhlIGBza2JgIHdhcyBzaGFyZWQgKGxpa2UgZnJvbSBhIGNsb25lKSBvciBoYWQgZXhpc3RpbmcgcmVmZXJlbmNlcywgdGhlbiBtb2RpZnlpbmcgaXRzIGhlYWQgKHdpdGggYG1lbWNweWAgb3IgcmVhbGxvY2F0aW9uKSB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIG9sZCBjb2RlIHdhcyB0cnlpbmcgdG8gaGFuZGxlIHRoaXMsIGJ1dCB0aGUgbG9naWMgd2FzIGEgYml0IGNvbnZvbHV0ZWQsIGVzcGVjaWFsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSByZWFsbG9jYXRlZCBgc2tiYCBpbiB0aGUgY29uZGl0aW9uYWwuCgpUaGUgbmV3IGFwcHJvYWNoIGlzIGZhciBjbGVhbmVyOiBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgLiBUaGlzIGZ1bmN0aW9uIGVsZWdhbnRseSBoYW5kbGVzIHR3byB0aGluZ3M6IDEpIGl0IGVuc3VyZXMgdGhhdCB0aGUgYHNrYmAgaGFzIGVub3VnaCBoZWFkcm9vbSAoYWxsb2NhdGluZyBtb3JlIGlmIG5lZWRlZCkgYW5kIDIpIGlmIHRoZSBgc2tiYCBpcyBzaGFyZWQsIGl0IG1ha2VzIGEgY29weSAoQ29weS1Pbi1Xcml0ZSwgb3IgQ09XKSB0byBlbnN1cmUgdGhhdCBtb2RpZmljYXRpb25zIGFyZSBpc29sYXRlZC4gSWYgYHNrYl9jb3dfaGVhZGAgZmFpbHMsIHdlIHVubG9jaywgZnJlZSB0aGUgc2tiLCBhbmQgZHJvcCB0aGUgcGFja2V0LCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4KCkFmdGVyIHRoZSBgc2tiX2Nvd19oZWFkYCBjYWxsLCB3ZSBjaGVjayBgcHBwb2F0bV9tYXlfc2VuZGAgYW5kIGlmIHRoYXQmIzM5O3MgZmFsc2UsIHdlIGdvIHRvIGBub3NwYWNlYC4gSWYgdGhhdCBjaGVjayBpcyBPSywgd2UgdGhlbiBwcm9jZWVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgYW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIGBza2JfY293X2hlYWRgIHRha2VzIGNhcmUgb2YgcmVhbGxvY2F0aW9uIG9yIHVuc2hhcmluZywgY29weWluZyBkYXRhIGFzIG5lY2Vzc2FyeS4gYHNrYl9wdXNoYCBleHRlbmRzIHRoZSBkYXRhIGFyZWEgdG93YXJkcyB0aGUgaGVhZHJvb20sIGFuZCB0aGUgYG1lbWNweWAgdGhlbiBjb3BpZXMgdGhlIGBwcHBsbGNgIGhlYWRlciAod2hpY2ggSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaW4gdGhlIGNvZGUgYnV0IGxvb2tzIHRvIGJlIGEgc3RhdGljIGNvbnN0IGFycmF5LCBzbyB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMpIGludG8gdGhpcyBhbGxvY2F0ZWQgc3BhY2UuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IHRoZSBgcHBwbGxjYCBkZWZpbml0aW9uIGluIHRoZSBzb3VyY2UgdG8gYmUgc3VyZSwgYnV0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgbmV3IGFwcHJvYWNoIGlzIG1vcmUgcm9idXN0IGFuZCBzaW1wbGVyIHRoYW4gdGhlIHByZXZpb3VzIHZlcnNpb24uIEl0IGVmZmVjdGl2ZWx5IHJlc29sdmVzIHRoZSBzaGFyZWQtYnVmZmVyIGlzc3VlcyBhbmQgbWFrZXMgdGhlIGxvZ2ljIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcGxsYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jPTU2PXN0cnVjdCBwcHBvYXRtX3ZjYyB7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtODUtICovXG5uZXQvYXRtL3BwcG9hdG0uYzo4NjpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTg3LSNkZWZpbmUgTExDX0xFTlx0XHQoNClcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0xODE9c3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTk4LVx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDX0xFTiB8fFxubmV0L2F0bS9wcHBvYXRtLmM6MTk5Olx0XHQgICAgbWVtY21wKHNrYi1cdTAwM2VkYXRhLCBwcHBsbGMsIExMQ19MRU4pKVxubmV0L2F0bS9wcHBvYXRtLmMtMjAwLVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjA3LVx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzoyMDg6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gc2l6ZW9mKHBwcGxsYykgXHUwMDI2XHUwMDI2XG5uZXQvYXRtL3BwcG9hdG0uYzoyMDk6XHRcdCAgICAhbWVtY21wKHNrYi1cdTAwM2VkYXRhLCBwcHBsbGMsIHNpemVvZihwcHBsbGMpKSkge1xubmV0L2F0bS9wcHBvYXRtLmMtMjEwLVx0XHRcdHB2Y2MtXHUwMDNlZW5jYXBzID0gZV9sbGM7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjEzLVx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzoyMTQ6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gKHNpemVvZihwcHBsbGMpIC0gTExDX0xFTikgXHUwMDI2XHUwMDI2XG5uZXQvYXRtL3BwcG9hdG0uYzoyMTU6XHRcdCAgICAhbWVtY21wKHNrYi1cdTAwM2VkYXRhLCBcdTAwMjZwcHBsbGNbTExDX0xFTl0sXG5uZXQvYXRtL3BwcG9hdG0uYzoyMTY6XHRcdCAgICBzaXplb2YocHBwbGxjKSAtIExMQ19MRU4pKSB7XG5uZXQvYXRtL3BwcG9hdG0uYy0yMTctXHRcdFx0cHZjYy1cdTAwM2VlbmNhcHMgPSBlX3ZjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTI4OT1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzI2LVx0XHRcdGdvdG8gbm9zcGFjZTtcbm5ldC9hdG0vcHBwb2F0bS5jOjMyNzpcdFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYy0zMjgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGxlYWtzLiBUaGlzIHBhdGNoIGlzIHJlcGxhY2luZyB0aGF0IGBza2JfcmVhbGxvY19oZWFkcm9vbWAgbWVzcyB3aXRoIGBza2JfY293X2hlYWRgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncywgdGhhdCYjMzk7cyBnb29kLiBUaGUgY3JpdGljYWwgdGhpbmcgSSBzZWUgaXMgdGhhdCBhbnkgbmV3bHkgYWxsb2NhdGVkIGhlYWRyb29tLCBvciBkYXRhIHB1c2hlZCBpbnRvIGl0LCBpcyBpbW1lZGlhdGVseSBvdmVyd3JpdHRlbiB3aXRoIGBtZW1jcHlgLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0IGFyZSB0aGVuICpyZWFkKi4gRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvciBleHBvc3VyZSBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgY29weV90b191c2VyYCwgb3IgZXZlbiBzb21ldGhpbmcgc25lYWt5IGxpa2UgYSBuZXRsaW5rIHNrYiBvciBhbiBpb2N0bCBhcmd1bWVudC4gVGhpcyBsb29rcyBsaWtlIHB1cmVseSBuZXR3b3JrIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBDT1cgYnVmZmVyIG1hbmFnZW1lbnQgZm9yIHNoYXJlZCBza2Igc2FmZXR5LCB3aGljaCBpcyBzbWFydCB0byBkby4gRG91YmxlIGNoZWNraW5nIHRoYXQgaXQgZG9lc24mIzM5O3QgY29ycnVwdCBzaGFyZWQgc2ticywgb3IgaGF2ZSBpbXByb3BlciBoYW5kbGluZy4gQW55IHNrYiBtYW5hZ2VtZW50IGlzc3VlcyBsaWtlIGRvdWJsZSBmcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzICpzaG91bGQqIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOLCB3aGljaCBpcyBhIGdvb2Qgc2FmZXR5IG5ldC4KCk5vdywgbGV0JiMzOTtzIHRyaXBsZS1jaGVjayB0aGlzIGFnYWluc3QgdGhlIEtNU0FOIGNyaXRlcmlhLiBSZW1lbWJlciwgS01TQU4gaXMgZm9yIGNhdGNoaW5nICprZXJuZWwtdG8tdXNlciogbWVtb3J5IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4KCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOb3BlLCBub3QgaGVyZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0LgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHJlYWQgbGF0ZXI/KiogTm8sIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvZiB0aGF0Lgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOb3QgYSBjaGFuY2UuIFRoaXMgbG9va3Mgc29saWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLiBUaGUgcmlzayBoZXJlIGlzIHdpdGggZGF0YSBjb3JydXB0aW9uLCB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IHdpdGggS0FTQU4sIGFuZCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdG8gdXNlciBzcGFjZS4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGF0LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgZG9jdW1lbnQgdGhpcyB3aXRoIGNsZWFyIHJlYXNvbmluZywgZW1waGFzaXppbmcgdGhlIGtleSBkaWZmZXJlbmNlIGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBtYW51YWwgc2tiIGhlYWRyb29tIHJlYWxsb2NhdGlvbiBsb2dpYyB3aXRoIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgaW4gYHBwcG9hdG1fc2VuZCgpYC5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6XG4tIFRoZSBoZWFkcm9vbSBhbGxvY2F0ZWQgb3IgZW5zdXJlZCB2aWEgYHNrYl9jb3dfaGVhZCgpYCBpcyBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgd2l0aCBgbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTilgLlxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGNoZWNrcy5cblxuMi4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgbmVpdGhlciBvZiB3aGljaCBhcHBsaWVzIGhlcmUuXG4tIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlLCBoZWFkcm9vbSBib3VuZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MjIuMDk5Nzc0NTY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MjA3NjY5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIk5FVERFVklDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiLFxuICAgIFwicHBwb2F0bV9pb2N0bFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6XFxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGNoZWNrcy5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgbmVpdGhlciBvZiB3aGljaCBhcHBsaWVzIGhlcmUuXFxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjIyLjA5OTc4MDEzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwOTk4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjIzZDcyOGVlNzAyMTIxMGI5MmE4ODM4MTgwNzZmNzIxMDdhMmNiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjQwOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi40Y2U3ZmE2ZTQ5M2U5IDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXFxuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5AQCAtMzE3LDIxICszMTcsMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gXFx0Y2FzZSBlX2xsYzpcXG4tXFx0XFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgTExDX0xFTikge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcXG4tXFx0XFx0XFx0biA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7XFxuLVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbi1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLVxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBuO1xcbi1cXHRcXHRcXHRpZiAoc2tiID09IE5VTEwpIHtcXG4tXFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4rXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gXFx0XFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XFxuIFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDoyMi41NjEzODA0MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5NjkzMDkwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJORVRERVZJQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInBwcG9hdG1faW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjIzZDcyOGVlNzAyMTIxMGI5MmE4ODM4MTgwNzZmNzIxMDdhMmNiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDk6NDA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi40Y2U3ZmE2ZTQ5M2U5IDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbisrKyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtMzE3LDIxICszMTcsMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbitcdFx0fVxuK1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4gXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjIyLjU2MTM4MTk3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyOTcyMjExNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyB0b3VjaGVkIGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBBVE0gb3ZlciBQUFBvRSwgc3BlY2lmaWNhbGx5IHRoZSBzZW5kaW5nIHBhdGguIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcHBwb2F0bV9zZW5kYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgUFBQb0EvUFBQb0UgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLkknbGwgcHJvYmFibHkgc3RhcnQgYnkgcmVhZGluZyBgbmV0L2F0bS9wcHBvYXRtLmNgIGRpcmVjdGx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGVkIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGVuIG1ha2UgYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgYnVpbGQgb3B0aW9ucy4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZG8gdGhhdCwgYW5kIG1pZ2h0IHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgYG5ldC9hdG0vS2NvbmZpZ2AgdG8gcGlucG9pbnQgYW55dGhpbmcgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI4LCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDoyOC44NTg2MDU3NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0dmNjID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2M7XFxuIDMwMTpcXHRcXHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMDI6XFx0XFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcXG4gMzAzOlxcdFxcdFxcdC8qXFxuIDMwNDpcXHRcXHRcXHQgKiBOZWVkcyB0byBoYXBwZW4gKGFuZCBiZSBmbHVzaGVkLCBoZW5jZSB0ZXN0X2FuZF8pIGJlZm9yZSB3ZSB1bmxvY2tcXG4gMzA1OlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cXHUwMDNlcmVsZWFzZV9jYiBnZXRzXFxuIDMwNjpcXHRcXHRcXHQgKiBjYWxsZWQuXFxuIDMwNzpcXHRcXHRcXHQgKi9cXG4gMzA4OlxcdFxcdFxcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXFx1MDAyNnB2Y2MtXFx1MDAzZWJsb2NrZWQpO1xcbiAzMDk6XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMTA6XFx0XFx0fVxcbiAzMTE6XFx0XFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpIHx8XFxuIDMxMjpcXHRcXHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMxMzpcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMxNDpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzE1OlxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMzE2OlxcdFxcdH1cXG4gMzE3OlxcdFxcbiAzMTg6XFx0XFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gMzE5OlxcdFxcdGNhc2UgZV9sbGM6XFxuIDMyMDpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHtcXG4gMzIxOlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzIyOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMjM6XFx0XFx0XFx0XFx0cmV0dXJuIERST1BfUEFDS0VUO1xcbiAzMjQ6XFx0XFx0XFx0fVxcbiAzMjU6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMjY6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMjc6XFx0XFx0XFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XFxuIDMyODpcXHRcXHRcXHRicmVhaztcXG4gMzI5OlxcdFxcdGNhc2UgZV92YzpcXG4gMzMwOlxcdFxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4gMzMxOlxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gMzMyOlxcdFxcdFxcdGJyZWFrO1xcbiAzMzM6XFx0XFx0Y2FzZSBlX2F1dG9kZXRlY3Q6XFxuIDMzNDpcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMzNTpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiVHJ5aW5nIHRvIHNlbmQgd2l0aG91dCBzZXR0aW5nIGVuY2FwcyFcXFxcblxcXCIpO1xcbiAzMzY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMzNzpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gMzM4OlxcdFxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xcbiAzNDE6XFx0XFx0cHJfZGVidWcoXFxcImF0bV9za2IoJXApLVxcdTAwM2V2Y2MoJXApLVxcdTAwM2VkZXYoJXApXFxcXG5cXFwiLFxcbiAzNDI6XFx0XFx0XFx0IHNrYiwgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjLVxcdTAwM2VkZXYpO1xcbiAzNDM6XFx0XFx0cmV0ID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIHNrYilcXG4gMzQ0OlxcdFxcdCAgICA/IERST1BfUEFDS0VUIDogMTtcXG4gMzQ1OlxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzQ2OlxcdFxcdHJldHVybiByZXQ7XFxuIDM0NzpcXHRub3NwYWNlOlxcbiAzNDg6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MjguODU4NzAzNTgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDA0NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9NYWtlZmlsZT0xMD1hdG0tJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxubmV0L2F0bS9NYWtlZmlsZS0xMS1cXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSArPSBwcHBvYXRtLm9cXG4tLVxcbm5ldC9hdG0vaW9jdGwuYz00Mz1zdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxubmV0L2F0bS9pb2N0bC5jLTk0LVxcdFxcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxcbm5ldC9hdG0vaW9jdGwuYzo5NTpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwicHBwb2F0bVxcXCIpO1xcbm5ldC9hdG0vaW9jdGwuYy05Ni1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG5uZXQvYXRtL3BwcG9hdG0uYzoyOi8qIG5ldC9hdG0vcHBwb2F0bS5jIC0gUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMtXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00OS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo1MDplbnVtIHBwcG9hdG1fZW5jYXBzIHtcXG5uZXQvYXRtL3BwcG9hdG0uYy01MS1cXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNTUtXFxubmV0L2F0bS9wcHBvYXRtLmM6NTY6c3RydWN0IHBwcG9hdG1fdmNjIHtcXG5uZXQvYXRtL3BwcG9hdG0uYy01Ny1cXHRzdHJ1Y3QgYXRtX3ZjY1xcdCphdG12Y2M7XFx0LyogVkNDIGRlc2NyaXB0b3IgKi9cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTYyLVxcdFxcdFxcdFxcdFxcdC8qIGtlZXAgb2xkIHB1c2gvcG9wIGZvciBkZXRhY2hpbmcgKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo2MzpcXHRlbnVtIHBwcG9hdG1fZW5jYXBzIGVuY2FwcztcXG5uZXQvYXRtL3BwcG9hdG0uYy02NC1cXHRhdG9taWNfdCBpbmZsaWdodDtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTg2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBwcGxsY1s2XSA9IHsgMHhGRSwgMHhGRSwgMHgwMywgMHhDRiwgMHhDMCwgMHgyMSB9O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtODgtXFxubmV0L2F0bS9wcHBvYXRtLmM6ODk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjkxOlxcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayk7XFxubmV0L2F0bS9wcHBvYXRtLmMtOTItfVxcbm5ldC9hdG0vcHBwb2F0bS5jLTkzLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTk1LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo5NjpcXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cXHUwMDNlcHJpdmF0ZSk7XFxubmV0L2F0bS9wcHBvYXRtLmMtOTctfVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTAzLSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEwNDpzdGF0aWMgdm9pZCBwcHBvYXRtX3dha2V1cF9zZW5kZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTA2OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGZyb21fdGFza2xldChwdmNjLCB0LCB3YWtldXBfdGFza2xldCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTA3LVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTEwLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTIte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjExMzpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTExNC1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTUtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTY6XFx0ICogQXMgaW4gcHBwb2F0bV9wb3AoKSwgaXQncyBzYWZlIHRvIGNsZWFyIHRoZSBCTE9DS0VEIGJpdCBoZXJlIGJlY2F1c2VcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTc6XFx0ICogdGhlIHdha2V1cCAqY2FuJ3QqIHJhY2Ugd2l0aCBwcHBvYXRtX3NlbmQoKS4gVGhleSBib3RoIGhvbGQgdGhlIFBQUFxcbm5ldC9hdG0vcHBwb2F0bS5jLTExOC1cXHQgKiBjaGFubmVsJ3MgLVxcdTAwM2Vkb3dubCBsb2NrLiBBbmQgdGhlIHBvdGVudGlhbCByYWNlIHdpdGggKnNldHRpbmcqIGl0LFxcbm5ldC9hdG0vcHBwb2F0bS5jOjExOTpcXHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24ndFxcbm5ldC9hdG0vcHBwb2F0bS5jOjEyMDpcXHQgKiBleGlzdCBoZXJlLiBJbiB0aGUgc29ja19vd25lZF9ieV91c2VyKCkgY2FzZSBpbiBwcHBvYXRtX3NlbmQoKSwgd2VcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMjEtXFx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzMtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTM1LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzY6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzctXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXFx0ICogZmVhciBvZiByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2UgY2xlYXIgdGhlIEJMT0NLRUQgZmxhZyBqdXN0IGFzIHdlXFxubmV0L2F0bS9wcHBvYXRtLmM6MTQ0OlxcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTQ1LVxcdCAqXFxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2OlxcdCAqIEluIGZhY3QgaXQncyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDctXFx0ICogd2hpbGUgaG9sZGluZyB0aGUgY2hhbm5lbC1cXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDgtXFx0ICogY2FsbGVkIGJ5IHRoZSB0YXNrbGV0IHdpbGwgKmFsc28qIGdyYWIgdGhhdCBsb2NrLiBTbyBldmVuIGlmIGFub3RoZXJcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDk6XFx0ICogQ1BVIGlzIGluIHBwcG9hdG1fc2VuZCgpIHJpZ2h0IG5vdywgdGhlIHRhc2tsZXQgaXNuJ3QgZ29pbmcgdG8gcmFjZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE1MC1cXHQgKiB3aXRoIGl0LiBUaGUgd2FrZXVwICp3aWxsKiBoYXBwZW4gYWZ0ZXIgdGhlIG90aGVyIENQVSBpcyBzYWZlbHkgb3V0XFxubmV0L2F0bS9wcHBvYXRtLmM6MTUxOlxcdCAqIG9mIHBwcG9hdG1fc2VuZCgpIGFnYWluLlxcbm5ldC9hdG0vcHBwb2F0bS5jLTE1Mi1cXHQgKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1MzpcXHQgKiBTbyBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpIGhhcyBhbHJlYWR5IHNldCB0aGUgQkxPQ0tFRCBiaXQgYW5kXFxubmV0L2F0bS9wcHBvYXRtLmMtMTU0LVxcdCAqIGl0IGFib3V0IHRvIHJldHVybiwgdGhhdCdzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1NTpcXHQgKiBoYXBwZW4gbGF0ZXIuIEFuZCBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpICpoYXNuJ3QqIHNldCB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTYtXFx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0J3MgZmluZSB0b28gYmVjYXVzZSBvZiB0aGUgZG91YmxlIGNoZWNrIGluXFxubmV0L2F0bS9wcHBvYXRtLmM6MTU3OlxcdCAqIHBwcG9hdG1fbWF5X3NlbmQoKSB3aGljaCBpcyBjb21tZW50ZWQgdGhlcmUuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTU4LVxcdCAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTY2LSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE2OC17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTY5OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzAtXFx0cHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xODAtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxODE6c3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTgyLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxODM6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXFx0cHJfZGVidWcoXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xODktXFx0XFx0bW9kdWxlID0gcHZjYy1cXHUwMDNlb2xkX293bmVyO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE5MDpcXHRcXHRwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE5MS1cXHRcXHRhdG12Y2MtXFx1MDAzZXB1c2goYXRtdmNjLCBOVUxMKTtcXHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMzMtXFxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzNS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTYtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNTc6XFx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI1OC1cXHQgKiBsYXN0IHBhY2tldCBpbiB0aGUgcXVldWUsICpqdXN0KiBiZWZvcmUgd2Ugc2V0IHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjQtXFx0ICogcnVuIHRoZSB3YWtldXAgdGFza2xldC4gQW5vdGhlciB3YWtldXAgd2lsbCBuZXZlciBodXJ0Llxcbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcXHQgKiBJZiBwcHBvYXRtX3BvcCgpIGlzIHJ1bm5pbmcgYnV0IGhhc24ndCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI2Ni1cXHQgKiBzcGFjZSBvbiB0aGUgcXVldWUgeWV0LCB0aGVuIGl0IGhhc24ndCBjaGVja2VkIHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjktXFx0ICogdGFraW5nIHRoZSBQUFAgY2hhbm5lbCdzIC1cXHUwMDNlZG93bmwgbG9jaywgd2hpY2ggaXMgaGVsZCBieSB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNzA6XFx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXFxubmV0L2F0bS9wcHBvYXRtLmMtMjcxLVxcdCAqIHdhaXQgZm9yIHVzIHRvIGZpbmlzaC5cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI4OC0jZGVmaW5lIERST1BfUEFDS0VUIDFcXG5uZXQvYXRtL3BwcG9hdG0uYzoyODk6c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI5MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6MjkxOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0yOTItXFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNC1cXHRcXHR9XFxubmV0L2F0bS9wcHBvYXRtLmM6MzI1OlxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG5uZXQvYXRtL3BwcG9hdG0uYy0zMjYtXFx0XFx0XFx0Z290byBub3NwYWNlO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzI5LVxcdGNhc2UgZV92YzpcXG5uZXQvYXRtL3BwcG9hdG0uYzozMzA6XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMS1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zNTktLyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzozNjA6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxubmV0L2F0bS9wcHBvYXRtLmMtMzYxLVxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzczLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM3NDpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcXG5uZXQvYXRtL3BwcG9hdG0uYzozNzU6XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxubmV0L2F0bS9wcHBvYXRtLmM6Mzc2OlxcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny19O1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OC1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG5uZXQvYXRtL3BwcG9hdG0uYy0zODAte1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MS1cXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM4MjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzgzLVxcdGludCBlcnI7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MDAtXFx0cHZjYy1cXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDAxOlxcdHB2Y2MtXFx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDAyLVxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDAzOlxcdHB2Y2MtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9hdG1fb3BzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQwNC1cXHRwdmNjLVxcdTAwM2VjaGFuLm10dSA9IGF0bXZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQwNS1cXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQwNjpcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00MDctXFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDEyLVxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTM6XFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxNDpcXHRhdG12Y2MtXFx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxNTpcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDE2LVxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MjgtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6NDI5OnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzMC1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzNC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0MzU6XFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcXHUwMDI2XFx1MDAyNiBhdG12Y2MtXFx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzNi1cXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ3LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ0ODpcXHRcXHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ5LVxcdFxcdH1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ1OS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NjA6c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDYxLVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2F0bS9wcHBvYXRtLmM6NDYyOlxcdC5pb2N0bFxcdD0gcHBwb2F0bV9pb2N0bCxcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjMtfTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjQtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY1OnN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2Ni17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDY3OlxcdHJlZ2lzdGVyX2F0bV9pb2N0bChcXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2OC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzE6c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Mi17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDczOlxcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc0LX1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NzUtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDc2Om1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDc3Om1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDoyOC45MDQ3MTMxODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY0OTI5MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFBQUE9BVE0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBzeW1ib2wgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBPQVRNLiBUbyBkbyB0aGlzLCBJJ2xsIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBuZXQvYXRtL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlIHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGFuZCBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgUFBQT0FUTSBpcyBjb250cm9sbGVkIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGFsc28gdml0YWw7IHRoZXkgY2FuIGxlYWQgdG8gcmlwcGxlIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIEknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjMwLjk2OTY0NTY4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQVRNX0JSMjY4NFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgQVRNIFBWQ3MgY2FuIGNhcnJ5IGV0aGVybmV0IFBEVXMgYWNjb3JkaW5nIHRvIFJGQzI2ODQgKGZvcm1lcmx5IDE0ODMpXFxuICAyNzpcXHRcXHQgIFRoaXMgZGV2aWNlIHdpbGwgYWN0IGxpa2UgYW4gZXRoZXJuZXQgZnJvbSB0aGUga2VybmVscyBwb2ludCBvZiB2aWV3LFxcbiAgMjg6XFx0XFx0ICB3aXRoIHRoZSB0cmFmZmljIGJlaW5nIGNhcnJpZWQgYnkgQVRNIFBWQ3MgKGN1cnJlbnRseSAxIFBWQy9kZXZpY2UpLlxcbiAgMjk6XFx0XFx0ICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIG92ZXIgRFNMIGxpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbWVjaGFuaXNtIGZvciB1c2VycyB3aG8gbmVlZCB0byB0ZXJtaW5hdGUgYVxcbiAgMzY6XFx0XFx0ICBsYXJnZSBudW1iZXIgb2YgSVAtb25seSB2Y2Mncy4gIERvIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IGFyZSBzdXJlXFxuICAzNzpcXHRcXHQgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MzAuOTY5NzIxMzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwOTkyMTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldC9BVE0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gYG5ldC9hdG0vS2NvbmZpZ2Agbm93LiBJdCdzIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBVE0gbmV0d29ya2luZyB3aXRoaW4gdGhpcyBidWlsZC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRocm91Z2ggdGhlIHJlbWFpbmluZyBlbnRyaWVzIHdpdGhpbiB0aGlzIEtjb25maWcgZmlsZSwgYXNzZXNzaW5nIHRoZWlyIHJlbGV2YW5jZSBhbmQgaW50ZXJwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZWFjaCBvcHRpb24gaW1wYWN0cyB0aGUgb3ZlcmFsbCBBVE0gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBwcmVjaXNlIGZlYXR1cmVzIGJlaW5nIGV4cG9zZWQsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgQVRNIGRyaXZlcnMgYW5kIHByb3RvY29sIHN1cHBvcnQgYW5kIGhvdyBpdCBhbGwgdGllcyB0b2dldGhlciB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjM1LjU3OTY0NDY4MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDgwLCJFcnJvciI6ImZpbGUgbmV0L2F0bS9LY29uZmlnIGRvZXMgbm90IGhhdmUgbGluZSA4MSwgaXQgaGFzIG9ubHkgMzcgbGluZXMiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImZpbGUgbmV0L2F0bS9LY29uZmlnIGRvZXMgbm90IGhhdmUgbGluZSA4MSwgaXQgaGFzIG9ubHkgMzcgbGluZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MzUuNTc5NzA2MzgyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDQ0NjM3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIERvd24gUFBQT0FUTSBpbiB0aGUgS2NvbmZpZyBUcmVlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgUFBQT0FUTSB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcCBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSAqZXhhY3RseSogd2hlcmUgUFBQT0FUTSBpcyBjb250cm9sbGVkIC0gd2hpY2ggY29uZmlnIG9wdGlvbiBlbmFibGVzIGl0LCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGVuY29tcGFzc2VzIGl0LiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgXCJQUFBPQVRNXCIgYWNyb3NzIHRoZSBlbnRpcmUgS2NvbmZpZyB0cmVlLCB1c2luZyB3aGF0ZXZlciB0b29scyBJIGhhdmUgb24gaGFuZCDigJMgbGlrZWx5IGBncmVwYCBvciBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAuIEknbGwgcHJvYmFibHkgc3RhcnQgdGhlIHNlYXJjaCBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGtlcm5lbCBzb3VyY2UsIG9yIG1heWJlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBkaXJlY3RvcmllcyBpZiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgYWJvdXQgd2hlcmUgaXQgbWlnaHQgYmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdXJyb3VuZGluZyBjb250ZXh0IOKAkyBjb21tZW50cywgY29uZGl0aW9uYWxzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHZhbHVlcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyB0aGF0IG1pZ2h0IHBvaW50IG1lIHRvd2FyZHMgc3BlY2lmaWMgZGlyZWN0b3JpZXMgb3IgbW9kdWxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBleHBlY3QgdG8gZmluZCBhIG1haW4gY29uZmlnIG9wdGlvbiBhbmQgbWF5YmUgYSBmZXcgc3ViLW9wdGlvbnMsIG1heWJlIGV2ZW4gYSBtb2R1bGUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBwYXRoIGNvbXBsZXRlbHkuIE9uY2UgSSd2ZSBmb3VuZCBpdCwgSSBjYW4gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY4MCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MzguMDg0MTczNDU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzNzY2NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBQUE9BVE1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZz0xNjc9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxcbmFyY2gvbWlwcy9jb25maWdzL2dwcl9kZWZjb25maWc6MTY4OkNPTkZJR19QUFBPQVRNPW1cXG5hcmNoL21pcHMvY29uZmlncy9ncHJfZGVmY29uZmlnLTE2OS1DT05GSUdfUFBQT0U9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc9MjgxPUNPTkZJR19QUFBfTVVMVElMSU5LPXlcXG5hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZzoyODI6Q09ORklHX1BQUE9BVE09bVxcbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnLTI4My1DT05GSUdfUFBQT0U9bVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZz00NzQ9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6NDc1OkNPTkZJR19QUFBPQVRNPW1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnLTQ3Ni1DT05GSUdfUFBQT0U9bVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaC0xMC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MTE6I2RlZmluZSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUXFx0KDApXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oOjEyOiNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfVkNcXHRcXHQoMSlcXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MTM6I2RlZmluZSBQUFBPQVRNX0VOQ0FQU19MTENcXHRcXHQoMilcXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmgtMTQtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg9MjA9c3RydWN0IGF0bV9iYWNrZW5kX3BwcCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIxLVxcdGF0bV9iYWNrZW5kX3RcXHRiYWNrZW5kX251bTtcXHQvKiBBVE1fQkFDS0VORF9QUFAgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MjI6XFx0aW50XFx0XFx0ZW5jYXBzO1xcdFxcdC8qIFBQUE9BVE1fRU5DQVBTXyogKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmgtMjMtfTtcXG4tLVxcbm5ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbm5ldC9hdG0vTWFrZWZpbGUtMTEtXFxubmV0L2F0bS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT0FUTSkgKz0gcHBwb2F0bS5vXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz01MD1lbnVtIHBwcG9hdG1fZW5jYXBzIHtcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MTpcXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbm5ldC9hdG0vcHBwb2F0bS5jOjUyOlxcdGVfdmMgPSBQUFBPQVRNX0VOQ0FQU19WQyxcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MzpcXHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcXG5uZXQvYXRtL3BwcG9hdG0uYy01NC19O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mzc5PXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODYtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubmV0L2F0bS9wcHBvYXRtLmM6Mzg3OlxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4ODpcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDozOS44Mzc5NDk2ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MjcyMjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBQUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBQUFAgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBsb2NhdGVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGNvbnRyb2xsaW5nIFBQUCBmdW5jdGlvbmFsaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbW9kdWxlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBQUFAgY29uZmlndXJhdGlvbiBhbmQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnVydGhlciBhZGp1c3RtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDo0Mi4wODA2NzU1NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjQyLjA4MDc1MDU4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjM3NjE2ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBQUE9BVE0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG5ldC9hdG0vcHBwb2F0bS5jYCwgd2FycmFudHMgY2xvc2VyIHNjcnV0aW55IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgUFBQT0FUTSBpcyBldmVuIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gWWVzLCBpdCdzIGZlYXNpYmxlLiBJIGNhbiBjcmVhdGUgQVRNIHNvY2tldHMgKEFGX0FUTVNWQy9BRl9BVE1QVkMpLCBBVE0gdmlydHVhbCBkZXZpY2VzLCBhbmQgYXR0YWNoIFBQUE9BVE0gdXNpbmcgaW9jdGxzIGxpa2UgYEFUTV9TRVRCQUNLRU5EYCBvciBgQVRNX05FV0JBQ0tFTkRJRmAuIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIHJlbGV2YW50IHN5c3RlbSBjYWxscywgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucyBJIGNhbiBnZW5lcmF0ZSB0cmFmZmljIHRoYXQgd2lsbCBoaXQgYHBwcG9hdG1fc2VuZGAgKHZpYSBgLnN0YXJ0X3htaXRgKS5cblxuTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiBsb2dpYyB3aXRoIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAuIFRoaXMgc2lnbmlmaWVzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gc2tiIGhhbmRsaW5nLCBtZW1vcnkgYWxsb2NhdGlvbiwgaGVhZHJvb20gbWFuYWdlbWVudCwgYW5kLCBpbXBvcnRhbnRseSwgc29ja2V0IGxvY2tpbmcvdW5sb2NraW5nIGFuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSBjb2RlIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdWJzeXN0ZW0uXG5cbkNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGltcGFjdCBvbiB0aGVzZSBsb3ctbGV2ZWwgbmV0d29ya2luZyBwcmltaXRpdmVzLCBhbG9uZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHNvY2tldCBsb2NraW5nLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgc2tiIGJ1ZmZlcnMgYW5kIGFyZSBpbnZvbHZlZCBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgUFBQIG92ZXIgQVRNIGNvbnRleHQsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy5cblxuRnJvbSBhIHN5bWJvbCBwZXJzcGVjdGl2ZSwgYHBwcG9hdG1fc2VuZGAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBCdXQsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIGBwcHBvYXRtLmNgLiBTbywgSSdsbCBrZWVwIHRoZSBmb2xsb3dpbmcgaW4gbWluZDogYHBwcG9hdG1fc2VuZGAsIGBwcHBvYXRtX2Fzc2lnbl92Y2NgLCBgcHBwb2F0bV9pb2N0bGAsIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAsIGBwcHBvYXRtX21heV9zZW5kYCwgYHBwcG9hdG1fcHVzaGAgYW5kIGBwcHBvYXRtX3BvcGAuIGBwcHBvYXRtX3NlbmRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGJlIHRhcmdldGVkIGJ1dCBJIHNob3VsZCB0ZXN0IHRoZSBvdGhlcnMgdG9vLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgYENPTkZJR19QUFBPQVRNYCwgYENPTkZJR19BVE1gLCBhbmQgYENPTkZJR19QUFBgIGFyZSBhbGwgaW1wb3J0YW50LiBJIGtub3cgUFBQT0FUTSBkZXBlbmRzIG9uIEFUTSwgYW5kIEknbGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgdG8gc2VlIGlmIFBQUE9BVE0gaGFzIGFueSBoYXJkIGRlcGVuZGVuY3kgb24gUFBQLiBUaGlzIGNvbmZpcm1zIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIGlzIGVuYWJsZWQgYW5kIGFjY2Vzc2libGUgdG8gdHJpZ2dlciB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6NDguMzE4MzY5ODk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM3ODgxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBQUFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6NDguMzY0NzU3ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MzU3Nzg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFBQUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBQUFAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIGxpbmVzIDEgdG8gNTAuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIG91dGxpbmUgdGhlIGNvcmUsIGZ1bmRhbWVudGFsIG9wdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGJhc2UgUFBQIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjay4gSSdtIGxvb2tpbmcgZm9yIHRoZSB2ZXJ5IGJ1aWxkaW5nIGJsb2NrcyDigJMgdGhpbmdzIGxpa2UgdGhlIGFiaWxpdHkgdG8gZW5hYmxlIG9yIGRpc2FibGUgUFBQIHN1cHBvcnQgZW50aXJlbHksIHBlcmhhcHMgZGlmZmVyZW50IHZhcmlhbnRzIG9yIGZsYXZvcnMgb2YgUFBQLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWcgYmxvY2ssIGFueSBjb25kaXRpb25hbHMsIGFuZCB0aGUgcGhyYXNpbmcgb2YgdGhlIGhlbHAgdGV4dC4gSSdtIGFsc28gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIGRlZmF1bHQgc2VsZWN0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBiZWZvcmUgSSBkZWx2ZSBpbnRvIG1vcmUgc3BlY2lmaWMgZmVhdHVyZXMuIFRoaXMgaW5pdGlhbCBleGFtaW5hdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgYmFzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzdWJzZXF1ZW50LCBtb3JlIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFBQUC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDo1MC44MjgzMzg2ODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG4gIDQxOlxcdFxcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xcbiAgNDI6XFx0XFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXFxuICA0MzpcXHRcXHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXFxuICA0NDpcXHRcXHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbid0IHN1cHBvcnQgaXQsXFxuICA0NTpcXHRcXHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0ICBUaGUgUFBQIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIChcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiLFxcbiAgNDg6XFx0XFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcXG4gIDQ5OlxcdFxcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjUwLjgyODQxMTQwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjczMTQ4MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgd2hvbGUgc2VjdGlvbiBpcyBndWFyZGVkIGJ5IGFuIGBpZiBQUFAgLi4uIGVuZGlmYCBibG9jay4gVGhhdCB0ZWxscyBtZSB0aGUgY29yZSBQUFAgZnVuY3Rpb25hbGl0eSBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgYW55dGhpbmcgd2l0aGluIGl0IHRvIGV2ZW4gYmUgY29uc2lkZXJlZC4gQW5kIHRoZW4sIGRpdmluZyBkZWVwZXIsIEkgc2VlIGBQUFBPQVRNYCBpcyBleHBsaWNpdGx5IGRlcGVuZGVudCBvbiAqYm90aCogYFBQUGAgYW5kIGBBVE1gLiBUaGF0J3MgbG9naWNhbDsgeW91IG5lZWQgdGhlIFBvaW50LXRvLVBvaW50IFByb3RvY29sIGluZnJhc3RydWN0dXJlICphbmQqIHRoZSBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSBzdXBwb3J0IGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yay4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBzbyBJJ2xsIHBpdm90IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agbm93LiBHb3R0YSBzZWUgd2hhdCBvdGhlciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6NTUuMTAxNTYxNDQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0ODY5Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjU2LjgzNjQzOTUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODE1OTc0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBJbnNwZWN0aW9uOiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MjguIFRoZSByZWFzb24gSSdtIGhvbmluZyBpbiBvbiB0aGF0IGxvY2F0aW9uIGlzIGxpa2VseSBiZWNhdXNlIEknbSB0cm91Ymxlc2hvb3RpbmcsIG9yIHBlcmhhcHMgY29uZmlndXJpbmcgYSBuZXcgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgbGluZSBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGVuY2xvc2luZyBibG9jayDigJMgYSBgY29uZmlnYCBvcHRpb24sIGFuIGBpZmAgc3RhdGVtZW50LCBhIGBzZWxlY3RgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVW5kZXJzdGFuZGluZyB0aGlzIGVuY2xvc2luZyBjb250ZXh0IGlzIGNydWNpYWwgYmVjYXVzZSBpdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBvcHRpb24gYXQgbGluZSA1MjggKGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIG9wdGlvbnMpIHdpbGwgYmUgY29uc2lkZXJlZCBvciBlbmFibGVkLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjU4LjgxODAzOTc4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcXCJcXG4gNTIxOlxcdFxcbiA1MjI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXFwiXFxuIDUyMzpcXHRcXG4gNTI0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXFwiXFxuIDUyNTpcXHRcXG4gNTI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbiA1Mjc6XFx0XFxuIDUyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbiA1Mjk6XFx0XFxuIDUzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1xcXCJcXG4gNTMxOlxcdFxcbiA1MzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuIDUzMzpcXHRcXG4gNTM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcXFwiXFxuIDUzNTpcXHRcXG4gNTM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1xcXCJcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZ1xcXCJcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDo1OC44MTgxMTU4NjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2MDQ2MDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQUFBPQVRNIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0byBhbmFseXplLiBGaXJzdCwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGxvb2sgc3RyYWlnaHRmb3J3YXJkOiBgUFBQT0FUTWAsIGBBVE1gLCBgUFBQYCwgYW5kIGBORVRERVZJQ0VTYC4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBQUFAgb3ZlciBBVE0gbmV0d29ya2luZy4gTmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIHNlZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGFuZCBgcHBwb2F0bV9pb2N0bGAuIERlZmluaXRlbHkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aG9zZSwgZXNwZWNpYWxseSBgcHBwb2F0bV9zZW5kYCBzaW5jZSB0aGF0J3MgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9uIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AuIEl0J3MgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UuXG5cblJpZ2h0LCB0aW1lIHRvIHBhY2thZ2UgYWxsIHRoaXMgaW50byB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJ2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIHRoaXMgcGF0Y2ggdG91Y2hlcyBjcml0aWNhbCBuZXR3b3JrIHN0YWNrIGNvZGUsIHNvIGZ1enppbmcgaXMgd2FycmFudGVkLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3Qgd2lsbCBiZSB0aGUgZm91ciBjb25maWd1cmF0aW9ucyBtZW50aW9uZWQgZWFybGllci4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJJ2xsIGluY2x1ZGUgdGhvc2UgdGhyZWUga2V5IGZ1bmN0aW9uczogYHBwcG9hdG1fc2VuZGAsIGBwcHBvYXRtX2Fzc2lnbl92Y2NgLCBhbmQgYHBwcG9hdG1faW9jdGxgLiBGaW5hbGx5LCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBhIGNvbmNpc2Ugc3VtbWFyeTogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gYW5kIHNvY2tldCB1bmxvY2tpbmcgbG9naWMgaW4gYHBwcG9hdG1fc2VuZGAgYnkgcmVwbGFjaW5nIG1hbnVhbCByZWFsbG9jYXRpb24gd2l0aCBgc2tiX2Nvd19oZWFkKClgLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgaGFuZGxpbmcsIHBhY2tldCB0cmFuc21pc3Npb24sIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgUFBQIG92ZXIgQVRNIG5ldHdvcmtpbmcgZHJpdmVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS5cIlxuXG5Pa2F5LCBqdXN0IGEgcXVpY2sgZmluYWwgc2FuaXR5IGNoZWNrLi4uIGNvbmZpZ3VyYXRpb25zLCBzeW1ib2xzLCByZWFzb25pbmcsIGFsbCBpbiBvcmRlci4gTG9va3MgZ29vZC4gVGltZSB0byBzZXQgdGhvc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwOTEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDIuMTc4NTc5MDE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4ODg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJORVRERVZJQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInBwcG9hdG1faW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIk5FVERFVklDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiLFxuICAgIFwicHBwb2F0bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBwcHBvYXRtX3NlbmQgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2JfcmVhbGxvY19oZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBza2JfY293X2hlYWQuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBQUFAgb3ZlciBBVE0gZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBhbmQgaW9jdGwgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDIuMjU0NDc1MjI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY2NjA1NDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQxOjAyLjI1NTAwNTUxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NjY1NTIwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBtYW51YWwgc2tiIGhlYWRyb29tIHJlYWxsb2NhdGlvbiBsb2dpYyB3aXRoIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgaW4gYHBwcG9hdG1fc2VuZCgpYC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczpcXG4tIFRoZSBoZWFkcm9vbSBhbGxvY2F0ZWQgb3IgZW5zdXJlZCB2aWEgYHNrYl9jb3dfaGVhZCgpYCBpcyBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgd2l0aCBgbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTilgLlxcbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgY2hlY2tzLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBuZWl0aGVyIG9mIHdoaWNoIGFwcGxpZXMgaGVyZS5cXG4tIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlLCBoZWFkcm9vbSBib3VuZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyM2Q3MjhlZTcwMjEyMTBiOTJhODgzODE4MDc2ZjcyMTA3YTJjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjQwOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uNGNlN2ZhNmU0OTNlOSAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTMxNywyMSArMzE3LDEyIEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHN3aXRjaCAocHZjYy1cdTAwM2VlbmNhcHMpIHtcdFx0LyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovXG4gXHRjYXNlIGVfbGxjOlxuLVx0XHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIExMQ19MRU4pIHtcbi1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcbi1cdFx0XHRuID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTtcbi1cdFx0XHRpZiAobiAhPSBOVUxMIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLVx1MDAzZXRydWVzaXplKSkge1xuLVx0XHRcdFx0a2ZyZWVfc2tiKG4pO1xuLVx0XHRcdFx0Z290byBub3NwYWNlO1xuLVx0XHRcdH1cbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHNrYiA9IG47XG4tXHRcdFx0aWYgKHNrYiA9PSBOVUxMKSB7XG4tXHRcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHRcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4rXHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4rXHRcdH1cbitcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4gXHRcdFx0Z290byBub3NwYWNlO1xuIFx0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiBcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MTowMi4yNTUwMDYzOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc1MTEyMTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gSSdsbCBzdGFydCBieSBzeXN0ZW1hdGljYWxseSBhbmFseXppbmcgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgbGV2ZXJhZ2luZyBteSB1c3VhbCB0b29sa2l0LiBNeSBmaXJzdCB0YXJnZXQgd2lsbCBiZSBgbmV0L2F0bS9wcHBvYXRtLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE3LiBUaGlzIHNlY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmVzaWRlcywgb3IgYXQgbGVhc3QsIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbW9zdCByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGlzIHBhdGNoLiBJcyBpdCBhIGJ1ZyBmaXgsIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBhIG5ldyBmZWF0dXJlPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IC0gZnVuY3Rpb24gY2FsbHMsIHZhcmlhYmxlIHVzYWdlLCBhbmQgY29tbWVudHMgLSB0byBwaWVjZSB0b2dldGhlciB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGFsdGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2FsIGNvbnRleHQgZmlyc3QsIHdpbGwgdGhlbiBhbGxvdyBtZSB0byBjb25zaWRlciB0aGUgYnJvYWRlciBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDcuMDA2MTMyNjcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xcbiAyOTI6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjID0gcHZjYy1cXHUwMDNlYXRtdmNjO1xcbiAyOTY6XFx0XFx0cHJfZGVidWcoXFxcIihza2I9MHglcCwgdmNjPTB4JXApXFxcXG5cXFwiLCBza2IsIHB2Y2MtXFx1MDAzZWF0bXZjYyk7XFxuIDI5NzpcXHRcXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4gMjk4OlxcdFxcdFxcdCh2b2lkKSBza2JfcHVsbChza2IsIDEpO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHR2Y2MgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYztcXG4gMzAxOlxcdFxcdGJoX2xvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMwMjpcXHRcXHRpZiAoc29ja19vd25lZF9ieV91c2VyKHNrX2F0bSh2Y2MpKSkge1xcbiAzMDM6XFx0XFx0XFx0LypcXG4gMzA0OlxcdFxcdFxcdCAqIE5lZWRzIHRvIGhhcHBlbiAoYW5kIGJlIGZsdXNoZWQsIGhlbmNlIHRlc3RfYW5kXykgYmVmb3JlIHdlIHVubG9ja1xcbiAzMDU6XFx0XFx0XFx0ICogdGhlIHNvY2tldC4gSXQgbmVlZHMgdG8gYmUgc2VlbiBieSB0aGUgdGltZSBvdXIgLVxcdTAwM2VyZWxlYXNlX2NiIGdldHNcXG4gMzA2OlxcdFxcdFxcdCAqIGNhbGxlZC5cXG4gMzA3OlxcdFxcdFxcdCAqL1xcbiAzMDg6XFx0XFx0XFx0dGVzdF9hbmRfc2V0X2JpdChCTE9DS0VELCBcXHUwMDI2cHZjYy1cXHUwMDNlYmxvY2tlZCk7XFxuIDMwOTpcXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuIDMxMDpcXHRcXHR9XFxuIDMxMTpcXHRcXHRpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykgfHxcXG4gMzEyOlxcdFxcdCAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykpIHtcXG4gMzEzOlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzE0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMTU6XFx0XFx0XFx0cmV0dXJuIERST1BfUEFDS0VUO1xcbiAzMTY6XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRzd2l0Y2ggKHB2Y2MtXFx1MDAzZWVuY2Fwcykge1xcdFxcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xcbiAzMTk6XFx0XFx0Y2FzZSBlX2xsYzpcXG4gMzIwOlxcdFxcdFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xcbiAzMjE6XFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMjI6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMyMzpcXHRcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuIDMyNDpcXHRcXHRcXHR9XFxuIDMyNTpcXHRcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIDMyNjpcXHRcXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuIDMyNzpcXHRcXHRcXHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcXG4gMzI4OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjk6XFx0XFx0Y2FzZSBlX3ZjOlxcbiAzMzA6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMzE6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMzI6XFx0XFx0XFx0YnJlYWs7XFxuIDMzMzpcXHRcXHRjYXNlIGVfYXV0b2RldGVjdDpcXG4gMzM0OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzM1OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcXFxuXFxcIik7XFxuIDMzNjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzM3OlxcdFxcdFxcdHJldHVybiAxO1xcbiAzMzg6XFx0XFx0fVxcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XFxuIDM0MTpcXHRcXHRwcl9kZWJ1ZyhcXFwiYXRtX3NrYiglcCktXFx1MDAzZXZjYyglcCktXFx1MDAzZWRldiglcClcXFxcblxcXCIsXFxuIDM0MjpcXHRcXHRcXHQgc2tiLCBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZWRldik7XFxuIDM0MzpcXHRcXHRyZXQgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYy1cXHUwMDNlc2VuZChBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgc2tiKVxcbiAzNDQ6XFx0XFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xcbiAzNDU6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNDY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQ3OlxcdG5vc3BhY2U6XFxuIDM0ODpcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDM0OTpcXHRcXHQvKlxcbiAzNTA6XFx0XFx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcXG4gMzUxOlxcdFxcdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cXG4gMzUyOlxcdFxcdCAqL1xcbiAzNTM6XFx0XFx0aWYgKChwdmNjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NPTVBfUFJPVCkgXFx1MDAyNlxcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuIDM1NDpcXHRcXHQgICAgc2tiLVxcdTAwM2VkYXRhWy0xXSA9PSAnXFxcXDAnKVxcbiAzNTU6XFx0XFx0XFx0KHZvaWQpIHNrYl9wdXNoKHNrYiwgMSk7XFxuIDM1NjpcXHRcXHRyZXR1cm4gMDtcXG4gMzU3OlxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0LyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cXG4gMzYwOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbiAzNjE6XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuIDM2MjpcXHR7XFxuIDM2MzpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiAzNjQ6XFx0XFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuIDM2NTpcXHRcXHRcXHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxcbiAzNjY6XFx0XFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuIDM2NzpcXHRcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4gMzY4OlxcdFxcdFxcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuIDM2OTpcXHRcXHRcXHQgICAgPyAtRUZBVUxUIDogMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDcuMDA2MjM2NzEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwOTc5OTI5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIExMQyBlbmNhcHN1bGF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBQUFBvQVRNIGRyaXZlci4gSSBzZWUgdGhleSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBTaGFyZWQgb3IgQ2xvbmVkIGBza2Jgcy5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGNoZWNrZWQgaWYgdGhlcmUgd2FzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgYHNrYmAgdXNpbmcgYHNrYl9oZWFkcm9vbShza2IpYC4gSWYgbm90LCBpdCB3b3VsZCBhdHRlbXB0IHRvIHJlYWxsb2NhdGUgd2l0aCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgc2tiX2hlYWRyb29tYCBtaWdodCByZXBvcnQgZW5vdWdoIHNwYWNlICppbml0aWFsbHkqLCBidXQgaWYgdGhlIGBza2JgIHdhcyBzaGFyZWQgKGxpa2UgZnJvbSBhIGNsb25lKSBvciBoYWQgZXhpc3RpbmcgcmVmZXJlbmNlcywgdGhlbiBtb2RpZnlpbmcgaXRzIGhlYWQgKHdpdGggYG1lbWNweWAgb3IgcmVhbGxvY2F0aW9uKSB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIG9sZCBjb2RlIHdhcyB0cnlpbmcgdG8gaGFuZGxlIHRoaXMsIGJ1dCB0aGUgbG9naWMgd2FzIGEgYml0IGNvbnZvbHV0ZWQsIGVzcGVjaWFsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSByZWFsbG9jYXRlZCBgc2tiYCBpbiB0aGUgY29uZGl0aW9uYWwuXG5cblRoZSBuZXcgYXBwcm9hY2ggaXMgZmFyIGNsZWFuZXI6IGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAuIFRoaXMgZnVuY3Rpb24gZWxlZ2FudGx5IGhhbmRsZXMgdHdvIHRoaW5nczogMSkgaXQgZW5zdXJlcyB0aGF0IHRoZSBgc2tiYCBoYXMgZW5vdWdoIGhlYWRyb29tIChhbGxvY2F0aW5nIG1vcmUgaWYgbmVlZGVkKSBhbmQgMikgaWYgdGhlIGBza2JgIGlzIHNoYXJlZCwgaXQgbWFrZXMgYSBjb3B5IChDb3B5LU9uLVdyaXRlLCBvciBDT1cpIHRvIGVuc3VyZSB0aGF0IG1vZGlmaWNhdGlvbnMgYXJlIGlzb2xhdGVkLiBJZiBgc2tiX2Nvd19oZWFkYCBmYWlscywgd2UgdW5sb2NrLCBmcmVlIHRoZSBza2IsIGFuZCBkcm9wIHRoZSBwYWNrZXQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLlxuXG5BZnRlciB0aGUgYHNrYl9jb3dfaGVhZGAgY2FsbCwgd2UgY2hlY2sgYHBwcG9hdG1fbWF5X3NlbmRgIGFuZCBpZiB0aGF0J3MgZmFsc2UsIHdlIGdvIHRvIGBub3NwYWNlYC4gSWYgdGhhdCBjaGVjayBpcyBPSywgd2UgdGhlbiBwcm9jZWVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cblxuTm93LCBsZXQncyBhZGRyZXNzIGFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBgc2tiX2Nvd19oZWFkYCB0YWtlcyBjYXJlIG9mIHJlYWxsb2NhdGlvbiBvciB1bnNoYXJpbmcsIGNvcHlpbmcgZGF0YSBhcyBuZWNlc3NhcnkuIGBza2JfcHVzaGAgZXh0ZW5kcyB0aGUgZGF0YSBhcmVhIHRvd2FyZHMgdGhlIGhlYWRyb29tLCBhbmQgdGhlIGBtZW1jcHlgIHRoZW4gY29waWVzIHRoZSBgcHBwbGxjYCBoZWFkZXIgKHdoaWNoIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaW4gdGhlIGNvZGUgYnV0IGxvb2tzIHRvIGJlIGEgc3RhdGljIGNvbnN0IGFycmF5LCBzbyB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcykgaW50byB0aGlzIGFsbG9jYXRlZCBzcGFjZS4gSSdsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgYHBwcGxsY2AgZGVmaW5pdGlvbiBpbiB0aGUgc291cmNlIHRvIGJlIHN1cmUsIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG5ldyBhcHByb2FjaCBpcyBtb3JlIHJvYnVzdCBhbmQgc2ltcGxlciB0aGFuIHRoZSBwcmV2aW91cyB2ZXJzaW9uLiBJdCBlZmZlY3RpdmVseSByZXNvbHZlcyB0aGUgc2hhcmVkLWJ1ZmZlciBpc3N1ZXMgYW5kIG1ha2VzIHRoZSBsb2dpYyBtdWNoIG1vcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQxOjEzLjEwNDIzMjkxMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNzQwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwbGxjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jPTU2PXN0cnVjdCBwcHBvYXRtX3ZjYyB7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy04NS0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo4NjpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcXG5uZXQvYXRtL3BwcG9hdG0uYy04Ny0jZGVmaW5lIExMQ19MRU5cXHRcXHQoNClcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTE4MT1zdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE5OC1cXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBMTENfTEVOIHx8XFxubmV0L2F0bS9wcHBvYXRtLmM6MTk5OlxcdFxcdCAgICBtZW1jbXAoc2tiLVxcdTAwM2VkYXRhLCBwcHBsbGMsIExMQ19MRU4pKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIwMC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMjA3LVxcdFxcdH1cXG5uZXQvYXRtL3BwcG9hdG0uYzoyMDg6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IHNpemVvZihwcHBsbGMpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2F0bS9wcHBvYXRtLmM6MjA5OlxcdFxcdCAgICAhbWVtY21wKHNrYi1cXHUwMDNlZGF0YSwgcHBwbGxjLCBzaXplb2YocHBwbGxjKSkpIHtcXG5uZXQvYXRtL3BwcG9hdG0uYy0yMTAtXFx0XFx0XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gZV9sbGM7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMTMtXFx0XFx0fVxcbm5ldC9hdG0vcHBwb2F0bS5jOjIxNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gKHNpemVvZihwcHBsbGMpIC0gTExDX0xFTikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzoyMTU6XFx0XFx0ICAgICFtZW1jbXAoc2tiLVxcdTAwM2VkYXRhLCBcXHUwMDI2cHBwbGxjW0xMQ19MRU5dLFxcbm5ldC9hdG0vcHBwb2F0bS5jOjIxNjpcXHRcXHQgICAgc2l6ZW9mKHBwcGxsYykgLSBMTENfTEVOKSkge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTIxNy1cXHRcXHRcXHRwdmNjLVxcdTAwM2VlbmNhcHMgPSBlX3ZjO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mjg5PXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNi1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxubmV0L2F0bS9wcHBvYXRtLmM6MzI3OlxcdFxcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMyOC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MTMuMTUwNjEyNDI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Njk4OTE0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgbGVha3MuIFRoaXMgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoYXQgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCBtZXNzIHdpdGggYHNrYl9jb3dfaGVhZGAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLCB0aGF0J3MgZ29vZC4gVGhlIGNyaXRpY2FsIHRoaW5nIEkgc2VlIGlzIHRoYXQgYW55IG5ld2x5IGFsbG9jYXRlZCBoZWFkcm9vbSwgb3IgZGF0YSBwdXNoZWQgaW50byBpdCwgaXMgaW1tZWRpYXRlbHkgb3ZlcndyaXR0ZW4gd2l0aCBgbWVtY3B5YC4gVGhhdCdzIGEgaHVnZSBwb3NpdGl2ZS4gSSdtIG5vdCBzZWVpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgYXJlIHRoZW4gKnJlYWQqLiBGdXJ0aGVybW9yZSwgdGhlcmUncyBubyBtb2RpZmljYXRpb24gb3IgZXhwb3N1cmUgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIHRocm91Z2ggZnVuY3Rpb25zIGxpa2UgYGNvcHlfdG9fdXNlcmAsIG9yIGV2ZW4gc29tZXRoaW5nIHNuZWFreSBsaWtlIGEgbmV0bGluayBza2Igb3IgYW4gaW9jdGwgYXJndW1lbnQuIFRoaXMgbG9va3MgbGlrZSBwdXJlbHkgbmV0d29yayBza2IgaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggQ09XIGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBzaGFyZWQgc2tiIHNhZmV0eSwgd2hpY2ggaXMgc21hcnQgdG8gZG8uIERvdWJsZSBjaGVja2luZyB0aGF0IGl0IGRvZXNuJ3QgY29ycnVwdCBzaGFyZWQgc2ticywgb3IgaGF2ZSBpbXByb3BlciBoYW5kbGluZy4gQW55IHNrYiBtYW5hZ2VtZW50IGlzc3VlcyBsaWtlIGRvdWJsZSBmcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzICpzaG91bGQqIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOLCB3aGljaCBpcyBhIGdvb2Qgc2FmZXR5IG5ldC5cblxuTm93LCBsZXQncyB0cmlwbGUtY2hlY2sgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gUmVtZW1iZXIsIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqa2VybmVsLXRvLXVzZXIqIG1lbW9yeSBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOb3BlLCBub3QgaGVyZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8qKiBObywgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgb2YgdGhhdC5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vdCBhIGNoYW5jZS4gVGhpcyBsb29rcyBzb2xpZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZS4gVGhlIHJpc2sgaGVyZSBpcyB3aXRoIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGNhdWdodCB3aXRoIEtBU0FOLCBhbmQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoYXQuIFRpbWUgdG8gZmlyZSB1cCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBkb2N1bWVudCB0aGlzIHdpdGggY2xlYXIgcmVhc29uaW5nLCBlbXBoYXNpemluZyB0aGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjI1LCJPdXRwdXRUb2tlbnMiOjIzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MToxNy45MjA1MDcyOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIG1hbnVhbCBza2IgaGVhZHJvb20gcmVhbGxvY2F0aW9uIGxvZ2ljIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCBpbiBgcHBwb2F0bV9zZW5kKClgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxcbi0gVGhlIGhlYWRyb29tIGFsbG9jYXRlZCBvciBlbnN1cmVkIHZpYSBgc2tiX2Nvd19oZWFkKClgIGlzIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB3aXRoIGBtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKWAuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxcbi0gUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUsIGhlYWRyb29tIGJvdW5kcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6XFxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGNoZWNrcy5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgbmVpdGhlciBvZiB3aGljaCBhcHBsaWVzIGhlcmUuXFxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownzblr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 09:11:34 +0000 UTC FinishedAt: 2026-09-08 09:41:19 +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": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPPOATM", "ATM", "PPP", "NETDEVICES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPPOATM", "ATM", "PPP", "NETDEVICES" ], "series_id": "626bfae5-b417-4297-ac88-3d03e373db5c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pppoatm_send", "pppoatm_assign_vcc", "pppoatm_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtORVRERVZJQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBwcHBvYXRtX3NlbmQgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2JfcmVhbGxvY19oZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBza2JfY293X2hlYWQuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBQUFAgb3ZlciBBVE0gZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBhbmQgaW9jdGwgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIyM2Q3MjhlZTcwMjEyMTBiOTJhODgzODE4MDc2ZjcyMTA3YTJjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjQwOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjRjZTdmYTZlNDkzZTkgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC0zMTcsMjEgJiM0MzszMTcsMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiYjNDM7XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuJiM0MztcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4gXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBPQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7TkVUREVWSUNFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2Fzc2lnbl92Y2MmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMjNkNzI4ZWU3MDIxMjEwYjkyYTg4MzgxODA3NmY3MjEwN2EyY2IyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwOTo0MDoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uNGNlN2ZhNmU0OTNlOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTMxNywyMSAmIzQzOzMxNywxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCiAJY2FzZSBlX2xsYzoKLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgTExDX0xFTikgewotCQkJc3RydWN0IHNrX2J1ZmYgKm47Ci0JCQluID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTsKLQkJCWlmIChuICE9IE5VTEwgJmFtcDsmYW1wOwotCQkJICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tJmd0O3RydWVzaXplKSkgewotCQkJCWtmcmVlX3NrYihuKTsKLQkJCQlnb3RvIG5vc3BhY2U7Ci0JCQl9Ci0JCQljb25zdW1lX3NrYihza2IpOwotCQkJc2tiID0gbjsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCWJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTsKLQkJCQlyZXR1cm4gRFJPUF9QQUNLRVQ7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLSZndDt0cnVlc2l6ZSkpCiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHsKJiM0MzsJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwkJfQomIzQzOwkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQogCQkJZ290byBub3NwYWNlOwogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjgKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyB0b3VjaGVkIGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQVRNIG92ZXIgUFBQb0UsIHNwZWNpZmljYWxseSB0aGUgc2VuZGluZyBwYXRoLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLgoKRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcHBvYXRtX3NlbmRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBQUFBvQS9QUFBvRSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHJlYWRpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYCBkaXJlY3RseSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhlbiBtYWtlIGEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgZmlsZSB0byBzZWUgdGhlIGJ1aWxkIG9wdGlvbnMuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBkbyB0aGF0LCBhbmQgbWlnaHQgdXNlIGBncmVwcGVyYCBvciBjaGVjayBgbmV0L2F0bS9LY29uZmlnYCB0byBwaW5wb2ludCBhbnl0aGluZyByZWxldmFudC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgYmFzZWxpbmUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3BwcG9hdG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XHR2Y2MgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjO1xuIDMwMTpcdFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMDI6XHRcdGlmIChzb2NrX293bmVkX2J5X3VzZXIoc2tfYXRtKHZjYykpKSB7XG4gMzAzOlx0XHRcdC8qXG4gMzA0Olx0XHRcdCAqIE5lZWRzIHRvIGhhcHBlbiAoYW5kIGJlIGZsdXNoZWQsIGhlbmNlIHRlc3RfYW5kXykgYmVmb3JlIHdlIHVubG9ja1xuIDMwNTpcdFx0XHQgKiB0aGUgc29ja2V0LiBJdCBuZWVkcyB0byBiZSBzZWVuIGJ5IHRoZSB0aW1lIG91ciAtXHUwMDNlcmVsZWFzZV9jYiBnZXRzXG4gMzA2Olx0XHRcdCAqIGNhbGxlZC5cbiAzMDc6XHRcdFx0ICovXG4gMzA4Olx0XHRcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXHUwMDI2cHZjYy1cdTAwM2VibG9ja2VkKTtcbiAzMDk6XHRcdFx0Z290byBub3NwYWNlO1xuIDMxMDpcdFx0fVxuIDMxMTpcdFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSB8fFxuIDMxMjpcdFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAzMTM6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMxNDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMTU6XHRcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuIDMxNjpcdFx0fVxuIDMxNzpcdFxuIDMxODpcdFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiAzMTk6XHRcdGNhc2UgZV9sbGM6XG4gMzIwOlx0XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuIDMyMTpcdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMjI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMjM6XHRcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzI0Olx0XHRcdH1cbiAzMjU6XHRcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4gMzI2Olx0XHRcdFx0Z290byBub3NwYWNlO1xuIDMyNzpcdFx0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHRjYXNlIGVfdmM6XG4gMzMwOlx0XHRcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXHUwMDNldHJ1ZXNpemUpKVxuIDMzMTpcdFx0XHRcdGdvdG8gbm9zcGFjZTtcbiAzMzI6XHRcdFx0YnJlYWs7XG4gMzMzOlx0XHRjYXNlIGVfYXV0b2RldGVjdDpcbiAzMzQ6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMzNTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcblwmIzM0Oyk7XG4gMzM2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMzNzpcdFx0XHRyZXR1cm4gMTtcbiAzMzg6XHRcdH1cbiAzMzk6XHRcbiAzNDA6XHRcdGF0bV9hY2NvdW50X3R4KHZjYywgc2tiKTtcbiAzNDE6XHRcdHByX2RlYnVnKFwmIzM0O2F0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwmIzM0OyxcbiAzNDI6XHRcdFx0IHNrYiwgQVRNX1NLQihza2IpLVx1MDAzZXZjYywgQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VkZXYpO1xuIDM0MzpcdFx0cmV0ID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VzZW5kKEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MsIHNrYilcbiAzNDQ6XHRcdCAgICA/IERST1BfUEFDS0VUIDogMTtcbiAzNDU6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDY6XHRcdHJldHVybiByZXQ7XG4gMzQ3Olx0bm9zcGFjZTpcbiAzNDg6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDk6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2F0bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4tLVxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9pb2N0bC5jLTk0LVx0XHRjYXNlIEFUTV9CQUNLRU5EX1BQUDpcbm5ldC9hdG0vaW9jdGwuYzo5NTpcdFx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDtwcHBvYXRtXCYjMzQ7KTtcbm5ldC9hdG0vaW9jdGwuYy05Ni1cdFx0XHRicmVhaztcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoyOi8qIG5ldC9hdG0vcHBwb2F0bS5jIC0gUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNSAqL1xubmV0L2F0bS9wcHBvYXRtLmMtMy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00OS1cbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xubmV0L2F0bS9wcHBvYXRtLmMtNTEtXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTU1LVxubmV0L2F0bS9wcHBvYXRtLmM6NTY6c3RydWN0IHBwcG9hdG1fdmNjIHtcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVx0c3RydWN0IGF0bV92Y2NcdCphdG12Y2M7XHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTYyLVx0XHRcdFx0XHQvKiBrZWVwIG9sZCBwdXNoL3BvcCBmb3IgZGV0YWNoaW5nICovXG5uZXQvYXRtL3BwcG9hdG0uYzo2MzpcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xubmV0L2F0bS9wcHBvYXRtLmMtNjQtXHRhdG9taWNfdCBpbmZsaWdodDtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz04Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xubmV0L2F0bS9wcHBvYXRtLmM6OTE6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLVx1MDAzZXVzZXJfYmFjayk7XG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XG5uZXQvYXRtL3BwcG9hdG0uYy05My1cbm5ldC9hdG0vcHBwb2F0bS5jOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxubmV0L2F0bS9wcHBvYXRtLmMtOTUte1xubmV0L2F0bS9wcHBvYXRtLmM6OTY6XHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTk3LX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDMtICovXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDQ6c3RhdGljIHZvaWQgcHBwb2F0bV93YWtldXBfc2VuZGVyKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBmcm9tX3Rhc2tsZXQocHZjYywgdCwgd2FrZXVwX3Rhc2tsZXQpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTA3LVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTExMi17XG5uZXQvYXRtL3BwcG9hdG0uYzoxMTM6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTE0LVxubmV0L2F0bS9wcHBvYXRtLmMtMTE1LVx0Lypcbm5ldC9hdG0vcHBwb2F0bS5jOjExNjpcdCAqIEFzIGluIHBwcG9hdG1fcG9wKCksIGl0JiMzOTtzIHNhZmUgdG8gY2xlYXIgdGhlIEJMT0NLRUQgYml0IGhlcmUgYmVjYXVzZVxubmV0L2F0bS9wcHBvYXRtLmM6MTE3Olx0ICogdGhlIHdha2V1cCAqY2FuJiMzOTt0KiByYWNlIHdpdGggcHBwb2F0bV9zZW5kKCkuIFRoZXkgYm90aCBob2xkIHRoZSBQUFBcbm5ldC9hdG0vcHBwb2F0bS5jLTExOC1cdCAqIGNoYW5uZWwmIzM5O3MgLVx1MDAzZWRvd25sIGxvY2suIEFuZCB0aGUgcG90ZW50aWFsIHJhY2Ugd2l0aCAqc2V0dGluZyogaXQsXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTk6XHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24mIzM5O3Rcbm5ldC9hdG0vcHBwb2F0bS5jOjEyMDpcdCAqIGV4aXN0IGhlcmUuIEluIHRoZSBzb2NrX293bmVkX2J5X3VzZXIoKSBjYXNlIGluIHBwcG9hdG1fc2VuZCgpLCB3ZVxubmV0L2F0bS9wcHBvYXRtLmMtMTIxLVx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTMzLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzUte1xubmV0L2F0bS9wcHBvYXRtLmM6MTM2Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEzNy1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXHQgKiBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSBjbGVhciB0aGUgQkxPQ0tFRCBmbGFnIGp1c3QgYXMgd2Vcbm5ldC9hdG0vcHBwb2F0bS5jOjE0NDpcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDUtXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2Olx0ICogSW4gZmFjdCBpdCYjMzk7cyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGNoYW5uZWwtXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OC1cdCAqIGNhbGxlZCBieSB0aGUgdGFza2xldCB3aWxsICphbHNvKiBncmFiIHRoYXQgbG9jay4gU28gZXZlbiBpZiBhbm90aGVyXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDk6XHQgKiBDUFUgaXMgaW4gcHBwb2F0bV9zZW5kKCkgcmlnaHQgbm93LCB0aGUgdGFza2xldCBpc24mIzM5O3QgZ29pbmcgdG8gcmFjZVxubmV0L2F0bS9wcHBvYXRtLmMtMTUwLVx0ICogd2l0aCBpdC4gVGhlIHdha2V1cCAqd2lsbCogaGFwcGVuIGFmdGVyIHRoZSBvdGhlciBDUFUgaXMgc2FmZWx5IG91dFxubmV0L2F0bS9wcHBvYXRtLmM6MTUxOlx0ICogb2YgcHBwb2F0bV9zZW5kKCkgYWdhaW4uXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTItXHQgKlxubmV0L2F0bS9wcHBvYXRtLmM6MTUzOlx0ICogU28gaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSBoYXMgYWxyZWFkeSBzZXQgdGhlIEJMT0NLRUQgYml0IGFuZFxubmV0L2F0bS9wcHBvYXRtLmMtMTU0LVx0ICogaXQgYWJvdXQgdG8gcmV0dXJuLCB0aGF0JiMzOTtzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxubmV0L2F0bS9wcHBvYXRtLmM6MTU1Olx0ICogaGFwcGVuIGxhdGVyLiBBbmQgaWYgdGhlIENQVSBpbiBwcHBvYXRtX3NlbmQoKSAqaGFzbiYjMzk7dCogc2V0IHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMTU2LVx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0JiMzOTtzIGZpbmUgdG9vIGJlY2F1c2Ugb2YgdGhlIGRvdWJsZSBjaGVjayBpblxubmV0L2F0bS9wcHBvYXRtLmM6MTU3Olx0ICogcHBwb2F0bV9tYXlfc2VuZCgpIHdoaWNoIGlzIGNvbW1lbnRlZCB0aGVyZS5cbm5ldC9hdG0vcHBwb2F0bS5jLTE1OC1cdCAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE2Ni0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxubmV0L2F0bS9wcHBvYXRtLmMtMTY4LXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE2OTpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcbm5ldC9hdG0vcHBwb2F0bS5jLTE3MC1cdHB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4MC0vKiBDYWxsZWQgd2hlbiBhbiBBQUw1IFBEVSBjb21lcyBpbiAqL1xubmV0L2F0bS9wcHBvYXRtLmM6MTgxOnN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMTgyLXtcbm5ldC9hdG0vcHBwb2F0bS5jOjE4MzpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXHRwcl9kZWJ1ZyhcJiMzNDtcXG5cJiMzNDspO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTE4OS1cdFx0bW9kdWxlID0gcHZjYy1cdTAwM2VvbGRfb3duZXI7XG5uZXQvYXRtL3BwcG9hdG0uYzoxOTA6XHRcdHBwcG9hdG1fdW5hc3NpZ25fdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xOTEtXHRcdGF0bXZjYy1cdTAwM2VwdXNoKGF0bXZjYywgTlVMTCk7XHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjMzLVxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxubmV0L2F0bS9wcHBvYXRtLmMtMjM1LXtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTYtXHQvKlxubmV0L2F0bS9wcHBvYXRtLmM6MjU3Olx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxubmV0L2F0bS9wcHBvYXRtLmMtMjU4LVx0ICogbGFzdCBwYWNrZXQgaW4gdGhlIHF1ZXVlLCAqanVzdCogYmVmb3JlIHdlIHNldCB0aGUgQkxPQ0tFRFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTI2NC1cdCAqIHJ1biB0aGUgd2FrZXVwIHRhc2tsZXQuIEFub3RoZXIgd2FrZXVwIHdpbGwgbmV2ZXIgaHVydC5cbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcdCAqIElmIHBwcG9hdG1fcG9wKCkgaXMgcnVubmluZyBidXQgaGFzbiYjMzk7dCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVx0ICogc3BhY2Ugb24gdGhlIHF1ZXVlIHlldCwgdGhlbiBpdCBoYXNuJiMzOTt0IGNoZWNrZWQgdGhlIEJMT0NLRURcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjktXHQgKiB0YWtpbmcgdGhlIFBQUCBjaGFubmVsJiMzOTtzIC1cdTAwM2Vkb3dubCBsb2NrLCB3aGljaCBpcyBoZWxkIGJ5IHRoZVxubmV0L2F0bS9wcHBvYXRtLmM6MjcwOlx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXG5uZXQvYXRtL3BwcG9hdG0uYy0yNzEtXHQgKiB3YWl0IGZvciB1cyB0byBmaW5pc2guXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjg4LSNkZWZpbmUgRFJPUF9QQUNLRVQgMVxubmV0L2F0bS9wcHBvYXRtLmM6Mjg5OnN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTI5MC17XG5uZXQvYXRtL3BwcG9hdG0uYzoyOTE6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG5uZXQvYXRtL3BwcG9hdG0uYy0yOTItXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMyNC1cdFx0fVxubmV0L2F0bS9wcHBvYXRtLmM6MzI1Olx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNi1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzI5LVx0Y2FzZSBlX3ZjOlxubmV0L2F0bS9wcHBvYXRtLmM6MzMwOlx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMS1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzU5LS8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG5uZXQvYXRtL3BwcG9hdG0uYzozNjA6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG5uZXQvYXRtL3BwcG9hdG0uYy0zNjEtXHR1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzMtXG5uZXQvYXRtL3BwcG9hdG0uYzozNzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG5uZXQvYXRtL3BwcG9hdG0uYzozNzU6XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbm5ldC9hdG0vcHBwb2F0bS5jOjM3NjpcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxubmV0L2F0bS9wcHBvYXRtLmMtMzc3LX07XG5uZXQvYXRtL3BwcG9hdG0uYy0zNzgtXG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MC17XG5uZXQvYXRtL3BwcG9hdG0uYy0zODEtXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xubmV0L2F0bS9wcHBvYXRtLmM6MzgyOlx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmMtMzgzLVx0aW50IGVycjtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MDAtXHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDE6XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDItXHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDM6XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDQtXHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbm5ldC9hdG0vcHBwb2F0bS5jLTQwNS1cdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDY6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDctXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQxMi1cdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmM6NDEzOlx0YXRtdmNjLVx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTQ6XHRhdG12Y2MtXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTU6XHRhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcbm5ldC9hdG0vcHBwb2F0bS5jLTQxNi1cdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDI4LSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6NDI5OnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtNDMwLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDM0LVxubmV0L2F0bS9wcHBvYXRtLmM6NDM1Olx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxubmV0L2F0bS9wcHBvYXRtLmMtNDM2LVx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ0Ny1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ0ODpcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xubmV0L2F0bS9wcHBvYXRtLmMtNDQ5LVx0XHR9XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDU5LVxubmV0L2F0bS9wcHBvYXRtLmM6NDYwOnN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtNDYxLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxubmV0L2F0bS9wcHBvYXRtLmM6NDYyOlx0LmlvY3RsXHQ9IHBwcG9hdG1faW9jdGwsXG5uZXQvYXRtL3BwcG9hdG0uYy00NjMtfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2NC1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ2NTpzdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2Ni17XG5uZXQvYXRtL3BwcG9hdG0uYzo0Njc6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDY4LVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDcwLVxubmV0L2F0bS9wcHBvYXRtLmM6NDcxOnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Mi17XG5uZXQvYXRtL3BwcG9hdG0uYzo0NzM6XHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NzQtfVxubmV0L2F0bS9wcHBvYXRtLmMtNDc1LVxubmV0L2F0bS9wcHBvYXRtLmM6NDc2Om1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzc6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQUFBPQVRNIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBzeW1ib2wgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBPQVRNLiBUbyBkbyB0aGlzLCBJJiMzOTtsbCBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbmV0L2F0bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlIHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGFuZCBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgUFBQT0FUTSBpcyBjb250cm9sbGVkIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGFsc28gdml0YWw7IHRoZXkgY2FuIGxlYWQgdG8gcmlwcGxlIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQVRNXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBBVE0gaXMgYSBoaWdoLXNwZWVkIG5ldHdvcmtpbmcgdGVjaG5vbG9neSBmb3IgTG9jYWwgQXJlYSBOZXR3b3Jrc1xuICAxMDpcdFx0ICBhbmQgV2lkZSBBcmVhIE5ldHdvcmtzLiAgSXQgdXNlcyBhIGZpeGVkIHBhY2tldCBzaXplIGFuZCBpc1xuICAxMTpcdFx0ICBjb25uZWN0aW9uIG9yaWVudGVkLCBhbGxvd2luZyBmb3IgdGhlIG5lZ290aWF0aW9uIG9mIG1pbmltdW1cbiAgMTI6XHRcdCAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgSW4gb3JkZXIgdG8gcGFydGljaXBhdGUgaW4gYW4gQVRNIG5ldHdvcmssIHlvdXIgTGludXggYm94IG5lZWRzIGFuXG4gIDE1Olx0XHQgIEFUTSBuZXR3b3JraW5nIGNhcmQuIElmIHlvdSBoYXZlIHRoYXQsIHNheSBZIGhlcmUgYW5kIHRvIHRoZSBkcml2ZXJcbiAgMTY6XHRcdCAgb2YgeW91ciBBVE0gY2FyZCBiZWxvdy5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcbiAgMTk6XHRcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F0bS5yc3RcdTAwM2UgZm9yXG4gIDIwOlx0XHQgIGZ1cnRoZXIgZGV0YWlscy5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgQVRNX0JSMjY4NFxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIEFUTSBcdTAwMjZcdTAwMjYgSU5FVFxuICAyNTpcdFx0aGVscFxuICAyNjpcdFx0ICBBVE0gUFZDcyBjYW4gY2FycnkgZXRoZXJuZXQgUERVcyBhY2NvcmRpbmcgdG8gUkZDMjY4NCAoZm9ybWVybHkgMTQ4MylcbiAgMjc6XHRcdCAgVGhpcyBkZXZpY2Ugd2lsbCBhY3QgbGlrZSBhbiBldGhlcm5ldCBmcm9tIHRoZSBrZXJuZWxzIHBvaW50IG9mIHZpZXcsXG4gIDI4Olx0XHQgIHdpdGggdGhlIHRyYWZmaWMgYmVpbmcgY2FycmllZCBieSBBVE0gUFZDcyAoY3VycmVudGx5IDEgUFZDL2RldmljZSkuXG4gIDI5Olx0XHQgIFRoaXMgaXMgc29tZXRpbWVzIHVzZWQgb3ZlciBEU0wgbGluZXMuICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gQVRNX0JSMjY4NFxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBtZWNoYW5pc20gZm9yIHVzZXJzIHdobyBuZWVkIHRvIHRlcm1pbmF0ZSBhXG4gIDM2Olx0XHQgIGxhcmdlIG51bWJlciBvZiBJUC1vbmx5IHZjYyYjMzk7cy4gIERvIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IGFyZSBzdXJlXG4gIDM3Olx0XHQgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldC9BVE0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byBgbmV0L2F0bS9LY29uZmlnYCBub3cuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBVE0gbmV0d29ya2luZyB3aXRoaW4gdGhpcyBidWlsZC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aHJvdWdoIHRoZSByZW1haW5pbmcgZW50cmllcyB3aXRoaW4gdGhpcyBLY29uZmlnIGZpbGUsIGFzc2Vzc2luZyB0aGVpciByZWxldmFuY2UgYW5kIGludGVycGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVhY2ggb3B0aW9uIGltcGFjdHMgdGhlIG92ZXJhbGwgQVRNIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhYm91dCBmaWd1cmluZyBvdXQgdGhlIHByZWNpc2UgZmVhdHVyZXMgYmVpbmcgZXhwb3NlZCwgZGVwZW5kZW5jaWVzIGJldHdlZW4gb3B0aW9ucywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgQVRNIGRyaXZlcnMgYW5kIHByb3RvY29sIHN1cHBvcnQgYW5kIGhvdyBpdCBhbGwgdGllcyB0b2dldGhlciB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ZmlsZSBuZXQvYXRtL0tjb25maWcgZG9lcyBub3QgaGF2ZSBsaW5lIDgxLCBpdCBoYXMgb25seSAzNyBsaW5lczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtmaWxlIG5ldC9hdG0vS2NvbmZpZyBkb2VzIG5vdCBoYXZlIGxpbmUgODEsIGl0IGhhcyBvbmx5IDM3IGxpbmVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjgwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKlRyYWNpbmcgRG93biBQUFBPQVRNIGluIHRoZSBLY29uZmlnIFRyZWUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgUFBQT0FUTSB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgKmV4YWN0bHkqIHdoZXJlIFBQUE9BVE0gaXMgY29udHJvbGxlZCAtIHdoaWNoIGNvbmZpZyBvcHRpb24gZW5hYmxlcyBpdCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgcGVyaGFwcyB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBlbmNvbXBhc3NlcyBpdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgJiMzNDtQUFBPQVRNJiMzNDsgYWNyb3NzIHRoZSBlbnRpcmUgS2NvbmZpZyB0cmVlLCB1c2luZyB3aGF0ZXZlciB0b29scyBJIGhhdmUgb24gaGFuZCDigJMgbGlrZWx5IGBncmVwYCBvciBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSBrZXJuZWwgc291cmNlLCBvciBtYXliZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgZGlyZWN0b3JpZXMgaWYgSSBoYXZlIGEgZ29vZCBmZWVsaW5nIGFib3V0IHdoZXJlIGl0IG1pZ2h0IGJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN1cnJvdW5kaW5nIGNvbnRleHQg4oCTIGNvbW1lbnRzLCBjb25kaXRpb25hbHMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyB0aGF0IG1pZ2h0IHBvaW50IG1lIHRvd2FyZHMgc3BlY2lmaWMgZGlyZWN0b3JpZXMgb3IgbW9kdWxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBleHBlY3QgdG8gZmluZCBhIG1haW4gY29uZmlnIG9wdGlvbiBhbmQgbWF5YmUgYSBmZXcgc3ViLW9wdGlvbnMsIG1heWJlIGV2ZW4gYSBtb2R1bGUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBwYXRoIGNvbXBsZXRlbHkuIE9uY2UgSSYjMzk7dmUgZm91bmQgaXQsIEkgY2FuIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BQUE9BVE0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZz0xNjc9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZzoxNjg6Q09ORklHX1BQUE9BVE09bVxuYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZy0xNjktQ09ORklHX1BQUE9FPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZz0yODE9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc6MjgyOkNPTkZJR19QUFBPQVRNPW1cbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnLTI4My1DT05GSUdfUFBQT0U9bVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9NDc0PUNPTkZJR19QUFBfTVVMVElMSU5LPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6NDc1OkNPTkZJR19QUFBPQVRNPW1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctNDc2LUNPTkZJR19QUFBPRT1tXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaC0xMC1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaDoxMTojZGVmaW5lIFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1RcdCgwKVxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oOjEyOiNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfVkNcdFx0KDEpXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MTM6I2RlZmluZSBQUFBPQVRNX0VOQ0FQU19MTENcdFx0KDIpXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmgtMTQtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oPTIwPXN0cnVjdCBhdG1fYmFja2VuZF9wcHAge1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIxLVx0YXRtX2JhY2tlbmRfdFx0YmFja2VuZF9udW07XHQvKiBBVE1fQkFDS0VORF9QUFAgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaDoyMjpcdGludFx0XHRlbmNhcHM7XHRcdC8qIFBQUE9BVE1fRU5DQVBTXyogKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaC0yMy19O1xuLS1cbm5ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbm5ldC9hdG0vTWFrZWZpbGUtMTEtXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSAmIzQzOz0gcHBwb2F0bS5vXG4tLVxubmV0L2F0bS9wcHBvYXRtLmM9NTA9ZW51bSBwcHBvYXRtX2VuY2FwcyB7XG5uZXQvYXRtL3BwcG9hdG0uYzo1MTpcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXG5uZXQvYXRtL3BwcG9hdG0uYzo1MjpcdGVfdmMgPSBQUFBPQVRNX0VOQ0FQU19WQyxcbm5ldC9hdG0vcHBwb2F0bS5jOjUzOlx0ZV9sbGMgPSBQUFBPQVRNX0VOQ0FQU19MTEMsXG5uZXQvYXRtL3BwcG9hdG0uYy01NC19O1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTM3OT1zdGF0aWMgaW50IHBwcG9hdG1fYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM4Ni1cdFx0cmV0dXJuIC1FRkFVTFQ7XG5uZXQvYXRtL3BwcG9hdG0uYzozODc6XHRpZiAoYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgXHUwMDI2XHUwMDI2XG5uZXQvYXRtL3BwcG9hdG0uYzozODg6XHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFx1MDAyNlx1MDAyNiBiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfTExDKVxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUFBQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBQUFAgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGxvY2F0ZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGNvbnRyb2xsaW5nIFBQUCBmdW5jdGlvbmFsaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbW9kdWxlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBQUFAgY29uZmlndXJhdGlvbiBhbmQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnVydGhlciBhZGp1c3RtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHQgIHZlcnNpb24gb2YgdGhlIHBwcGQgZGFlbW9uIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBtdWx0aWxpbmsgcHJvdG9jb2wuXG4gMTAxOlx0XG4gMTAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIFBQUE9BVE1cbiAxMDU6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuIDEwNjpcdFx0ZGVwZW5kcyBvbiBBVE1cbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgU3VwcG9ydCBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBlbmNhcHN1bGF0ZWQgaW4gQVRNIGZyYW1lcy5cbiAxMDk6XHRcdCAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgY29tcGx5IHdpdGggc2VjdGlvbiA4IG9mIFJGQzIzNjQsXG4gMTEwOlx0XHQgIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIGlmIHRoZSBBVE0gcGVlciBsb3NlcyBzdGF0ZSBhbmRcbiAxMTE6XHRcdCAgY2hhbmdlcyBpdHMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuXG4gMTEyOlx0XG4gMTEzOlx0Y29uZmlnIFBQUE9YXG4gMTE0Olx0XHR0cmlzdGF0ZVxuIDExNTpcdFxuIDExNjpcdGNvbmZpZyBQUFBPRVxuIDExNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgRXRoZXJuZXRcJiMzNDtcbiAxMTg6XHRcdHNlbGVjdCBQUFBPWFxuIDExOTpcdFx0aGVscFxuIDEyMDpcdFx0ICBTdXBwb3J0IGZvciBQUFAgb3ZlciBFdGhlcm5ldC5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxuIDEyMzpcdFx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcbiAxMjQ6XHRcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBQUE9BVE0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLCB3YXJyYW50cyBjbG9zZXIgc2NydXRpbnkgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBQUFBPQVRNIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBZZXMsIGl0JiMzOTtzIGZlYXNpYmxlLiBJIGNhbiBjcmVhdGUgQVRNIHNvY2tldHMgKEFGX0FUTVNWQy9BRl9BVE1QVkMpLCBBVE0gdmlydHVhbCBkZXZpY2VzLCBhbmQgYXR0YWNoIFBQUE9BVE0gdXNpbmcgaW9jdGxzIGxpa2UgYEFUTV9TRVRCQUNLRU5EYCBvciBgQVRNX05FV0JBQ0tFTkRJRmAuIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIHJlbGV2YW50IHN5c3RlbSBjYWxscywgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgbWVhbnMgSSBjYW4gZ2VuZXJhdGUgdHJhZmZpYyB0aGF0IHdpbGwgaGl0IGBwcHBvYXRtX3NlbmRgICh2aWEgYC5zdGFydF94bWl0YCkuCgpOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgdGhlIGNyaXRpY2FsIGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG1hbnVhbCBza2IgcmVhbGxvY2F0aW9uIGxvZ2ljIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYC4gVGhpcyBzaWduaWZpZXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBza2IgaGFuZGxpbmcsIG1lbW9yeSBhbGxvY2F0aW9uLCBoZWFkcm9vbSBtYW5hZ2VtZW50LCBhbmQsIGltcG9ydGFudGx5LCBzb2NrZXQgbG9ja2luZy91bmxvY2tpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGNsZWFybHkgcmVhY2hhYmxlIGNvZGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdWJzeXN0ZW0uCgpDb25zaWRlcmluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0IG9uIHRoZXNlIGxvdy1sZXZlbCBuZXR3b3JraW5nIHByaW1pdGl2ZXMsIGFsb25nIHdpdGggdGhlIGludGVyYWN0aW9uIHdpdGggc29ja2V0IGxvY2tpbmcsIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgc2tiIGJ1ZmZlcnMgYW5kIGFyZSBpbnZvbHZlZCBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgUFBQIG92ZXIgQVRNIGNvbnRleHQsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCkZyb20gYSBzeW1ib2wgcGVyc3BlY3RpdmUsIGBwcHBvYXRtX3NlbmRgIGlzIHRoZSBwcmltYXJ5IHRhcmdldC4gQnV0LCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgcHBwb2F0bS5jYC4gU28sIEkmIzM5O2xsIGtlZXAgdGhlIGZvbGxvd2luZyBpbiBtaW5kOiBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGBwcHBvYXRtX2lvY3RsYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcG9hdG1fbWF5X3NlbmRgLCBgcHBwb2F0bV9wdXNoYCBhbmQgYHBwcG9hdG1fcG9wYC4gYHBwcG9hdG1fc2VuZGAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gYmUgdGFyZ2V0ZWQgYnV0IEkgc2hvdWxkIHRlc3QgdGhlIG90aGVycyB0b28uCgpGaW5hbGx5LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgYENPTkZJR19QUFBPQVRNYCwgYENPTkZJR19BVE1gLCBhbmQgYENPTkZJR19QUFBgIGFyZSBhbGwgaW1wb3J0YW50LiBJIGtub3cgUFBQT0FUTSBkZXBlbmRzIG9uIEFUTSwgYW5kIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIHRvIHNlZSBpZiBQUFBPQVRNIGhhcyBhbnkgaGFyZCBkZXBlbmRlbmN5IG9uIFBQUC4gVGhpcyBjb25maXJtcyB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBpcyBlbmFibGVkIGFuZCBhY2Nlc3NpYmxlIHRvIHRyaWdnZXIgdGhlIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBQUFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFBQUCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgUFBQIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGZyb20gbGluZXMgMSB0byA1MC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIG91dGxpbmUgdGhlIGNvcmUsIGZ1bmRhbWVudGFsIG9wdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGJhc2UgUFBQIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHZlcnkgYnVpbGRpbmcgYmxvY2tzIOKAkyB0aGluZ3MgbGlrZSB0aGUgYWJpbGl0eSB0byBlbmFibGUgb3IgZGlzYWJsZSBQUFAgc3VwcG9ydCBlbnRpcmVseSwgcGVyaGFwcyBkaWZmZXJlbnQgdmFyaWFudHMgb3IgZmxhdm9ycyBvZiBQUFAsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWcgYmxvY2ssIGFueSBjb25kaXRpb25hbHMsIGFuZCB0aGUgcGhyYXNpbmcgb2YgdGhlIGhlbHAgdGV4dC4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBmaW5kaW5nIHRoZSBkZWZhdWx0IHNlbGVjdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGZvdW5kYXRpb25hbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYmVmb3JlIEkgZGVsdmUgaW50byBtb3JlIHNwZWNpZmljIGZlYXR1cmVzLiBUaGlzIGluaXRpYWwgZXhhbWluYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGJhc2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc3Vic2VxdWVudCwgbW9yZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQUFAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuICA0MTpcdFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXG4gIDQyOlx0XHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcbiAgNDM6XHRcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cbiAgNDQ6XHRcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJiMzOTt0IHN1cHBvcnQgaXQsXG4gIDQ1Olx0XHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cbiAgNDY6XHRcbiAgNDc6XHRcdCAgVGhlIFBQUCBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAoXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDssXG4gIDQ4Olx0XHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxuICA0OTpcdFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXG4gIDUwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGlzIHdob2xlIHNlY3Rpb24gaXMgZ3VhcmRlZCBieSBhbiBgaWYgUFBQIC4uLiBlbmRpZmAgYmxvY2suIFRoYXQgdGVsbHMgbWUgdGhlIGNvcmUgUFBQIGZ1bmN0aW9uYWxpdHkgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIGFueXRoaW5nIHdpdGhpbiBpdCB0byBldmVuIGJlIGNvbnNpZGVyZWQuIEFuZCB0aGVuLCBkaXZpbmcgZGVlcGVyLCBJIHNlZSBgUFBQT0FUTWAgaXMgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gKmJvdGgqIGBQUFBgIGFuZCBgQVRNYC4gVGhhdCYjMzk7cyBsb2dpY2FsOyB5b3UgbmVlZCB0aGUgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgaW5mcmFzdHJ1Y3R1cmUgKmFuZCogdGhlIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIHN1cHBvcnQgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTtsbCBwaXZvdCBhbmQgY2hlY2sgYGRyaXZlcnMvbmV0L0tjb25maWdgIG5vdy4gR290dGEgc2VlIHdoYXQgb3RoZXIgcmVsYXRpb25zaGlwcyBhcmUgZGVmaW5lZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSW5zcGVjdGlvbjogTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTI4LiBUaGUgcmVhc29uIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoYXQgbG9jYXRpb24gaXMgbGlrZWx5IGJlY2F1c2UgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIG9yIHBlcmhhcHMgY29uZmlndXJpbmcgYSBuZXcgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgbGluZSBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGVuY2xvc2luZyBibG9jayDigJMgYSBgY29uZmlnYCBvcHRpb24sIGFuIGBpZmAgc3RhdGVtZW50LCBhIGBzZWxlY3RgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVW5kZXJzdGFuZGluZyB0aGlzIGVuY2xvc2luZyBjb250ZXh0IGlzIGNydWNpYWwgYmVjYXVzZSBpdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBvcHRpb24gYXQgbGluZSA1MjggKGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIG9wdGlvbnMpIHdpbGwgYmUgY29uc2lkZXJlZCBvciBlbmFibGVkLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcJiMzNDtcbiA1MjE6XHRcbiA1MjI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCYjMzQ7XG4gNTIzOlx0XG4gNTI0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXCYjMzQ7XG4gNTI1Olx0XG4gNTI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1wmIzM0O1xuIDUyNzpcdFxuIDUyODpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wmIzM0O1xuIDUyOTpcdFxuIDUzMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcJiMzNDtcbiA1MzE6XHRcbiA1MzI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCYjMzQ7XG4gNTMzOlx0XG4gNTM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCYjMzQ7XG4gNTM1Olx0XG4gNTM2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcJiMzNDtcbiA1Mzc6XHRcbiA1Mzg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2FuL0tjb25maWdcJiMzNDtcbiA1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwOTEKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBQUE9BVE0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdG8gYW5hbHl6ZS4gRmlyc3QsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBsb29rIHN0cmFpZ2h0Zm9yd2FyZDogYFBQUE9BVE1gLCBgQVRNYCwgYFBQUGAsIGFuZCBgTkVUREVWSUNFU2AuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBuYXR1cmUgb2YgUFBQIG92ZXIgQVRNIG5ldHdvcmtpbmcuIE5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIHNlZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGFuZCBgcHBwb2F0bV9pb2N0bGAuIERlZmluaXRlbHkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aG9zZSwgZXNwZWNpYWxseSBgcHBwb2F0bV9zZW5kYCBzaW5jZSB0aGF0JiMzOTtzIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbmV0L2F0bS9wcHBvYXRtLmNgLiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZS4KClJpZ2h0LCB0aW1lIHRvIHBhY2thZ2UgYWxsIHRoaXMgaW50byB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyB0aGlzIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgbmV0d29yayBzdGFjayBjb2RlLCBzbyBmdXp6aW5nIGlzIHdhcnJhbnRlZC4gVGhlIGBFbmFibGVDb25maWdzYCBsaXN0IHdpbGwgYmUgdGhlIGZvdXIgY29uZmlndXJhdGlvbnMgbWVudGlvbmVkIGVhcmxpZXIuIEZvciBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7bGwgaW5jbHVkZSB0aG9zZSB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGFuZCBgcHBwb2F0bV9pb2N0bGAuIEZpbmFsbHksIHRoZSBgUmVhc29uaW5nYCB3aWxsIGJlIGEgY29uY2lzZSBzdW1tYXJ5OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgc29ja2V0IHVubG9ja2luZyBsb2dpYyBpbiBgcHBwb2F0bV9zZW5kYCBieSByZXBsYWNpbmcgbWFudWFsIHJlYWxsb2NhdGlvbiB3aXRoIGBza2JfY293X2hlYWQoKWAuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBoYW5kbGluZywgcGFja2V0IHRyYW5zbWlzc2lvbiwgYW5kIGVycm9yIHBhdGhzIGluIHRoZSBQUFAgb3ZlciBBVE0gbmV0d29ya2luZyBkcml2ZXIsIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiYjMzQ7CgpPa2F5LCBqdXN0IGEgcXVpY2sgZmluYWwgc2FuaXR5IGNoZWNrLi4uIGNvbmZpZ3VyYXRpb25zLCBzeW1ib2xzLCByZWFzb25pbmcsIGFsbCBpbiBvcmRlci4gTG9va3MgZ29vZC4gVGltZSB0byBzZXQgdGhvc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtORVRERVZJQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fYXNzaWduX3ZjYyYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBwcHBvYXRtX3NlbmQgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2JfcmVhbGxvY19oZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBza2JfY293X2hlYWQuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBQUFAgb3ZlciBBVE0gZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBhbmQgaW9jdGwgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O05FVERFVklDRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9hc3NpZ25fdmNjJiMzNDssCiAgICAmIzM0O3BwcG9hdG1faW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gYW5kIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHBwcG9hdG1fc2VuZCBieSByZXBsYWNpbmcgbWFudWFsIHNrYl9yZWFsbG9jX2hlYWRyb29tIHJlYWxsb2NhdGlvbiB3aXRoIHNrYl9jb3dfaGVhZC4gVGhpcyBtb2RpZmllcyBza2IgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIFBQUCBvdmVyIEFUTSBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IGFuZCBpb2N0bCBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMjNkNzI4ZWU3MDIxMjEwYjkyYTg4MzgxODA3NmY3MjEwN2EyY2IyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwOTo0MDoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uNGNlN2ZhNmU0OTNlOSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTMxNywyMSAmIzQzOzMxNywxMiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlzd2l0Y2ggKHB2Y2MtJmd0O2VuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCiAJY2FzZSBlX2xsYzoKLQkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgTExDX0xFTikgewotCQkJc3RydWN0IHNrX2J1ZmYgKm47Ci0JCQluID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTsKLQkJCWlmIChuICE9IE5VTEwgJmFtcDsmYW1wOwotCQkJICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tJmd0O3RydWVzaXplKSkgewotCQkJCWtmcmVlX3NrYihuKTsKLQkJCQlnb3RvIG5vc3BhY2U7Ci0JCQl9Ci0JCQljb25zdW1lX3NrYihza2IpOwotCQkJc2tiID0gbjsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCWJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTsKLQkJCQlyZXR1cm4gRFJPUF9QQUNLRVQ7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLSZndDt0cnVlc2l6ZSkpCiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHsKJiM0MzsJCQliaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIERST1BfUEFDS0VUOwomIzQzOwkJfQomIzQzOwkJaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi0mZ3Q7dHJ1ZXNpemUpKQogCQkJZ290byBub3NwYWNlOwogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTsKIAkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgYW5hbHl6aW5nIHRoZSBwYXRjaCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGxldmVyYWdpbmcgbXkgdXN1YWwgdG9vbGtpdC4gTXkgZmlyc3QgdGFyZ2V0IHdpbGwgYmUgYG5ldC9hdG0vcHBwb2F0bS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMxNy4gVGhpcyBzZWN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJlc2lkZXMsIG9yIGF0IGxlYXN0LCB3aGVyZSB0aGUgY2hhbmdlIGlzIG1vc3QgcmVsZXZhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBwYXRjaC4gSXMgaXQgYSBidWcgZml4LCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgYSBuZXcgZmVhdHVyZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgLSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgdXNhZ2UsIGFuZCBjb21tZW50cyAtIHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYWx0ZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgbG9jYWwgY29udGV4dCBmaXJzdCwgd2lsbCB0aGVuIGFsbG93IG1lIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHR7XG4gMjkxOlx0XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG4gMjkyOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIDI5MzpcdFx0aW50IHJldDtcbiAyOTQ6XHRcbiAyOTU6XHRcdEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MgPSBwdmNjLVx1MDAzZWF0bXZjYztcbiAyOTY6XHRcdHByX2RlYnVnKFwmIzM0Oyhza2I9MHglcCwgdmNjPTB4JXApXFxuXCYjMzQ7LCBza2IsIHB2Y2MtXHUwMDNlYXRtdmNjKTtcbiAyOTc6XHRcdGlmIChza2ItXHUwMDNlZGF0YVswXSA9PSAmIzM5O1xcMCYjMzk7IFx1MDAyNlx1MDAyNiAocHZjYy1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9QUk9UKSlcbiAyOTg6XHRcdFx0KHZvaWQpIHNrYl9wdWxsKHNrYiwgMSk7XG4gMjk5Olx0XG4gMzAwOlx0XHR2Y2MgPSBBVE1fU0tCKHNrYiktXHUwMDNldmNjO1xuIDMwMTpcdFx0YmhfbG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMDI6XHRcdGlmIChzb2NrX293bmVkX2J5X3VzZXIoc2tfYXRtKHZjYykpKSB7XG4gMzAzOlx0XHRcdC8qXG4gMzA0Olx0XHRcdCAqIE5lZWRzIHRvIGhhcHBlbiAoYW5kIGJlIGZsdXNoZWQsIGhlbmNlIHRlc3RfYW5kXykgYmVmb3JlIHdlIHVubG9ja1xuIDMwNTpcdFx0XHQgKiB0aGUgc29ja2V0LiBJdCBuZWVkcyB0byBiZSBzZWVuIGJ5IHRoZSB0aW1lIG91ciAtXHUwMDNlcmVsZWFzZV9jYiBnZXRzXG4gMzA2Olx0XHRcdCAqIGNhbGxlZC5cbiAzMDc6XHRcdFx0ICovXG4gMzA4Olx0XHRcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXHUwMDI2cHZjYy1cdTAwM2VibG9ja2VkKTtcbiAzMDk6XHRcdFx0Z290byBub3NwYWNlO1xuIDMxMDpcdFx0fVxuIDMxMTpcdFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSB8fFxuIDMxMjpcdFx0ICAgICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAzMTM6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMxNDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMTU6XHRcdFx0cmV0dXJuIERST1BfUEFDS0VUO1xuIDMxNjpcdFx0fVxuIDMxNzpcdFxuIDMxODpcdFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiAzMTk6XHRcdGNhc2UgZV9sbGM6XG4gMzIwOlx0XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuIDMyMTpcdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzMjI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzMjM6XHRcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4gMzI0Olx0XHRcdH1cbiAzMjU6XHRcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4gMzI2Olx0XHRcdFx0Z290byBub3NwYWNlO1xuIDMyNzpcdFx0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHRjYXNlIGVfdmM6XG4gMzMwOlx0XHRcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXHUwMDNldHJ1ZXNpemUpKVxuIDMzMTpcdFx0XHRcdGdvdG8gbm9zcGFjZTtcbiAzMzI6XHRcdFx0YnJlYWs7XG4gMzMzOlx0XHRjYXNlIGVfYXV0b2RldGVjdDpcbiAzMzQ6XHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuIDMzNTpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcblwmIzM0Oyk7XG4gMzM2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDMzNzpcdFx0XHRyZXR1cm4gMTtcbiAzMzg6XHRcdH1cbiAzMzk6XHRcbiAzNDA6XHRcdGF0bV9hY2NvdW50X3R4KHZjYywgc2tiKTtcbiAzNDE6XHRcdHByX2RlYnVnKFwmIzM0O2F0bV9za2IoJXApLVx1MDAzZXZjYyglcCktXHUwMDNlZGV2KCVwKVxcblwmIzM0OyxcbiAzNDI6XHRcdFx0IHNrYiwgQVRNX1NLQihza2IpLVx1MDAzZXZjYywgQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VkZXYpO1xuIDM0MzpcdFx0cmV0ID0gQVRNX1NLQihza2IpLVx1MDAzZXZjYy1cdTAwM2VzZW5kKEFUTV9TS0Ioc2tiKS1cdTAwM2V2Y2MsIHNrYilcbiAzNDQ6XHRcdCAgICA/IERST1BfUEFDS0VUIDogMTtcbiAzNDU6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDY6XHRcdHJldHVybiByZXQ7XG4gMzQ3Olx0bm9zcGFjZTpcbiAzNDg6XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbiAzNDk6XHRcdC8qXG4gMzUwOlx0XHQgKiBXZSBkb24mIzM5O3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcbiAzNTE6XHRcdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cbiAzNTI6XHRcdCAqL1xuIDM1MzpcdFx0aWYgKChwdmNjLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX1BST1QpIFx1MDAyNlx1MDAyNiBza2JfaGVhZHJvb20oc2tiKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiAzNTQ6XHRcdCAgICBza2ItXHUwMDNlZGF0YVstMV0gPT0gJiMzOTtcXDAmIzM5OylcbiAzNTU6XHRcdFx0KHZvaWQpIHNrYl9wdXNoKHNrYiwgMSk7XG4gMzU2Olx0XHRyZXR1cm4gMDtcbiAzNTc6XHR9XG4gMzU4Olx0XG4gMzU5Olx0LyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cbiAzNjA6XHRzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbiAzNjE6XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuIDM2MjpcdHtcbiAzNjM6XHRcdHN3aXRjaCAoY21kKSB7XG4gMzY0Olx0XHRjYXNlIFBQUElPQ0dGTEFHUzpcbiAzNjU6XHRcdFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuIDM2NjpcdFx0XHQgICAgPyAtRUZBVUxUIDogMDtcbiAzNjc6XHRcdGNhc2UgUFBQSU9DU0ZMQUdTOlxuIDM2ODpcdFx0XHRyZXR1cm4gZ2V0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4gMzY5Olx0XHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUG9BVE0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBvcHRpbWl6aW5nIHRoZSBMTEMgZW5jYXBzdWxhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgUFBQb0FUTSBkcml2ZXIuIEkgc2VlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHdoZW4gZGVhbGluZyB3aXRoIFNoYXJlZCBvciBDbG9uZWQgYHNrYmBzLgoKQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGNoZWNrZWQgaWYgdGhlcmUgd2FzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgYHNrYmAgdXNpbmcgYHNrYl9oZWFkcm9vbShza2IpYC4gSWYgbm90LCBpdCB3b3VsZCBhdHRlbXB0IHRvIHJlYWxsb2NhdGUgd2l0aCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgc2tiX2hlYWRyb29tYCBtaWdodCByZXBvcnQgZW5vdWdoIHNwYWNlICppbml0aWFsbHkqLCBidXQgaWYgdGhlIGBza2JgIHdhcyBzaGFyZWQgKGxpa2UgZnJvbSBhIGNsb25lKSBvciBoYWQgZXhpc3RpbmcgcmVmZXJlbmNlcywgdGhlbiBtb2RpZnlpbmcgaXRzIGhlYWQgKHdpdGggYG1lbWNweWAgb3IgcmVhbGxvY2F0aW9uKSB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIG9sZCBjb2RlIHdhcyB0cnlpbmcgdG8gaGFuZGxlIHRoaXMsIGJ1dCB0aGUgbG9naWMgd2FzIGEgYml0IGNvbnZvbHV0ZWQsIGVzcGVjaWFsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSByZWFsbG9jYXRlZCBgc2tiYCBpbiB0aGUgY29uZGl0aW9uYWwuCgpUaGUgbmV3IGFwcHJvYWNoIGlzIGZhciBjbGVhbmVyOiBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgLiBUaGlzIGZ1bmN0aW9uIGVsZWdhbnRseSBoYW5kbGVzIHR3byB0aGluZ3M6IDEpIGl0IGVuc3VyZXMgdGhhdCB0aGUgYHNrYmAgaGFzIGVub3VnaCBoZWFkcm9vbSAoYWxsb2NhdGluZyBtb3JlIGlmIG5lZWRlZCkgYW5kIDIpIGlmIHRoZSBgc2tiYCBpcyBzaGFyZWQsIGl0IG1ha2VzIGEgY29weSAoQ29weS1Pbi1Xcml0ZSwgb3IgQ09XKSB0byBlbnN1cmUgdGhhdCBtb2RpZmljYXRpb25zIGFyZSBpc29sYXRlZC4gSWYgYHNrYl9jb3dfaGVhZGAgZmFpbHMsIHdlIHVubG9jaywgZnJlZSB0aGUgc2tiLCBhbmQgZHJvcCB0aGUgcGFja2V0LCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4KCkFmdGVyIHRoZSBgc2tiX2Nvd19oZWFkYCBjYWxsLCB3ZSBjaGVjayBgcHBwb2F0bV9tYXlfc2VuZGAgYW5kIGlmIHRoYXQmIzM5O3MgZmFsc2UsIHdlIGdvIHRvIGBub3NwYWNlYC4gSWYgdGhhdCBjaGVjayBpcyBPSywgd2UgdGhlbiBwcm9jZWVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgYW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIGBza2JfY293X2hlYWRgIHRha2VzIGNhcmUgb2YgcmVhbGxvY2F0aW9uIG9yIHVuc2hhcmluZywgY29weWluZyBkYXRhIGFzIG5lY2Vzc2FyeS4gYHNrYl9wdXNoYCBleHRlbmRzIHRoZSBkYXRhIGFyZWEgdG93YXJkcyB0aGUgaGVhZHJvb20sIGFuZCB0aGUgYG1lbWNweWAgdGhlbiBjb3BpZXMgdGhlIGBwcHBsbGNgIGhlYWRlciAod2hpY2ggSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaW4gdGhlIGNvZGUgYnV0IGxvb2tzIHRvIGJlIGEgc3RhdGljIGNvbnN0IGFycmF5LCBzbyB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMpIGludG8gdGhpcyBhbGxvY2F0ZWQgc3BhY2UuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IHRoZSBgcHBwbGxjYCBkZWZpbml0aW9uIGluIHRoZSBzb3VyY2UgdG8gYmUgc3VyZSwgYnV0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgbmV3IGFwcHJvYWNoIGlzIG1vcmUgcm9idXN0IGFuZCBzaW1wbGVyIHRoYW4gdGhlIHByZXZpb3VzIHZlcnNpb24uIEl0IGVmZmVjdGl2ZWx5IHJlc29sdmVzIHRoZSBzaGFyZWQtYnVmZmVyIGlzc3VlcyBhbmQgbWFrZXMgdGhlIGxvZ2ljIG11Y2ggbW9yZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcGxsYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jPTU2PXN0cnVjdCBwcHBvYXRtX3ZjYyB7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtODUtICovXG5uZXQvYXRtL3BwcG9hdG0uYzo4NjpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTg3LSNkZWZpbmUgTExDX0xFTlx0XHQoNClcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0xODE9c3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTk4LVx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTExDX0xFTiB8fFxubmV0L2F0bS9wcHBvYXRtLmM6MTk5Olx0XHQgICAgbWVtY21wKHNrYi1cdTAwM2VkYXRhLCBwcHBsbGMsIExMQ19MRU4pKVxubmV0L2F0bS9wcHBvYXRtLmMtMjAwLVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjA3LVx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzoyMDg6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gc2l6ZW9mKHBwcGxsYykgXHUwMDI2XHUwMDI2XG5uZXQvYXRtL3BwcG9hdG0uYzoyMDk6XHRcdCAgICAhbWVtY21wKHNrYi1cdTAwM2VkYXRhLCBwcHBsbGMsIHNpemVvZihwcHBsbGMpKSkge1xubmV0L2F0bS9wcHBvYXRtLmMtMjEwLVx0XHRcdHB2Y2MtXHUwMDNlZW5jYXBzID0gZV9sbGM7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjEzLVx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzoyMTQ6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gKHNpemVvZihwcHBsbGMpIC0gTExDX0xFTikgXHUwMDI2XHUwMDI2XG5uZXQvYXRtL3BwcG9hdG0uYzoyMTU6XHRcdCAgICAhbWVtY21wKHNrYi1cdTAwM2VkYXRhLCBcdTAwMjZwcHBsbGNbTExDX0xFTl0sXG5uZXQvYXRtL3BwcG9hdG0uYzoyMTY6XHRcdCAgICBzaXplb2YocHBwbGxjKSAtIExMQ19MRU4pKSB7XG5uZXQvYXRtL3BwcG9hdG0uYy0yMTctXHRcdFx0cHZjYy1cdTAwM2VlbmNhcHMgPSBlX3ZjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTI4OT1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzI2LVx0XHRcdGdvdG8gbm9zcGFjZTtcbm5ldC9hdG0vcHBwb2F0bS5jOjMyNzpcdFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYy0zMjgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGxlYWtzLiBUaGlzIHBhdGNoIGlzIHJlcGxhY2luZyB0aGF0IGBza2JfcmVhbGxvY19oZWFkcm9vbWAgbWVzcyB3aXRoIGBza2JfY293X2hlYWRgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncywgdGhhdCYjMzk7cyBnb29kLiBUaGUgY3JpdGljYWwgdGhpbmcgSSBzZWUgaXMgdGhhdCBhbnkgbmV3bHkgYWxsb2NhdGVkIGhlYWRyb29tLCBvciBkYXRhIHB1c2hlZCBpbnRvIGl0LCBpcyBpbW1lZGlhdGVseSBvdmVyd3JpdHRlbiB3aXRoIGBtZW1jcHlgLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0IGFyZSB0aGVuICpyZWFkKi4gRnVydGhlcm1vcmUsIHRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvciBleHBvc3VyZSBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgY29weV90b191c2VyYCwgb3IgZXZlbiBzb21ldGhpbmcgc25lYWt5IGxpa2UgYSBuZXRsaW5rIHNrYiBvciBhbiBpb2N0bCBhcmd1bWVudC4gVGhpcyBsb29rcyBsaWtlIHB1cmVseSBuZXR3b3JrIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBDT1cgYnVmZmVyIG1hbmFnZW1lbnQgZm9yIHNoYXJlZCBza2Igc2FmZXR5LCB3aGljaCBpcyBzbWFydCB0byBkby4gRG91YmxlIGNoZWNraW5nIHRoYXQgaXQgZG9lc24mIzM5O3QgY29ycnVwdCBzaGFyZWQgc2ticywgb3IgaGF2ZSBpbXByb3BlciBoYW5kbGluZy4gQW55IHNrYiBtYW5hZ2VtZW50IGlzc3VlcyBsaWtlIGRvdWJsZSBmcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzICpzaG91bGQqIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOLCB3aGljaCBpcyBhIGdvb2Qgc2FmZXR5IG5ldC4KCk5vdywgbGV0JiMzOTtzIHRyaXBsZS1jaGVjayB0aGlzIGFnYWluc3QgdGhlIEtNU0FOIGNyaXRlcmlhLiBSZW1lbWJlciwgS01TQU4gaXMgZm9yIGNhdGNoaW5nICprZXJuZWwtdG8tdXNlciogbWVtb3J5IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4KCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOb3BlLCBub3QgaGVyZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0LgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHJlYWQgbGF0ZXI/KiogTm8sIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvZiB0aGF0Lgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOb3QgYSBjaGFuY2UuIFRoaXMgbG9va3Mgc29saWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLiBUaGUgcmlzayBoZXJlIGlzIHdpdGggZGF0YSBjb3JydXB0aW9uLCB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IHdpdGggS0FTQU4sIGFuZCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdG8gdXNlciBzcGFjZS4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGF0LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgZG9jdW1lbnQgdGhpcyB3aXRoIGNsZWFyIHJlYXNvbmluZywgZW1waGFzaXppbmcgdGhlIGtleSBkaWZmZXJlbmNlIGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBtYW51YWwgc2tiIGhlYWRyb29tIHJlYWxsb2NhdGlvbiBsb2dpYyB3aXRoIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgaW4gYHBwcG9hdG1fc2VuZCgpYC5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6XG4tIFRoZSBoZWFkcm9vbSBhbGxvY2F0ZWQgb3IgZW5zdXJlZCB2aWEgYHNrYl9jb3dfaGVhZCgpYCBpcyBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgd2l0aCBgbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTilgLlxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGNoZWNrcy5cblxuMi4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgbmVpdGhlciBvZiB3aGljaCBhcHBsaWVzIGhlcmUuXG4tIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlLCBoZWFkcm9vbSBib3VuZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MjIuMDk5Nzc0NTY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MjA3NjY5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIk5FVERFVklDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiLFxuICAgIFwicHBwb2F0bV9pb2N0bFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6XFxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGNoZWNrcy5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgbmVpdGhlciBvZiB3aGljaCBhcHBsaWVzIGhlcmUuXFxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjIyLjA5OTc4MDEzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwOTk4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjIzZDcyOGVlNzAyMTIxMGI5MmE4ODM4MTgwNzZmNzIxMDdhMmNiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjQwOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi40Y2U3ZmE2ZTQ5M2U5IDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXFxuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcXG5AQCAtMzE3LDIxICszMTcsMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gXFx0Y2FzZSBlX2xsYzpcXG4tXFx0XFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgTExDX0xFTikge1xcbi1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcXG4tXFx0XFx0XFx0biA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTExDX0xFTik7XFxuLVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbi1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLVxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBuO1xcbi1cXHRcXHRcXHRpZiAoc2tiID09IE5VTEwpIHtcXG4tXFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4rXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gXFx0XFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XFxuIFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDoyMi41NjEzODA0MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5NjkzMDkwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJORVRERVZJQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInBwcG9hdG1faW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjIzZDcyOGVlNzAyMTIxMGI5MmE4ODM4MTgwNzZmNzIxMDdhMmNiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDk6NDA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi40Y2U3ZmE2ZTQ5M2U5IDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbisrKyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtMzE3LDIxICszMTcsMTIgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c3dpdGNoIChwdmNjLVx1MDAzZWVuY2Fwcykge1x0XHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cbiBcdGNhc2UgZV9sbGM6XG4tXHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgTExDX0xFTikge1xuLVx0XHRcdHN0cnVjdCBza19idWZmICpuO1xuLVx0XHRcdG4gPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExMQ19MRU4pO1xuLVx0XHRcdGlmIChuICE9IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXHUwMDNldHJ1ZXNpemUpKSB7XG4tXHRcdFx0XHRrZnJlZV9za2Iobik7XG4tXHRcdFx0XHRnb3RvIG5vc3BhY2U7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdFx0c2tiID0gbjtcbi1cdFx0XHRpZiAoc2tiID09IE5VTEwpIHtcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbi1cdFx0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBEUk9QX1BBQ0tFVDtcbitcdFx0fVxuK1x0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbiBcdFx0XHRnb3RvIG5vc3BhY2U7XG4gXHRcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xuIFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjIyLjU2MTM4MTk3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyOTcyMjExNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG5ldC9hdG0vcHBwb2F0bS5jYC4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZWluZyB0b3VjaGVkIGFwcGVhcnMgdG8gYmUgd2l0aGluIHRoZSBgcHBwb2F0bV9zZW5kYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBBVE0gb3ZlciBQUFBvRSwgc3BlY2lmaWNhbGx5IHRoZSBzZW5kaW5nIHBhdGguIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcHBwb2F0bV9zZW5kYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgUFBQb0EvUFBQb0UgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLkknbGwgcHJvYmFibHkgc3RhcnQgYnkgcmVhZGluZyBgbmV0L2F0bS9wcHBvYXRtLmNgIGRpcmVjdGx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGVkIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCB0aGVuIG1ha2UgYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgYnVpbGQgb3B0aW9ucy4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZG8gdGhhdCwgYW5kIG1pZ2h0IHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgYG5ldC9hdG0vS2NvbmZpZ2AgdG8gcGlucG9pbnQgYW55dGhpbmcgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGJhc2VsaW5lIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI4LCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDoyOC44NTg2MDU3NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0dmNjID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2M7XFxuIDMwMTpcXHRcXHRiaF9sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMDI6XFx0XFx0aWYgKHNvY2tfb3duZWRfYnlfdXNlcihza19hdG0odmNjKSkpIHtcXG4gMzAzOlxcdFxcdFxcdC8qXFxuIDMwNDpcXHRcXHRcXHQgKiBOZWVkcyB0byBoYXBwZW4gKGFuZCBiZSBmbHVzaGVkLCBoZW5jZSB0ZXN0X2FuZF8pIGJlZm9yZSB3ZSB1bmxvY2tcXG4gMzA1OlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQuIEl0IG5lZWRzIHRvIGJlIHNlZW4gYnkgdGhlIHRpbWUgb3VyIC1cXHUwMDNlcmVsZWFzZV9jYiBnZXRzXFxuIDMwNjpcXHRcXHRcXHQgKiBjYWxsZWQuXFxuIDMwNzpcXHRcXHRcXHQgKi9cXG4gMzA4OlxcdFxcdFxcdHRlc3RfYW5kX3NldF9iaXQoQkxPQ0tFRCwgXFx1MDAyNnB2Y2MtXFx1MDAzZWJsb2NrZWQpO1xcbiAzMDk6XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMTA6XFx0XFx0fVxcbiAzMTE6XFx0XFx0aWYgKHRlc3RfYml0KEFUTV9WRl9DTE9TRSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpIHx8XFxuIDMxMjpcXHRcXHQgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIDMxMzpcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMxNDpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzE1OlxcdFxcdFxcdHJldHVybiBEUk9QX1BBQ0tFVDtcXG4gMzE2OlxcdFxcdH1cXG4gMzE3OlxcdFxcbiAzMTg6XFx0XFx0c3dpdGNoIChwdmNjLVxcdTAwM2VlbmNhcHMpIHtcXHRcXHQvKiBMTEMgZW5jYXBzdWxhdGlvbiBuZWVkZWQgKi9cXG4gMzE5OlxcdFxcdGNhc2UgZV9sbGM6XFxuIDMyMDpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTikpIHtcXG4gMzIxOlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzIyOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMjM6XFx0XFx0XFx0XFx0cmV0dXJuIERST1BfUEFDS0VUO1xcbiAzMjQ6XFx0XFx0XFx0fVxcbiAzMjU6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMjY6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMjc6XFx0XFx0XFx0bWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTik7XFxuIDMyODpcXHRcXHRcXHRicmVhaztcXG4gMzI5OlxcdFxcdGNhc2UgZV92YzpcXG4gMzMwOlxcdFxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG4gMzMxOlxcdFxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4gMzMyOlxcdFxcdFxcdGJyZWFrO1xcbiAzMzM6XFx0XFx0Y2FzZSBlX2F1dG9kZXRlY3Q6XFxuIDMzNDpcXHRcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMzNTpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiVHJ5aW5nIHRvIHNlbmQgd2l0aG91dCBzZXR0aW5nIGVuY2FwcyFcXFxcblxcXCIpO1xcbiAzMzY6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMzNzpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gMzM4OlxcdFxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0YXRtX2FjY291bnRfdHgodmNjLCBza2IpO1xcbiAzNDE6XFx0XFx0cHJfZGVidWcoXFxcImF0bV9za2IoJXApLVxcdTAwM2V2Y2MoJXApLVxcdTAwM2VkZXYoJXApXFxcXG5cXFwiLFxcbiAzNDI6XFx0XFx0XFx0IHNrYiwgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjLVxcdTAwM2VkZXYpO1xcbiAzNDM6XFx0XFx0cmV0ID0gQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZXNlbmQoQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MsIHNrYilcXG4gMzQ0OlxcdFxcdCAgICA/IERST1BfUEFDS0VUIDogMTtcXG4gMzQ1OlxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzQ2OlxcdFxcdHJldHVybiByZXQ7XFxuIDM0NzpcXHRub3NwYWNlOlxcbiAzNDg6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MjguODU4NzAzNTgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDA0NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9NYWtlZmlsZT0xMD1hdG0tJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxubmV0L2F0bS9NYWtlZmlsZS0xMS1cXG5uZXQvYXRtL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QUFBPQVRNKSArPSBwcHBvYXRtLm9cXG4tLVxcbm5ldC9hdG0vaW9jdGwuYz00Mz1zdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxubmV0L2F0bS9pb2N0bC5jLTk0LVxcdFxcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxcbm5ldC9hdG0vaW9jdGwuYzo5NTpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShcXFwicHBwb2F0bVxcXCIpO1xcbm5ldC9hdG0vaW9jdGwuYy05Ni1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG5uZXQvYXRtL3BwcG9hdG0uYzoyOi8qIG5ldC9hdG0vcHBwb2F0bS5jIC0gUkZDMjM2NCBQUFAgb3ZlciBBVE0vQUFMNSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMtXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00OS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo1MDplbnVtIHBwcG9hdG1fZW5jYXBzIHtcXG5uZXQvYXRtL3BwcG9hdG0uYy01MS1cXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNTUtXFxubmV0L2F0bS9wcHBvYXRtLmM6NTY6c3RydWN0IHBwcG9hdG1fdmNjIHtcXG5uZXQvYXRtL3BwcG9hdG0uYy01Ny1cXHRzdHJ1Y3QgYXRtX3ZjY1xcdCphdG12Y2M7XFx0LyogVkNDIGRlc2NyaXB0b3IgKi9cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTYyLVxcdFxcdFxcdFxcdFxcdC8qIGtlZXAgb2xkIHB1c2gvcG9wIGZvciBkZXRhY2hpbmcgKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo2MzpcXHRlbnVtIHBwcG9hdG1fZW5jYXBzIGVuY2FwcztcXG5uZXQvYXRtL3BwcG9hdG0uYy02NC1cXHRhdG9taWNfdCBpbmZsaWdodDtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTg2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBwcGxsY1s2XSA9IHsgMHhGRSwgMHhGRSwgMHgwMywgMHhDRiwgMHhDMCwgMHgyMSB9O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtODgtXFxubmV0L2F0bS9wcHBvYXRtLmM6ODk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXFxubmV0L2F0bS9wcHBvYXRtLmMtOTAte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjkxOlxcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXFx1MDAzZXVzZXJfYmFjayk7XFxubmV0L2F0bS9wcHBvYXRtLmMtOTItfVxcbm5ldC9hdG0vcHBwb2F0bS5jLTkzLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTk1LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzo5NjpcXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cXHUwMDNlcHJpdmF0ZSk7XFxubmV0L2F0bS9wcHBvYXRtLmMtOTctfVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTAzLSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEwNDpzdGF0aWMgdm9pZCBwcHBvYXRtX3dha2V1cF9zZW5kZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEwNS17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTA2OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGZyb21fdGFza2xldChwdmNjLCB0LCB3YWtldXBfdGFza2xldCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTA3LVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTEwLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjExMTpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTIte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjExMzpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTExNC1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTUtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTY6XFx0ICogQXMgaW4gcHBwb2F0bV9wb3AoKSwgaXQncyBzYWZlIHRvIGNsZWFyIHRoZSBCTE9DS0VEIGJpdCBoZXJlIGJlY2F1c2VcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTc6XFx0ICogdGhlIHdha2V1cCAqY2FuJ3QqIHJhY2Ugd2l0aCBwcHBvYXRtX3NlbmQoKS4gVGhleSBib3RoIGhvbGQgdGhlIFBQUFxcbm5ldC9hdG0vcHBwb2F0bS5jLTExOC1cXHQgKiBjaGFubmVsJ3MgLVxcdTAwM2Vkb3dubCBsb2NrLiBBbmQgdGhlIHBvdGVudGlhbCByYWNlIHdpdGggKnNldHRpbmcqIGl0LFxcbm5ldC9hdG0vcHBwb2F0bS5jOjExOTpcXHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24ndFxcbm5ldC9hdG0vcHBwb2F0bS5jOjEyMDpcXHQgKiBleGlzdCBoZXJlLiBJbiB0aGUgc29ja19vd25lZF9ieV91c2VyKCkgY2FzZSBpbiBwcHBvYXRtX3NlbmQoKSwgd2VcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMjEtXFx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzMtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTM0OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTM1LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzY6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzctXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXFx0ICogZmVhciBvZiByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2UgY2xlYXIgdGhlIEJMT0NLRUQgZmxhZyBqdXN0IGFzIHdlXFxubmV0L2F0bS9wcHBvYXRtLmM6MTQ0OlxcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTQ1LVxcdCAqXFxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2OlxcdCAqIEluIGZhY3QgaXQncyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDctXFx0ICogd2hpbGUgaG9sZGluZyB0aGUgY2hhbm5lbC1cXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDgtXFx0ICogY2FsbGVkIGJ5IHRoZSB0YXNrbGV0IHdpbGwgKmFsc28qIGdyYWIgdGhhdCBsb2NrLiBTbyBldmVuIGlmIGFub3RoZXJcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDk6XFx0ICogQ1BVIGlzIGluIHBwcG9hdG1fc2VuZCgpIHJpZ2h0IG5vdywgdGhlIHRhc2tsZXQgaXNuJ3QgZ29pbmcgdG8gcmFjZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE1MC1cXHQgKiB3aXRoIGl0LiBUaGUgd2FrZXVwICp3aWxsKiBoYXBwZW4gYWZ0ZXIgdGhlIG90aGVyIENQVSBpcyBzYWZlbHkgb3V0XFxubmV0L2F0bS9wcHBvYXRtLmM6MTUxOlxcdCAqIG9mIHBwcG9hdG1fc2VuZCgpIGFnYWluLlxcbm5ldC9hdG0vcHBwb2F0bS5jLTE1Mi1cXHQgKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1MzpcXHQgKiBTbyBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpIGhhcyBhbHJlYWR5IHNldCB0aGUgQkxPQ0tFRCBiaXQgYW5kXFxubmV0L2F0bS9wcHBvYXRtLmMtMTU0LVxcdCAqIGl0IGFib3V0IHRvIHJldHVybiwgdGhhdCdzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1NTpcXHQgKiBoYXBwZW4gbGF0ZXIuIEFuZCBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpICpoYXNuJ3QqIHNldCB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTYtXFx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0J3MgZmluZSB0b28gYmVjYXVzZSBvZiB0aGUgZG91YmxlIGNoZWNrIGluXFxubmV0L2F0bS9wcHBvYXRtLmM6MTU3OlxcdCAqIHBwcG9hdG1fbWF5X3NlbmQoKSB3aGljaCBpcyBjb21tZW50ZWQgdGhlcmUuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTU4LVxcdCAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTY2LSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE2NzpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE2OC17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTY5OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzAtXFx0cHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xODAtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxODE6c3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTgyLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxODM6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXFx0cHJfZGVidWcoXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xODktXFx0XFx0bW9kdWxlID0gcHZjYy1cXHUwMDNlb2xkX293bmVyO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE5MDpcXHRcXHRwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE5MS1cXHRcXHRhdG12Y2MtXFx1MDAzZXB1c2goYXRtdmNjLCBOVUxMKTtcXHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMzMtXFxubmV0L2F0bS9wcHBvYXRtLmM6MjM0OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzNS17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTYtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNTc6XFx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI1OC1cXHQgKiBsYXN0IHBhY2tldCBpbiB0aGUgcXVldWUsICpqdXN0KiBiZWZvcmUgd2Ugc2V0IHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjQtXFx0ICogcnVuIHRoZSB3YWtldXAgdGFza2xldC4gQW5vdGhlciB3YWtldXAgd2lsbCBuZXZlciBodXJ0Llxcbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcXHQgKiBJZiBwcHBvYXRtX3BvcCgpIGlzIHJ1bm5pbmcgYnV0IGhhc24ndCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI2Ni1cXHQgKiBzcGFjZSBvbiB0aGUgcXVldWUgeWV0LCB0aGVuIGl0IGhhc24ndCBjaGVja2VkIHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjktXFx0ICogdGFraW5nIHRoZSBQUFAgY2hhbm5lbCdzIC1cXHUwMDNlZG93bmwgbG9jaywgd2hpY2ggaXMgaGVsZCBieSB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNzA6XFx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXFxubmV0L2F0bS9wcHBvYXRtLmMtMjcxLVxcdCAqIHdhaXQgZm9yIHVzIHRvIGZpbmlzaC5cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI4OC0jZGVmaW5lIERST1BfUEFDS0VUIDFcXG5uZXQvYXRtL3BwcG9hdG0uYzoyODk6c3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI5MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6MjkxOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0yOTItXFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNC1cXHRcXHR9XFxubmV0L2F0bS9wcHBvYXRtLmM6MzI1OlxcdFxcdGlmICghcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBza2ItXFx1MDAzZXRydWVzaXplKSlcXG5uZXQvYXRtL3BwcG9hdG0uYy0zMjYtXFx0XFx0XFx0Z290byBub3NwYWNlO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzI5LVxcdGNhc2UgZV92YzpcXG5uZXQvYXRtL3BwcG9hdG0uYzozMzA6XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMS1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zNTktLyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzozNjA6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxubmV0L2F0bS9wcHBvYXRtLmMtMzYxLVxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzczLVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM3NDpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcXG5uZXQvYXRtL3BwcG9hdG0uYzozNzU6XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxubmV0L2F0bS9wcHBvYXRtLmM6Mzc2OlxcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny19O1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OC1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG5uZXQvYXRtL3BwcG9hdG0uYy0zODAte1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MS1cXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM4MjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzgzLVxcdGludCBlcnI7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MDAtXFx0cHZjYy1cXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDAxOlxcdHB2Y2MtXFx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDAyLVxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDAzOlxcdHB2Y2MtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9hdG1fb3BzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQwNC1cXHRwdmNjLVxcdTAwM2VjaGFuLm10dSA9IGF0bXZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQwNS1cXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQwNjpcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00MDctXFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDEyLVxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTM6XFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxNDpcXHRhdG12Y2MtXFx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxNTpcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDE2LVxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MjgtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6NDI5OnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzMC1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzNC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0MzU6XFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcXHUwMDI2XFx1MDAyNiBhdG12Y2MtXFx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzNi1cXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ3LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ0ODpcXHRcXHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDQ5LVxcdFxcdH1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ1OS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NjA6c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDYxLVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2F0bS9wcHBvYXRtLmM6NDYyOlxcdC5pb2N0bFxcdD0gcHBwb2F0bV9pb2N0bCxcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjMtfTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjQtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY1OnN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2Ni17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDY3OlxcdHJlZ2lzdGVyX2F0bV9pb2N0bChcXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2OC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzE6c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Mi17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDczOlxcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc0LX1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NzUtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDc2Om1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDc3Om1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDoyOC45MDQ3MTMxODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY0OTI5MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFBQUE9BVE0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBzeW1ib2wgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBQUFBPQVRNLiBUbyBkbyB0aGlzLCBJJ2xsIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBuZXQvYXRtL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlIHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGFuZCBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgUFBQT0FUTSBpcyBjb250cm9sbGVkIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGFsc28gdml0YWw7IHRoZXkgY2FuIGxlYWQgdG8gcmlwcGxlIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIEknbSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjMwLjk2OTY0NTY4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgQVRNX0JSMjY4NFxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgQVRNIFBWQ3MgY2FuIGNhcnJ5IGV0aGVybmV0IFBEVXMgYWNjb3JkaW5nIHRvIFJGQzI2ODQgKGZvcm1lcmx5IDE0ODMpXFxuICAyNzpcXHRcXHQgIFRoaXMgZGV2aWNlIHdpbGwgYWN0IGxpa2UgYW4gZXRoZXJuZXQgZnJvbSB0aGUga2VybmVscyBwb2ludCBvZiB2aWV3LFxcbiAgMjg6XFx0XFx0ICB3aXRoIHRoZSB0cmFmZmljIGJlaW5nIGNhcnJpZWQgYnkgQVRNIFBWQ3MgKGN1cnJlbnRseSAxIFBWQy9kZXZpY2UpLlxcbiAgMjk6XFx0XFx0ICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VkIG92ZXIgRFNMIGxpbmVzLiAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbWVjaGFuaXNtIGZvciB1c2VycyB3aG8gbmVlZCB0byB0ZXJtaW5hdGUgYVxcbiAgMzY6XFx0XFx0ICBsYXJnZSBudW1iZXIgb2YgSVAtb25seSB2Y2Mncy4gIERvIG5vdCBlbmFibGUgdGhpcyB1bmxlc3MgeW91IGFyZSBzdXJlXFxuICAzNzpcXHRcXHQgIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MzAuOTY5NzIxMzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwOTkyMTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldC9BVE0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gYG5ldC9hdG0vS2NvbmZpZ2Agbm93LiBJdCdzIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBVE0gbmV0d29ya2luZyB3aXRoaW4gdGhpcyBidWlsZC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRocm91Z2ggdGhlIHJlbWFpbmluZyBlbnRyaWVzIHdpdGhpbiB0aGlzIEtjb25maWcgZmlsZSwgYXNzZXNzaW5nIHRoZWlyIHJlbGV2YW5jZSBhbmQgaW50ZXJwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZWFjaCBvcHRpb24gaW1wYWN0cyB0aGUgb3ZlcmFsbCBBVE0gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgYWJvdXQgZmlndXJpbmcgb3V0IHRoZSBwcmVjaXNlIGZlYXR1cmVzIGJlaW5nIGV4cG9zZWQsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgQVRNIGRyaXZlcnMgYW5kIHByb3RvY29sIHN1cHBvcnQgYW5kIGhvdyBpdCBhbGwgdGllcyB0b2dldGhlciB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjM1LjU3OTY0NDY4MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDgwLCJFcnJvciI6ImZpbGUgbmV0L2F0bS9LY29uZmlnIGRvZXMgbm90IGhhdmUgbGluZSA4MSwgaXQgaGFzIG9ubHkgMzcgbGluZXMiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImZpbGUgbmV0L2F0bS9LY29uZmlnIGRvZXMgbm90IGhhdmUgbGluZSA4MSwgaXQgaGFzIG9ubHkgMzcgbGluZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MzUuNTc5NzA2MzgyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDQ0NjM3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIERvd24gUFBQT0FUTSBpbiB0aGUgS2NvbmZpZyBUcmVlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgUFBQT0FUTSB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIG1lYW5zIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcCBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSAqZXhhY3RseSogd2hlcmUgUFBQT0FUTSBpcyBjb250cm9sbGVkIC0gd2hpY2ggY29uZmlnIG9wdGlvbiBlbmFibGVzIGl0LCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGVuY29tcGFzc2VzIGl0LiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgXCJQUFBPQVRNXCIgYWNyb3NzIHRoZSBlbnRpcmUgS2NvbmZpZyB0cmVlLCB1c2luZyB3aGF0ZXZlciB0b29scyBJIGhhdmUgb24gaGFuZCDigJMgbGlrZWx5IGBncmVwYCBvciBgZmluZGAgY29tYmluZWQgd2l0aCBgZ3JlcGAuIEknbGwgcHJvYmFibHkgc3RhcnQgdGhlIHNlYXJjaCBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGtlcm5lbCBzb3VyY2UsIG9yIG1heWJlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBkaXJlY3RvcmllcyBpZiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgYWJvdXQgd2hlcmUgaXQgbWlnaHQgYmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdXJyb3VuZGluZyBjb250ZXh0IOKAkyBjb21tZW50cywgY29uZGl0aW9uYWxzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHZhbHVlcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyB0aGF0IG1pZ2h0IHBvaW50IG1lIHRvd2FyZHMgc3BlY2lmaWMgZGlyZWN0b3JpZXMgb3IgbW9kdWxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBleHBlY3QgdG8gZmluZCBhIG1haW4gY29uZmlnIG9wdGlvbiBhbmQgbWF5YmUgYSBmZXcgc3ViLW9wdGlvbnMsIG1heWJlIGV2ZW4gYSBtb2R1bGUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBwYXRoIGNvbXBsZXRlbHkuIE9uY2UgSSd2ZSBmb3VuZCBpdCwgSSBjYW4gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY4MCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6MzguMDg0MTczNDU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzNzY2NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBQUE9BVE1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL2NvbmZpZ3MvZ3ByX2RlZmNvbmZpZz0xNjc9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxcbmFyY2gvbWlwcy9jb25maWdzL2dwcl9kZWZjb25maWc6MTY4OkNPTkZJR19QUFBPQVRNPW1cXG5hcmNoL21pcHMvY29uZmlncy9ncHJfZGVmY29uZmlnLTE2OS1DT05GSUdfUFBQT0U9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc9MjgxPUNPTkZJR19QUFBfTVVMVElMSU5LPXlcXG5hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZzoyODI6Q09ORklHX1BQUE9BVE09bVxcbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnLTI4My1DT05GSUdfUFBQT0U9bVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZz00NzQ9Q09ORklHX1BQUF9NVUxUSUxJTks9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6NDc1OkNPTkZJR19QUFBPQVRNPW1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnLTQ3Ni1DT05GSUdfUFBQT0U9bVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9OTI9Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1wcHAuaC0xMC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MTE6I2RlZmluZSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUXFx0KDApXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oOjEyOiNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfVkNcXHRcXHQoMSlcXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MTM6I2RlZmluZSBQUFBPQVRNX0VOQ0FQU19MTENcXHRcXHQoMilcXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmgtMTQtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg9MjA9c3RydWN0IGF0bV9iYWNrZW5kX3BwcCB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bXBwcC5oLTIxLVxcdGF0bV9iYWNrZW5kX3RcXHRiYWNrZW5kX251bTtcXHQvKiBBVE1fQkFDS0VORF9QUFAgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmg6MjI6XFx0aW50XFx0XFx0ZW5jYXBzO1xcdFxcdC8qIFBQUE9BVE1fRU5DQVBTXyogKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtcHBwLmgtMjMtfTtcXG4tLVxcbm5ldC9hdG0vTWFrZWZpbGU9MTA9YXRtLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbm5ldC9hdG0vTWFrZWZpbGUtMTEtXFxubmV0L2F0bS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUFBQT0FUTSkgKz0gcHBwb2F0bS5vXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz01MD1lbnVtIHBwcG9hdG1fZW5jYXBzIHtcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MTpcXHRlX2F1dG9kZXRlY3QgPSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNULFxcbm5ldC9hdG0vcHBwb2F0bS5jOjUyOlxcdGVfdmMgPSBQUFBPQVRNX0VOQ0FQU19WQyxcXG5uZXQvYXRtL3BwcG9hdG0uYzo1MzpcXHRlX2xsYyA9IFBQUE9BVE1fRU5DQVBTX0xMQyxcXG5uZXQvYXRtL3BwcG9hdG0uYy01NC19O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mzc5PXN0YXRpYyBpbnQgcHBwb2F0bV9hc3NpZ25fdmNjKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zODYtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubmV0L2F0bS9wcHBvYXRtLmM6Mzg3OlxcdGlmIChiZS5lbmNhcHMgIT0gUFBQT0FUTV9FTkNBUFNfQVVUT0RFVEVDVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4ODpcXHQgICAgYmUuZW5jYXBzICE9IFBQUE9BVE1fRU5DQVBTX1ZDIFxcdTAwMjZcXHUwMDI2IGJlLmVuY2FwcyAhPSBQUFBPQVRNX0VOQ0FQU19MTEMpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzg5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDozOS44Mzc5NDk2ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MjcyMjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBQUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBQUFAgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBsb2NhdGVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGNvbnRyb2xsaW5nIFBQUCBmdW5jdGlvbmFsaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbW9kdWxlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBQUFAgY29uZmlndXJhdGlvbiBhbmQgaG93IHRvIGJlc3QgYXBwcm9hY2ggZnVydGhlciBhZGp1c3RtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDo0Mi4wODA2NzU1NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHBwZCBkYWVtb24gd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG11bHRpbGluayBwcm90b2NvbC5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgUFBQT0FUTVxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEFUTVxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFN1cHBvcnQgUFBQIChQb2ludCB0byBQb2ludCBQcm90b2NvbCkgZW5jYXBzdWxhdGVkIGluIEFUTSBmcmFtZXMuXFxuIDEwOTpcXHRcXHQgIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IGNvbXBseSB3aXRoIHNlY3Rpb24gOCBvZiBSRkMyMzY0LFxcbiAxMTA6XFx0XFx0ICB3aGljaCBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyBpZiB0aGUgQVRNIHBlZXIgbG9zZXMgc3RhdGUgYW5kXFxuIDExMTpcXHRcXHQgIGNoYW5nZXMgaXRzIGVuY2Fwc3VsYXRpb24gdW5pbGF0ZXJhbGx5LlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgUFBQT1hcXG4gMTE0OlxcdFxcdHRyaXN0YXRlXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBQUFBPRVxcbiAxMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEV0aGVybmV0XFxcIlxcbiAxMTg6XFx0XFx0c2VsZWN0IFBQUE9YXFxuIDExOTpcXHRcXHRoZWxwXFxuIDEyMDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBQUCBvdmVyIEV0aGVybmV0LlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHQgIFRvIHdvcmsgaW4gY2xpZW50IG1vZGUsIHBwcGQgdmVyc2lvbiAyLjQuMiBvciBsYXRlciBpcyByZXF1aXJlZC5cXG4gMTIzOlxcdFxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuIDEyNDpcXHRcXHQgIHBhY2thZ2UgaXMgYWxzbyByZXF1aXJlZCwgYXZhaWxhYmxlIGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjQyLjA4MDc1MDU4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjM3NjE2ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBQUE9BVE0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG5ldC9hdG0vcHBwb2F0bS5jYCwgd2FycmFudHMgY2xvc2VyIHNjcnV0aW55IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgUFBQT0FUTSBpcyBldmVuIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gWWVzLCBpdCdzIGZlYXNpYmxlLiBJIGNhbiBjcmVhdGUgQVRNIHNvY2tldHMgKEFGX0FUTVNWQy9BRl9BVE1QVkMpLCBBVE0gdmlydHVhbCBkZXZpY2VzLCBhbmQgYXR0YWNoIFBQUE9BVE0gdXNpbmcgaW9jdGxzIGxpa2UgYEFUTV9TRVRCQUNLRU5EYCBvciBgQVRNX05FV0JBQ0tFTkRJRmAuIFN5emthbGxlciBhbHJlYWR5IGhhcyBkZXNjcmlwdGlvbnMgZm9yIHJlbGV2YW50IHN5c3RlbSBjYWxscywgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucyBJIGNhbiBnZW5lcmF0ZSB0cmFmZmljIHRoYXQgd2lsbCBoaXQgYHBwcG9hdG1fc2VuZGAgKHZpYSBgLnN0YXJ0X3htaXRgKS5cblxuTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtYW51YWwgc2tiIHJlYWxsb2NhdGlvbiBsb2dpYyB3aXRoIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAuIFRoaXMgc2lnbmlmaWVzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gc2tiIGhhbmRsaW5nLCBtZW1vcnkgYWxsb2NhdGlvbiwgaGVhZHJvb20gbWFuYWdlbWVudCwgYW5kLCBpbXBvcnRhbnRseSwgc29ja2V0IGxvY2tpbmcvdW5sb2NraW5nIGFuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSBjb2RlIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdWJzeXN0ZW0uXG5cbkNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGltcGFjdCBvbiB0aGVzZSBsb3ctbGV2ZWwgbmV0d29ya2luZyBwcmltaXRpdmVzLCBhbG9uZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHNvY2tldCBsb2NraW5nLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgc2tiIGJ1ZmZlcnMgYW5kIGFyZSBpbnZvbHZlZCBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgUFBQIG92ZXIgQVRNIGNvbnRleHQsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy5cblxuRnJvbSBhIHN5bWJvbCBwZXJzcGVjdGl2ZSwgYHBwcG9hdG1fc2VuZGAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBCdXQsIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIGBwcHBvYXRtLmNgLiBTbywgSSdsbCBrZWVwIHRoZSBmb2xsb3dpbmcgaW4gbWluZDogYHBwcG9hdG1fc2VuZGAsIGBwcHBvYXRtX2Fzc2lnbl92Y2NgLCBgcHBwb2F0bV9pb2N0bGAsIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAsIGBwcHBvYXRtX21heV9zZW5kYCwgYHBwcG9hdG1fcHVzaGAgYW5kIGBwcHBvYXRtX3BvcGAuIGBwcHBvYXRtX3NlbmRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIGJlIHRhcmdldGVkIGJ1dCBJIHNob3VsZCB0ZXN0IHRoZSBvdGhlcnMgdG9vLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgYENPTkZJR19QUFBPQVRNYCwgYENPTkZJR19BVE1gLCBhbmQgYENPTkZJR19QUFBgIGFyZSBhbGwgaW1wb3J0YW50LiBJIGtub3cgUFBQT0FUTSBkZXBlbmRzIG9uIEFUTSwgYW5kIEknbGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgdG8gc2VlIGlmIFBQUE9BVE0gaGFzIGFueSBoYXJkIGRlcGVuZGVuY3kgb24gUFBQLiBUaGlzIGNvbmZpcm1zIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIGlzIGVuYWJsZWQgYW5kIGFjY2Vzc2libGUgdG8gdHJpZ2dlciB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6NDguMzE4MzY5ODk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM3ODgxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBQUFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6NDguMzY0NzU3ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2MzU3Nzg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFBQUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBQUFAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIGxpbmVzIDEgdG8gNTAuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIG91dGxpbmUgdGhlIGNvcmUsIGZ1bmRhbWVudGFsIG9wdGlvbnMgdGhhdCBkZWZpbmUgdGhlIGJhc2UgUFBQIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjay4gSSdtIGxvb2tpbmcgZm9yIHRoZSB2ZXJ5IGJ1aWxkaW5nIGJsb2NrcyDigJMgdGhpbmdzIGxpa2UgdGhlIGFiaWxpdHkgdG8gZW5hYmxlIG9yIGRpc2FibGUgUFBQIHN1cHBvcnQgZW50aXJlbHksIHBlcmhhcHMgZGlmZmVyZW50IHZhcmlhbnRzIG9yIGZsYXZvcnMgb2YgUFBQLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWcgYmxvY2ssIGFueSBjb25kaXRpb25hbHMsIGFuZCB0aGUgcGhyYXNpbmcgb2YgdGhlIGhlbHAgdGV4dC4gSSdtIGFsc28gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIGRlZmF1bHQgc2VsZWN0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBiZWZvcmUgSSBkZWx2ZSBpbnRvIG1vcmUgc3BlY2lmaWMgZmVhdHVyZXMuIFRoaXMgaW5pdGlhbCBleGFtaW5hdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgYmFzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzdWJzZXF1ZW50LCBtb3JlIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFBQUC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDo1MC44MjgzMzg2ODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG4gIDQxOlxcdFxcdCAgdGhlIExaVyBjb21wcmVzc2lvbiBtZXRob2QgdG8gY29tcHJlc3MgZWFjaCBQUFAgcGFja2V0IGJlZm9yZSBpdCBpc1xcbiAgNDI6XFx0XFx0ICBzZW50IG92ZXIgdGhlIHdpcmUuIFRoZSBtYWNoaW5lIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rXFxuICA0MzpcXHRcXHQgICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGUgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXFxuICA0NDpcXHRcXHQgIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gRXZlbiBpZiB0aGV5IGRvbid0IHN1cHBvcnQgaXQsXFxuICA0NTpcXHRcXHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0ICBUaGUgUFBQIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIChcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiLFxcbiAgNDg6XFx0XFx0ICBhYm92ZSkgaXMgcHJlZmVyYWJsZSB0byBCU0QtQ29tcHJlc3MsIGJlY2F1c2UgaXQgY29tcHJlc3NlcyBiZXR0ZXJcXG4gIDQ5OlxcdFxcdCAgYW5kIGlzIHBhdGVudC1mcmVlLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjUwLjgyODQxMTQwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjczMTQ4MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgd2hvbGUgc2VjdGlvbiBpcyBndWFyZGVkIGJ5IGFuIGBpZiBQUFAgLi4uIGVuZGlmYCBibG9jay4gVGhhdCB0ZWxscyBtZSB0aGUgY29yZSBQUFAgZnVuY3Rpb25hbGl0eSBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgYW55dGhpbmcgd2l0aGluIGl0IHRvIGV2ZW4gYmUgY29uc2lkZXJlZC4gQW5kIHRoZW4sIGRpdmluZyBkZWVwZXIsIEkgc2VlIGBQUFBPQVRNYCBpcyBleHBsaWNpdGx5IGRlcGVuZGVudCBvbiAqYm90aCogYFBQUGAgYW5kIGBBVE1gLiBUaGF0J3MgbG9naWNhbDsgeW91IG5lZWQgdGhlIFBvaW50LXRvLVBvaW50IFByb3RvY29sIGluZnJhc3RydWN0dXJlICphbmQqIHRoZSBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSBzdXBwb3J0IGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yay4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBzbyBJJ2xsIHBpdm90IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agbm93LiBHb3R0YSBzZWUgd2hhdCBvdGhlciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDA6NTUuMTAxNTYxNDQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0ODY5Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTI4OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjU2LjgzNjQzOTUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODE1OTc0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBJbnNwZWN0aW9uOiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MjguIFRoZSByZWFzb24gSSdtIGhvbmluZyBpbiBvbiB0aGF0IGxvY2F0aW9uIGlzIGxpa2VseSBiZWNhdXNlIEknbSB0cm91Ymxlc2hvb3RpbmcsIG9yIHBlcmhhcHMgY29uZmlndXJpbmcgYSBuZXcgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgbGluZSBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGVuY2xvc2luZyBibG9jayDigJMgYSBgY29uZmlnYCBvcHRpb24sIGFuIGBpZmAgc3RhdGVtZW50LCBhIGBzZWxlY3RgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVW5kZXJzdGFuZGluZyB0aGlzIGVuY2xvc2luZyBjb250ZXh0IGlzIGNydWNpYWwgYmVjYXVzZSBpdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBvcHRpb24gYXQgbGluZSA1MjggKGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIG9wdGlvbnMpIHdpbGwgYmUgY29uc2lkZXJlZCBvciBlbmFibGVkLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQwOjU4LjgxODAzOTc4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcXCJcXG4gNTIxOlxcdFxcbiA1MjI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXFwiXFxuIDUyMzpcXHRcXG4gNTI0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXFwiXFxuIDUyNTpcXHRcXG4gNTI2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcGxpcC9LY29uZmlnXFxcIlxcbiA1Mjc6XFx0XFxuIDUyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbiA1Mjk6XFx0XFxuIDUzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1xcXCJcXG4gNTMxOlxcdFxcbiA1MzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuIDUzMzpcXHRcXG4gNTM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcXFwiXFxuIDUzNTpcXHRcXG4gNTM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1xcXCJcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZ1xcXCJcXG4gNTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MDo1OC44MTgxMTU4NjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2MDQ2MDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQUFBPQVRNIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0byBhbmFseXplLiBGaXJzdCwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGxvb2sgc3RyYWlnaHRmb3J3YXJkOiBgUFBQT0FUTWAsIGBBVE1gLCBgUFBQYCwgYW5kIGBORVRERVZJQ0VTYC4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBQUFAgb3ZlciBBVE0gbmV0d29ya2luZy4gTmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJIHNlZSBgcHBwb2F0bV9zZW5kYCwgYHBwcG9hdG1fYXNzaWduX3ZjY2AsIGFuZCBgcHBwb2F0bV9pb2N0bGAuIERlZmluaXRlbHkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aG9zZSwgZXNwZWNpYWxseSBgcHBwb2F0bV9zZW5kYCBzaW5jZSB0aGF0J3MgdGhlIGRpcmVjdGx5IG1vZGlmaWVkIGZ1bmN0aW9uIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AuIEl0J3MgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UuXG5cblJpZ2h0LCB0aW1lIHRvIHBhY2thZ2UgYWxsIHRoaXMgaW50byB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJ2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIHRoaXMgcGF0Y2ggdG91Y2hlcyBjcml0aWNhbCBuZXR3b3JrIHN0YWNrIGNvZGUsIHNvIGZ1enppbmcgaXMgd2FycmFudGVkLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3Qgd2lsbCBiZSB0aGUgZm91ciBjb25maWd1cmF0aW9ucyBtZW50aW9uZWQgZWFybGllci4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJJ2xsIGluY2x1ZGUgdGhvc2UgdGhyZWUga2V5IGZ1bmN0aW9uczogYHBwcG9hdG1fc2VuZGAsIGBwcHBvYXRtX2Fzc2lnbl92Y2NgLCBhbmQgYHBwcG9hdG1faW9jdGxgLiBGaW5hbGx5LCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBhIGNvbmNpc2Ugc3VtbWFyeTogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoZWFkcm9vbSBleHBhbnNpb24gYW5kIHNvY2tldCB1bmxvY2tpbmcgbG9naWMgaW4gYHBwcG9hdG1fc2VuZGAgYnkgcmVwbGFjaW5nIG1hbnVhbCByZWFsbG9jYXRpb24gd2l0aCBgc2tiX2Nvd19oZWFkKClgLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgaGFuZGxpbmcsIHBhY2tldCB0cmFuc21pc3Npb24sIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgUFBQIG92ZXIgQVRNIG5ldHdvcmtpbmcgZHJpdmVyLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS5cIlxuXG5Pa2F5LCBqdXN0IGEgcXVpY2sgZmluYWwgc2FuaXR5IGNoZWNrLi4uIGNvbmZpZ3VyYXRpb25zLCBzeW1ib2xzLCByZWFzb25pbmcsIGFsbCBpbiBvcmRlci4gTG9va3MgZ29vZC4gVGltZSB0byBzZXQgdGhvc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwOTEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDIuMTc4NTc5MDE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4ODg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIkFUTVwiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJORVRERVZJQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2Fzc2lnbl92Y2NcIixcbiAgICBcInBwcG9hdG1faW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhlYWRyb29tIGV4cGFuc2lvbiBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcHBwb2F0bV9zZW5kIGJ5IHJlcGxhY2luZyBtYW51YWwgc2tiX3JlYWxsb2NfaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggc2tiX2Nvd19oZWFkLiBUaGlzIG1vZGlmaWVzIHNrYiBidWZmZXIgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgUFBQIG92ZXIgQVRNIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgYW5kIGlvY3RsIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIk5FVERFVklDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fYXNzaWduX3ZjY1wiLFxuICAgIFwicHBwb2F0bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGVhZHJvb20gZXhwYW5zaW9uIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBwcHBvYXRtX3NlbmQgYnkgcmVwbGFjaW5nIG1hbnVhbCBza2JfcmVhbGxvY19oZWFkcm9vbSByZWFsbG9jYXRpb24gd2l0aCBza2JfY293X2hlYWQuIFRoaXMgbW9kaWZpZXMgc2tiIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBQUFAgb3ZlciBBVE0gZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldCBhbmQgaW9jdGwgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDIuMjU0NDc1MjI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY2NjA1NDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQxOjAyLjI1NTAwNTUxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NjY1NTIwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBtYW51YWwgc2tiIGhlYWRyb29tIHJlYWxsb2NhdGlvbiBsb2dpYyB3aXRoIGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAgaW4gYHBwcG9hdG1fc2VuZCgpYC5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczpcXG4tIFRoZSBoZWFkcm9vbSBhbGxvY2F0ZWQgb3IgZW5zdXJlZCB2aWEgYHNrYl9jb3dfaGVhZCgpYCBpcyBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgd2l0aCBgbWVtY3B5KHNrYl9wdXNoKHNrYiwgTExDX0xFTiksIHBwcGxsYywgTExDX0xFTilgLlxcbi0gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgY2hlY2tzLlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBuZWl0aGVyIG9mIHdoaWNoIGFwcGxpZXMgaGVyZS5cXG4tIFBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlLCBoZWFkcm9vbSBib3VuZHMsIG9yIHNrYiBsaWZldGltZS9yZWZjb3VudGluZyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyM2Q3MjhlZTcwMjEyMTBiOTJhODgzODE4MDc2ZjcyMTA3YTJjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjQwOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uNGNlN2ZhNmU0OTNlOSAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTMxNywyMSArMzE3LDEyIEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHN3aXRjaCAocHZjYy1cdTAwM2VlbmNhcHMpIHtcdFx0LyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovXG4gXHRjYXNlIGVfbGxjOlxuLVx0XHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIExMQ19MRU4pIHtcbi1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcbi1cdFx0XHRuID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMTENfTEVOKTtcbi1cdFx0XHRpZiAobiAhPSBOVUxMIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLVx1MDAzZXRydWVzaXplKSkge1xuLVx0XHRcdFx0a2ZyZWVfc2tiKG4pO1xuLVx0XHRcdFx0Z290byBub3NwYWNlO1xuLVx0XHRcdH1cbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHNrYiA9IG47XG4tXHRcdFx0aWYgKHNrYiA9PSBOVUxMKSB7XG4tXHRcdFx0XHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XG4tXHRcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4rXHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gRFJPUF9QQUNLRVQ7XG4rXHRcdH1cbitcdFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cdTAwM2V0cnVlc2l6ZSkpXG4gXHRcdFx0Z290byBub3NwYWNlO1xuIFx0XHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcbiBcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MTowMi4yNTUwMDYzOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc1MTEyMTg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4gSSdsbCBzdGFydCBieSBzeXN0ZW1hdGljYWxseSBhbmFseXppbmcgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgbGV2ZXJhZ2luZyBteSB1c3VhbCB0b29sa2l0LiBNeSBmaXJzdCB0YXJnZXQgd2lsbCBiZSBgbmV0L2F0bS9wcHBvYXRtLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzE3LiBUaGlzIHNlY3Rpb24gaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gcmVzaWRlcywgb3IgYXQgbGVhc3QsIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbW9zdCByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGlzIHBhdGNoLiBJcyBpdCBhIGJ1ZyBmaXgsIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBhIG5ldyBmZWF0dXJlPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IC0gZnVuY3Rpb24gY2FsbHMsIHZhcmlhYmxlIHVzYWdlLCBhbmQgY29tbWVudHMgLSB0byBwaWVjZSB0b2dldGhlciB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGFsdGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2FsIGNvbnRleHQgZmlyc3QsIHdpbGwgdGhlbiBhbGxvdyBtZSB0byBjb25zaWRlciB0aGUgYnJvYWRlciBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDcuMDA2MTMyNjcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xcbiAyOTI6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYztcXG4gMjkzOlxcdFxcdGludCByZXQ7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdEFUTV9TS0Ioc2tiKS1cXHUwMDNldmNjID0gcHZjYy1cXHUwMDNlYXRtdmNjO1xcbiAyOTY6XFx0XFx0cHJfZGVidWcoXFxcIihza2I9MHglcCwgdmNjPTB4JXApXFxcXG5cXFwiLCBza2IsIHB2Y2MtXFx1MDAzZWF0bXZjYyk7XFxuIDI5NzpcXHRcXHRpZiAoc2tiLVxcdTAwM2VkYXRhWzBdID09ICdcXFxcMCcgXFx1MDAyNlxcdTAwMjYgKHB2Y2MtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSlcXG4gMjk4OlxcdFxcdFxcdCh2b2lkKSBza2JfcHVsbChza2IsIDEpO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHR2Y2MgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYztcXG4gMzAxOlxcdFxcdGJoX2xvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDMwMjpcXHRcXHRpZiAoc29ja19vd25lZF9ieV91c2VyKHNrX2F0bSh2Y2MpKSkge1xcbiAzMDM6XFx0XFx0XFx0LypcXG4gMzA0OlxcdFxcdFxcdCAqIE5lZWRzIHRvIGhhcHBlbiAoYW5kIGJlIGZsdXNoZWQsIGhlbmNlIHRlc3RfYW5kXykgYmVmb3JlIHdlIHVubG9ja1xcbiAzMDU6XFx0XFx0XFx0ICogdGhlIHNvY2tldC4gSXQgbmVlZHMgdG8gYmUgc2VlbiBieSB0aGUgdGltZSBvdXIgLVxcdTAwM2VyZWxlYXNlX2NiIGdldHNcXG4gMzA2OlxcdFxcdFxcdCAqIGNhbGxlZC5cXG4gMzA3OlxcdFxcdFxcdCAqL1xcbiAzMDg6XFx0XFx0XFx0dGVzdF9hbmRfc2V0X2JpdChCTE9DS0VELCBcXHUwMDI2cHZjYy1cXHUwMDNlYmxvY2tlZCk7XFxuIDMwOTpcXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuIDMxMDpcXHRcXHR9XFxuIDMxMTpcXHRcXHRpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykgfHxcXG4gMzEyOlxcdFxcdCAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCBcXHUwMDI2dmNjLVxcdTAwM2VmbGFncykpIHtcXG4gMzEzOlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzE0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzMTU6XFx0XFx0XFx0cmV0dXJuIERST1BfUEFDS0VUO1xcbiAzMTY6XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRzd2l0Y2ggKHB2Y2MtXFx1MDAzZWVuY2Fwcykge1xcdFxcdC8qIExMQyBlbmNhcHN1bGF0aW9uIG5lZWRlZCAqL1xcbiAzMTk6XFx0XFx0Y2FzZSBlX2xsYzpcXG4gMzIwOlxcdFxcdFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKSkge1xcbiAzMjE6XFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzMjI6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMyMzpcXHRcXHRcXHRcXHRyZXR1cm4gRFJPUF9QQUNLRVQ7XFxuIDMyNDpcXHRcXHRcXHR9XFxuIDMyNTpcXHRcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxuIDMyNjpcXHRcXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuIDMyNzpcXHRcXHRcXHRtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKTtcXG4gMzI4OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjk6XFx0XFx0Y2FzZSBlX3ZjOlxcbiAzMzA6XFx0XFx0XFx0aWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbiAzMzE6XFx0XFx0XFx0XFx0Z290byBub3NwYWNlO1xcbiAzMzI6XFx0XFx0XFx0YnJlYWs7XFxuIDMzMzpcXHRcXHRjYXNlIGVfYXV0b2RldGVjdDpcXG4gMzM0OlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKHNrX2F0bSh2Y2MpKTtcXG4gMzM1OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJUcnlpbmcgdG8gc2VuZCB3aXRob3V0IHNldHRpbmcgZW5jYXBzIVxcXFxuXFxcIik7XFxuIDMzNjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzM3OlxcdFxcdFxcdHJldHVybiAxO1xcbiAzMzg6XFx0XFx0fVxcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRhdG1fYWNjb3VudF90eCh2Y2MsIHNrYik7XFxuIDM0MTpcXHRcXHRwcl9kZWJ1ZyhcXFwiYXRtX3NrYiglcCktXFx1MDAzZXZjYyglcCktXFx1MDAzZWRldiglcClcXFxcblxcXCIsXFxuIDM0MjpcXHRcXHRcXHQgc2tiLCBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgQVRNX1NLQihza2IpLVxcdTAwM2V2Y2MtXFx1MDAzZWRldik7XFxuIDM0MzpcXHRcXHRyZXQgPSBBVE1fU0tCKHNrYiktXFx1MDAzZXZjYy1cXHUwMDNlc2VuZChBVE1fU0tCKHNrYiktXFx1MDAzZXZjYywgc2tiKVxcbiAzNDQ6XFx0XFx0ICAgID8gRFJPUF9QQUNLRVQgOiAxO1xcbiAzNDU6XFx0XFx0YmhfdW5sb2NrX3NvY2soc2tfYXRtKHZjYykpO1xcbiAzNDY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQ3OlxcdG5vc3BhY2U6XFxuIDM0ODpcXHRcXHRiaF91bmxvY2tfc29jayhza19hdG0odmNjKSk7XFxuIDM0OTpcXHRcXHQvKlxcbiAzNTA6XFx0XFx0ICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmVcXG4gMzUxOlxcdFxcdCAqIGFscmVhZHkgYXBwbGllZCBTQ19DT01QX1BST1QgY29tcHJlc3Npb24sIHNvIG1heSBuZWVkIHRvIHVuZG9cXG4gMzUyOlxcdFxcdCAqL1xcbiAzNTM6XFx0XFx0aWYgKChwdmNjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NPTVBfUFJPVCkgXFx1MDAyNlxcdTAwMjYgc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuIDM1NDpcXHRcXHQgICAgc2tiLVxcdTAwM2VkYXRhWy0xXSA9PSAnXFxcXDAnKVxcbiAzNTU6XFx0XFx0XFx0KHZvaWQpIHNrYl9wdXNoKHNrYiwgMSk7XFxuIDM1NjpcXHRcXHRyZXR1cm4gMDtcXG4gMzU3OlxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0LyogVGhpcyBoYW5kbGVzIGlvY3RscyBzZW50IHRvIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UgKi9cXG4gMzYwOlxcdHN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbiAzNjE6XFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuIDM2MjpcXHR7XFxuIDM2MzpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiAzNjQ6XFx0XFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuIDM2NTpcXHRcXHRcXHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxcbiAzNjY6XFx0XFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuIDM2NzpcXHRcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4gMzY4OlxcdFxcdFxcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuIDM2OTpcXHRcXHRcXHQgICAgPyAtRUZBVUxUIDogMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MDcuMDA2MjM2NzEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwOTc5OTI5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFBvQVRNIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIExMQyBlbmNhcHN1bGF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBQUFBvQVRNIGRyaXZlci4gSSBzZWUgdGhleSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBTaGFyZWQgb3IgQ2xvbmVkIGBza2Jgcy5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGNoZWNrZWQgaWYgdGhlcmUgd2FzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgYHNrYmAgdXNpbmcgYHNrYl9oZWFkcm9vbShza2IpYC4gSWYgbm90LCBpdCB3b3VsZCBhdHRlbXB0IHRvIHJlYWxsb2NhdGUgd2l0aCBgc2tiX3JlYWxsb2NfaGVhZHJvb21gLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgc2tiX2hlYWRyb29tYCBtaWdodCByZXBvcnQgZW5vdWdoIHNwYWNlICppbml0aWFsbHkqLCBidXQgaWYgdGhlIGBza2JgIHdhcyBzaGFyZWQgKGxpa2UgZnJvbSBhIGNsb25lKSBvciBoYWQgZXhpc3RpbmcgcmVmZXJlbmNlcywgdGhlbiBtb2RpZnlpbmcgaXRzIGhlYWQgKHdpdGggYG1lbWNweWAgb3IgcmVhbGxvY2F0aW9uKSB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIG9sZCBjb2RlIHdhcyB0cnlpbmcgdG8gaGFuZGxlIHRoaXMsIGJ1dCB0aGUgbG9naWMgd2FzIGEgYml0IGNvbnZvbHV0ZWQsIGVzcGVjaWFsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSByZWFsbG9jYXRlZCBgc2tiYCBpbiB0aGUgY29uZGl0aW9uYWwuXG5cblRoZSBuZXcgYXBwcm9hY2ggaXMgZmFyIGNsZWFuZXI6IGBza2JfY293X2hlYWQoc2tiLCBMTENfTEVOKWAuIFRoaXMgZnVuY3Rpb24gZWxlZ2FudGx5IGhhbmRsZXMgdHdvIHRoaW5nczogMSkgaXQgZW5zdXJlcyB0aGF0IHRoZSBgc2tiYCBoYXMgZW5vdWdoIGhlYWRyb29tIChhbGxvY2F0aW5nIG1vcmUgaWYgbmVlZGVkKSBhbmQgMikgaWYgdGhlIGBza2JgIGlzIHNoYXJlZCwgaXQgbWFrZXMgYSBjb3B5IChDb3B5LU9uLVdyaXRlLCBvciBDT1cpIHRvIGVuc3VyZSB0aGF0IG1vZGlmaWNhdGlvbnMgYXJlIGlzb2xhdGVkLiBJZiBgc2tiX2Nvd19oZWFkYCBmYWlscywgd2UgdW5sb2NrLCBmcmVlIHRoZSBza2IsIGFuZCBkcm9wIHRoZSBwYWNrZXQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLlxuXG5BZnRlciB0aGUgYHNrYl9jb3dfaGVhZGAgY2FsbCwgd2UgY2hlY2sgYHBwcG9hdG1fbWF5X3NlbmRgIGFuZCBpZiB0aGF0J3MgZmFsc2UsIHdlIGdvIHRvIGBub3NwYWNlYC4gSWYgdGhhdCBjaGVjayBpcyBPSywgd2UgdGhlbiBwcm9jZWVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cblxuTm93LCBsZXQncyBhZGRyZXNzIGFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBgc2tiX2Nvd19oZWFkYCB0YWtlcyBjYXJlIG9mIHJlYWxsb2NhdGlvbiBvciB1bnNoYXJpbmcsIGNvcHlpbmcgZGF0YSBhcyBuZWNlc3NhcnkuIGBza2JfcHVzaGAgZXh0ZW5kcyB0aGUgZGF0YSBhcmVhIHRvd2FyZHMgdGhlIGhlYWRyb29tLCBhbmQgdGhlIGBtZW1jcHlgIHRoZW4gY29waWVzIHRoZSBgcHBwbGxjYCBoZWFkZXIgKHdoaWNoIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaW4gdGhlIGNvZGUgYnV0IGxvb2tzIHRvIGJlIGEgc3RhdGljIGNvbnN0IGFycmF5LCBzbyB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcykgaW50byB0aGlzIGFsbG9jYXRlZCBzcGFjZS4gSSdsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgYHBwcGxsY2AgZGVmaW5pdGlvbiBpbiB0aGUgc291cmNlIHRvIGJlIHN1cmUsIGJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG5ldyBhcHByb2FjaCBpcyBtb3JlIHJvYnVzdCBhbmQgc2ltcGxlciB0aGFuIHRoZSBwcmV2aW91cyB2ZXJzaW9uLiBJdCBlZmZlY3RpdmVseSByZXNvbHZlcyB0aGUgc2hhcmVkLWJ1ZmZlciBpc3N1ZXMgYW5kIG1ha2VzIHRoZSBsb2dpYyBtdWNoIG1vcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjQxOjEzLjEwNDIzMjkxMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNzQwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwbGxjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vcHBwb2F0bS5jPTU2PXN0cnVjdCBwcHBvYXRtX3ZjYyB7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy04NS0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo4NjpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcHBsbGNbNl0gPSB7IDB4RkUsIDB4RkUsIDB4MDMsIDB4Q0YsIDB4QzAsIDB4MjEgfTtcXG5uZXQvYXRtL3BwcG9hdG0uYy04Ny0jZGVmaW5lIExMQ19MRU5cXHRcXHQoNClcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jPTE4MT1zdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE5OC1cXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBMTENfTEVOIHx8XFxubmV0L2F0bS9wcHBvYXRtLmM6MTk5OlxcdFxcdCAgICBtZW1jbXAoc2tiLVxcdTAwM2VkYXRhLCBwcHBsbGMsIExMQ19MRU4pKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIwMC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMjA3LVxcdFxcdH1cXG5uZXQvYXRtL3BwcG9hdG0uYzoyMDg6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IHNpemVvZihwcHBsbGMpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2F0bS9wcHBvYXRtLmM6MjA5OlxcdFxcdCAgICAhbWVtY21wKHNrYi1cXHUwMDNlZGF0YSwgcHBwbGxjLCBzaXplb2YocHBwbGxjKSkpIHtcXG5uZXQvYXRtL3BwcG9hdG0uYy0yMTAtXFx0XFx0XFx0cHZjYy1cXHUwMDNlZW5jYXBzID0gZV9sbGM7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMTMtXFx0XFx0fVxcbm5ldC9hdG0vcHBwb2F0bS5jOjIxNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gKHNpemVvZihwcHBsbGMpIC0gTExDX0xFTikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzoyMTU6XFx0XFx0ICAgICFtZW1jbXAoc2tiLVxcdTAwM2VkYXRhLCBcXHUwMDI2cHBwbGxjW0xMQ19MRU5dLFxcbm5ldC9hdG0vcHBwb2F0bS5jOjIxNjpcXHRcXHQgICAgc2l6ZW9mKHBwcGxsYykgLSBMTENfTEVOKSkge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTIxNy1cXHRcXHRcXHRwdmNjLVxcdTAwM2VlbmNhcHMgPSBlX3ZjO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9Mjg5PXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMyNi1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxubmV0L2F0bS9wcHBvYXRtLmM6MzI3OlxcdFxcdG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMyOC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6NDE6MTMuMTUwNjEyNDI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Njk4OTE0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgbGVha3MuIFRoaXMgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoYXQgYHNrYl9yZWFsbG9jX2hlYWRyb29tYCBtZXNzIHdpdGggYHNrYl9jb3dfaGVhZGAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLCB0aGF0J3MgZ29vZC4gVGhlIGNyaXRpY2FsIHRoaW5nIEkgc2VlIGlzIHRoYXQgYW55IG5ld2x5IGFsbG9jYXRlZCBoZWFkcm9vbSwgb3IgZGF0YSBwdXNoZWQgaW50byBpdCwgaXMgaW1tZWRpYXRlbHkgb3ZlcndyaXR0ZW4gd2l0aCBgbWVtY3B5YC4gVGhhdCdzIGEgaHVnZSBwb3NpdGl2ZS4gSSdtIG5vdCBzZWVpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgYXJlIHRoZW4gKnJlYWQqLiBGdXJ0aGVybW9yZSwgdGhlcmUncyBubyBtb2RpZmljYXRpb24gb3IgZXhwb3N1cmUgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIHRocm91Z2ggZnVuY3Rpb25zIGxpa2UgYGNvcHlfdG9fdXNlcmAsIG9yIGV2ZW4gc29tZXRoaW5nIHNuZWFreSBsaWtlIGEgbmV0bGluayBza2Igb3IgYW4gaW9jdGwgYXJndW1lbnQuIFRoaXMgbG9va3MgbGlrZSBwdXJlbHkgbmV0d29yayBza2IgaGVhZHJvb20gcmVhbGxvY2F0aW9uIHdpdGggQ09XIGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBzaGFyZWQgc2tiIHNhZmV0eSwgd2hpY2ggaXMgc21hcnQgdG8gZG8uIERvdWJsZSBjaGVja2luZyB0aGF0IGl0IGRvZXNuJ3QgY29ycnVwdCBzaGFyZWQgc2ticywgb3IgaGF2ZSBpbXByb3BlciBoYW5kbGluZy4gQW55IHNrYiBtYW5hZ2VtZW50IGlzc3VlcyBsaWtlIGRvdWJsZSBmcmVlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzICpzaG91bGQqIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOLCB3aGljaCBpcyBhIGdvb2Qgc2FmZXR5IG5ldC5cblxuTm93LCBsZXQncyB0cmlwbGUtY2hlY2sgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gUmVtZW1iZXIsIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqa2VybmVsLXRvLXVzZXIqIG1lbW9yeSBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOb3BlLCBub3QgaGVyZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8qKiBObywgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgb2YgdGhhdC5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vdCBhIGNoYW5jZS4gVGhpcyBsb29rcyBzb2xpZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZS4gVGhlIHJpc2sgaGVyZSBpcyB3aXRoIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGNhdWdodCB3aXRoIEtBU0FOLCBhbmQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UuXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoYXQuIFRpbWUgdG8gZmlyZSB1cCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBkb2N1bWVudCB0aGlzIHdpdGggY2xlYXIgcmVhc29uaW5nLCBlbXBoYXNpemluZyB0aGUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4gYXBwbGljYWJpbGl0eSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjI1LCJPdXRwdXRUb2tlbnMiOjIzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOTo0MToxNy45MjA1MDcyOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIG1hbnVhbCBza2IgaGVhZHJvb20gcmVhbGxvY2F0aW9uIGxvZ2ljIHdpdGggYHNrYl9jb3dfaGVhZChza2IsIExMQ19MRU4pYCBpbiBgcHBwb2F0bV9zZW5kKClgLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOlxcbi0gVGhlIGhlYWRyb29tIGFsbG9jYXRlZCBvciBlbnN1cmVkIHZpYSBgc2tiX2Nvd19oZWFkKClgIGlzIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB3aXRoIGBtZW1jcHkoc2tiX3B1c2goc2tiLCBMTENfTEVOKSwgcHBwbGxjLCBMTENfTEVOKWAuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBjaGVja3MuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG5laXRoZXIgb2Ygd2hpY2ggYXBwbGllcyBoZXJlLlxcbi0gUG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUsIGhlYWRyb29tIGJvdW5kcywgb3Igc2tiIGxpZmV0aW1lL3JlZmNvdW50aW5nIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgbWFudWFsIHNrYiBoZWFkcm9vbSByZWFsbG9jYXRpb24gbG9naWMgd2l0aCBgc2tiX2Nvd19oZWFkKHNrYiwgTExDX0xFTilgIGluIGBwcHBvYXRtX3NlbmQoKWAuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6XFxuLSBUaGUgaGVhZHJvb20gYWxsb2NhdGVkIG9yIGVuc3VyZWQgdmlhIGBza2JfY293X2hlYWQoKWAgaXMgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHdpdGggYG1lbWNweShza2JfcHVzaChza2IsIExMQ19MRU4pLCBwcHBsbGMsIExMQ19MRU4pYC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGNoZWNrcy5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgbmVpdGhlciBvZiB3aGljaCBhcHBsaWVzIGhlcmUuXFxuLSBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSwgaGVhZHJvb20gYm91bmRzLCBvciBza2IgbGlmZXRpbWUvcmVmY291bnRpbmcgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownzblr[1] Phase: Succeeded StartedAt: 2026-09-08 09:41:28 +0000 UTC FinishedAt: 2026-09-08 09:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 09:41:28 +0000 UTC FinishedAt: 2026-09-08 09:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2] Phase: Succeeded StartedAt: 2026-09-08 09:41:28 +0000 UTC FinishedAt: 2026-09-08 13:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 09:41:28 +0000 UTC FinishedAt: 2026-09-08 13:26:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","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-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 09:41:28 +0000 UTC FinishedAt: 2026-09-08 09:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 09:41:28 +0000 UTC FinishedAt: 2026-09-08 09:41:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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-workflownzblr/series-workflownzblr-convert-artifact-1491323057/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 09:41:38 +0000 UTC FinishedAt: 2026-09-08 10:02:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 09:41:38 +0000 UTC FinishedAt: 2026-09-08 10:02:41 +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:*92ba6330-4415-4b39-aea7-20ab54fde76b,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-workflownzblr/series-workflownzblr-convert-artifact-1491323057/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": "e4e5abc9-b129-4356-b213-47fb18bc18b9", "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-workflownzblr/series-workflownzblr-build-action-1759012575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 09:41:38 +0000 UTC FinishedAt: 2026-09-08 10:02:13 +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:*92ba6330-4415-4b39-aea7-20ab54fde76b,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-workflownzblr/series-workflownzblr-convert-artifact-1491323057/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": "e4e5abc9-b129-4356-b213-47fb18bc18b9", "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-workflownzblr/series-workflownzblr-build-action-1759012575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 10:02:41 +0000 UTC FinishedAt: 2026-09-08 10:02:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 10:02:41 +0000 UTC FinishedAt: 2026-09-08 10:02:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 10:02:41 +0000 UTC FinishedAt: 2026-09-08 10:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 10:02:41 +0000 UTC FinishedAt: 2026-09-08 10:02:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","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-workflownzblr/series-workflownzblr-convert-artifact-452503812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 10:02:51 +0000 UTC FinishedAt: 2026-09-08 10:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 10:02:51 +0000 UTC FinishedAt: 2026-09-08 10:04:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e4e5abc9-b129-4356-b213-47fb18bc18b9,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-workflownzblr/series-workflownzblr-build-action-1759012575/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-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 10:04:46 +0000 UTC FinishedAt: 2026-09-08 10:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 10:04:46 +0000 UTC FinishedAt: 2026-09-08 10:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 10:04:46 +0000 UTC FinishedAt: 2026-09-08 10:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 10:04:46 +0000 UTC FinishedAt: 2026-09-08 10:21:10 +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:*92ba6330-4415-4b39-aea7-20ab54fde76b,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-workflownzblr/series-workflownzblr-convert-artifact-452503812/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": "ae8b86d2-f41a-47b2-adb0-9f1e6ac0f08e", "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-workflownzblr/series-workflownzblr-build-action-4233011984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 10:04:46 +0000 UTC FinishedAt: 2026-09-08 10:21:00 +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:*92ba6330-4415-4b39-aea7-20ab54fde76b,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-workflownzblr/series-workflownzblr-convert-artifact-452503812/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": "ae8b86d2-f41a-47b2-adb0-9f1e6ac0f08e", "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-workflownzblr/series-workflownzblr-build-action-4233011984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 10:21:10 +0000 UTC FinishedAt: 2026-09-08 10:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 10:21:10 +0000 UTC FinishedAt: 2026-09-08 10:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 10:21:10 +0000 UTC FinishedAt: 2026-09-08 10:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 10:21:10 +0000 UTC FinishedAt: 2026-09-08 10:22:48 +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:*ae8b86d2-f41a-47b2-adb0-9f1e6ac0f08e,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-workflownzblr/series-workflownzblr-build-action-4233011984/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-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 10:22:58 +0000 UTC FinishedAt: 2026-09-08 13:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 10:22:58 +0000 UTC FinishedAt: 2026-09-08 13:26:28 +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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"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:*e4e5abc9-b129-4356-b213-47fb18bc18b9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae8b86d2-f41a-47b2-adb0-9f1e6ac0f08e,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-workflownzblr/series-workflownzblr-build-action-1759012575/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-workflownzblr/series-workflownzblr-build-action-4233011984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 10:22:58 +0000 UTC FinishedAt: 2026-09-08 10:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 10:22:58 +0000 UTC FinishedAt: 2026-09-08 10:23:03 +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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"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-workflownzblr/series-workflownzblr-convert-artifact-2626999565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 10:22:58 +0000 UTC FinishedAt: 2026-09-08 10:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 10:22:58 +0000 UTC FinishedAt: 2026-09-08 10:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 10:22:59 +0000 UTC FinishedAt: 2026-09-08 10:22:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 10:23:09 +0000 UTC FinishedAt: 2026-09-08 13:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownzblr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"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":["pppoatm_send","pppoatm_assign_vcc","pppoatm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPPOATM","ATM","PPP","NETDEVICES"],"series_id":"626bfae5-b417-4297-ac88-3d03e373db5c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 10:23:09 +0000 UTC FinishedAt: 2026-09-08 13:26:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e4e5abc9-b129-4356-b213-47fb18bc18b9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae8b86d2-f41a-47b2-adb0-9f1e6ac0f08e,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-workflownzblr/series-workflownzblr-build-action-1759012575/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-workflownzblr/series-workflownzblr-build-action-4233011984/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-workflownzblr/series-workflownzblr-convert-artifact-2626999565/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,}