Name: series-workflow72kxr Phase: Succeeded StartedAt: 2026-09-10 03:32:05 +0000 UTC FinishedAt: 2026-09-10 07:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[0] Phase: Succeeded StartedAt: 2026-09-10 03:32:05 +0000 UTC FinishedAt: 2026-09-10 03:49:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 03:32:05 +0000 UTC FinishedAt: 2026-09-10 03:49:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "08c88aa1-e03b-407e-b9b8-5c4aa66fb813" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_find_inline_data_nolock", "ext4_prepare_inline_data", "ext4_write_inline_data_end" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBjaGVjayBgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplID09IDBgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpYCByZXR1cm5zIGVhcmx5ICh3aXRoIDApIGlmIHRoZSBpbm9kZSBzaXplIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGUgZXh0cmEgaXNpemUsIHhhdHRyIGhlYWRlciwgYW5kIHBhZGRpbmcuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjb21wdXRhdGlvbnMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChlLmcuIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCkgYXJlIGZ1bGx5IG9yIGFwcHJvcHJpYXRlbHkgaW5pdGlhbGl6ZWQuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB0aWdodGVuZWQgYm91bmRzIHZhbGlkYXRpb24gcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnZhbGlkIGxheW91dCB0cmF2ZXJzYWwgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggaXMgcHJvcGVybHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIHNhbml0aXplcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgZm9yIHRoaXMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODA5NWI1MDI1MTRlZjQ4ZjY1MTQ1YTgzNzcyODQ1ZjMxM2QwNDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDM6NDg6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTUxLDcgJiM0MzsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMClcbiYjNDM7XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2smIzM0OywKICAgICYjMzQ7ZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvdW5kcyBjaGVja2luZyBpbiBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKCkgYnkgZW5zdXJpbmcgdGhlIGlub2RlIGhhcyBzdWZmaWNpZW50IHNwYWNlIGZvciBpbmxpbmUgeGF0dHIgZGF0YSAoRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UpIHJhdGhlciB0aGFuIG9ubHkgY2hlY2tpbmcgd2hldGhlciBpX2V4dHJhX2lzaXplIGlzIG5vbi16ZXJvLiBUaGlzIGFmZmVjdHMgZXh0NCBpbm9kZSByZWFkaW5nIGFuZCBpbmxpbmUgZGF0YSBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGR1cmluZyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIG1vdW50aW5nIG9mIGNyYWZ0ZWQgaW1hZ2VzIGluIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4MDk1YjUwMjUxNGVmNDhmNjUxNDVhODM3NzI4NDVmMzEzZDA0M2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwMzo0ODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtMTUxLDcgJiM0MzsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX07CiAJaW50IGVycm9yOwogCi0JaWYgKEVYVDRfSShpbm9kZSktJmd0O2lfZXh0cmFfaXNpemUgPT0gMCkKJiM0MzsJaWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpCiAJCXJldHVybiAwOwogCiAJZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aXMuaWxvYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2UgZm9yIGBmcy9leHQ0L2lubGluZS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaW4gYGZzL2V4dDQvaW5saW5lLmNgIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIExldCYjMzk7cyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudCBmaXJzdCwganVzdCB0byBiZSBzdXJlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBhbnl0aGluZyBtYWxpY2lvdXMsIGp1c3Qgc3RhbmRhcmQgZGVmZW5zaXZlIFFBLCBmdXp6aW5nIHRyaWFnZS4gSXQmIzM5O3MgYSBjb2RlIHJldmlldyBzdGVwLCBzbyBpdCBzaG91bGQgYmUgc2FmZS4gTm8gZXhwbG9pdCBnZW5lcmF0aW9uIGlzIGltcGxpZWQsIG5vIGltbWVkaWF0ZSBoaWdoLXNldmVyaXR5IHJpc2suIFdlIGFyZSBnb29kIHRvIHByb2NlZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoaXMgcGF0Y2guIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgYSBjaGFuZ2UgdG8gaG93IGlubGluZSBkYXRhIGlzIGhhbmRsZWQ6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuYwppbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lubGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmMKQEAgLTE1MSw3ICYjNDM7MTUxLDcgQEAgaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKIAl9OwogCWludCBlcnJvcjsKIAotCWlmIChFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplID09IDApCiYjNDM7CWlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAogCWVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmYW1wO2lzLmlsb2MpOwpgYGAKClNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGEgY2hlY2sgb24gYEVYVDRfSShpbm9kZSktJmd0O2lfZXh0cmFfaXNpemVgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgbWFjcm8gZG9lcyBhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHkgdG8gZmluZCBvdXQgd2hhdCBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VgIGV4cGFuZHMgdG8sIHdobyBjYWxscyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AsIGFuZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgdGhhdCBtaWdodCBiZSBpbiBwbGF5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIG1pZ2h0IHVuY292ZXIgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0ICogY3VycmVudGx5IG9ubHkgdXNlZCBpbiBhIGNvZGUgcGF0aCBjb21pbmcgZm9ybSBleHQ0X2lnZXQsIGJlZm9yZVxuIDE0MTpcdCAqIHRoZSBuZXcgaW5vZGUgaGFzIGJlZW4gdW5sb2NrZWRcbiAxNDI6XHQgKi9cbiAxNDM6XHRpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDE0NDpcdHtcbiAxNDU6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4gMTQ2Olx0XHRcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXG4gMTQ3Olx0XHR9O1xuIDE0ODpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xuIDE0OTpcdFx0XHQubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLFxuIDE1MDpcdFx0XHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXG4gMTUxOlx0XHR9O1xuIDE1MjpcdFx0aW50IGVycm9yO1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG4gMTU1Olx0XHRcdHJldHVybiAwO1xuIDE1NjpcdFxuIDE1NzpcdFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuIDE1ODpcdFx0aWYgKGVycm9yKVxuIDE1OTpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gMTYwOlx0XG4gMTYxOlx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuIDE2MjpcdFx0aWYgKGVycm9yKVxuIDE2MzpcdFx0XHRnb3RvIG91dDtcbiAxNjQ6XHRcbiAxNjU6XHRcdGlmICghaXMucy5ub3RfZm91bmQpIHtcbiAxNjY6XHRcdFx0aWYgKGlzLnMuaGVyZS1cdTAwM2VlX3ZhbHVlX2ludW0pIHtcbiAxNjc6XHRcdFx0XHRFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCBcJiMzNDtpbmxpbmUgZGF0YSB4YXR0ciByZWZlcnMgXCYjMzQ7XG4gMTY4Olx0XHRcdFx0XHRcdCBcJiMzNDt0byBhbiBleHRlcm5hbCB4YXR0ciBpbm9kZVwmIzM0Oyk7XG4gMTY5Olx0XHRcdFx0ZXJyb3IgPSAtRUZTQ09SUlVQVEVEO1xuIDE3MDpcdFx0XHRcdGdvdG8gb3V0O1xuIDE3MTpcdFx0XHR9XG4gMTcyOlx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfb2ZmID0gKHUxNikoKHZvaWQgKilpcy5zLmhlcmUgLVxuIDE3MzpcdFx0XHRcdFx0XHQodm9pZCAqKWV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpKTtcbiAxNzQ6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAmIzQzO1xuIDE3NTpcdFx0XHRcdFx0bGUzMl90b19jcHUoaXMucy5oZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gMTc2Olx0XHR9XG4gMTc3Olx0b3V0OlxuIDE3ODpcdFx0YnJlbHNlKGlzLmlsb2MuYmgpO1xuIDE3OTpcdFx0cmV0dXJuIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBFWFQ0IFhBVFRSIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gZXh0ZW5kZWQgYXR0cmlidXRlcyAoWEFUVFJzKSBhbmQgaW5saW5lIGRhdGEgd2l0aGluIEVYVDQuIFRoZSBzdGFydGluZyBwb2ludD8gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRWAuIFRoYXQgbWFjcm8gaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgc3BhY2UgaXMgYWxsb2NhdGVkIHdpdGhpbiBhbiBpbm9kZSB0byBwb3RlbnRpYWxseSBzdG9yZSBYQVRUUiBkYXRhIGRpcmVjdGx5LiBVbmRlcnN0YW5kaW5nIHRoYXQmIzM5O3Mga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgb2Ygc3RvcmluZyBzbWFsbCBYQVRUUnMgaW4gdGhlIGlub2RlIGl0c2VsZiB2ZXJzdXMgdXNpbmcgc2VwYXJhdGUgYmxvY2tzLgoKTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGlzc2VjdCB0aGUgY2FsbCBjaGFpbiBmb3IgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgaGVhcnQgb2YgcmV0cmlldmluZyB0aGUgaW5saW5lIGRhdGEsIHBvdGVudGlhbGx5IHRoZSBYQVRUUnMsIHdoZW4gdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgaW5vZGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzogd2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gaXQ/IEhvdyBkb2VzIGl0IGFjdHVhbGx5IGxvY2F0ZSBhbmQgcmV0cmlldmUgdGhlIGlubGluZSBYQVRUUiBkYXRhPyBBbnkgc3VidGxldGllcyBsaWtlIGxvY2tpbmcgb3IgY29uY3VycmVuY3kgY29uY2VybnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXRyaWV2YWwgbmVlZCB0byBiZSB1bmRlcnN0b29kLiBUaGlzIG1pZ2h0IGludm9sdmUgbG9va2luZyBhdCBmaWxlIHN5c3RlbXMgdGhhdCBoYXZlIGlzc3VlcyB3aXRoIHBlcmZvcm1hbmNlIHdpdGggaW5saW5lIGRhdGEgcmV0cmlldmFsLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIGluIHRoaXMgYXJlYSBhbmQgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBiZXN0IHRvIHJlY29tbWVuZCB1c2FnZSBvZiB0aGlzIGZpbGVzeXN0ZW0gZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYz0zNT1zdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQzLVxuZnMvZXh0NC9pbmxpbmUuYzo0NDpcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuZnMvZXh0NC9pbmxpbmUuYy00NS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE1My1cbmZzL2V4dDQvaW5saW5lLmM6MTU0Olx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jLTE1NS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMDQtXG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcdGlmIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkgIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jLTUyMDYtXHQgICAgKm1hZ2ljID09IGNwdV90b19sZTMyKEVYVDRfWEFUVFJfTUFHSUMpKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTIyMzA9aW50IGV4dDRfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMjM2LVxuZnMvZXh0NC94YXR0ci5jOjIyMzc6XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYy0yMjM4LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjI1Nj1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI2NC1cbmZzL2V4dDQveGF0dHIuYzoyMjY1Olx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmMtMjI2Ni1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tLVxuZnMvZXh0NC94YXR0ci5oPTQzPXN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmgtMTA2LSAqL1xuZnMvZXh0NC94YXR0ci5oOjEwNzojZGVmaW5lIEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKVx0XHRcdFx0XFxcbmZzL2V4dDQveGF0dHIuaC0xMDgtXHQoKEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSAhPSAwKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGVYdGVuZGVkIEF0dHJpYnV0ZXMgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBpbiBleHQ0LiBUaW1lIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgYGZzL2V4dDQveGF0dHIuaGAuIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgc3RydWN0dXJlIGRlZmluaXRpb25zIHRoZXJlIOKAkyB0aGUgYHN0cnVjdGAgZGVmaW5pdGlvbnMsIHRoZSBtYWNyb3MsIHRoZSBjb25zdGFudHMuLi4gZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB4YXR0cnMgd2l0aGluIHRoZSBmaWxlc3lzdGVtLiBJIHdhbnQgdGhlIGNvbXBsZXRlIHBpY3R1cmU6IGhvdyBhcmUgdGhleSBzdG9yZWQsIHdoYXQgYXJlIHRoZSBrZXkgZmllbGRzLCBhbmQgd2hhdCBhcmUgdGhlIGltcG9ydGFudCBmbGFncyBvciBjaGFyYWN0ZXJpc3RpY3M/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHN0YW5kYXJkIGF0dHJpYnV0ZSBoZWFkZXIsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yIGluc2lnaHQgaW50byB0aGUgZGlmZmVyZW50IG5hbWVzcGFjZXMgb3IgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uIG9mIHRoZSBtZXRhZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhpbmdzIGxpa2UgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgdGhlIHNpemUgbGltaXRzLCBhbmQgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGJha2VkIGludG8gdGhlIGRlc2lnbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoYXQgaGVhZGVyIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS18LS0tLS0tLXxcbiAxMDY6XHQgKi9cbiAxMDc6XHQjZGVmaW5lIEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKVx0XHRcdFx0XFxcbiAxMDg6XHRcdCgoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplICE9IDApIFx1MDAyNlx1MDAyNlx0XHRcdFx0XFxcbiAxMDk6XHRcdCAoRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICYjNDM7IEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSAmIzQzO1x0XFxcbiAxMTA6XHRcdCAgc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgJiM0MzsgRVhUNF9YQVRUUl9QQUQgXHUwMDNjPVx0XFxcbiAxMTE6XHRcdCAgRVhUNF9JTk9ERV9TSVpFKChpbm9kZSktXHUwMDNlaV9zYikpKVxuIDExMjpcdFxuIDExMzpcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8ge1xuIDExNDpcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiAxMTU6XHRcdGNvbnN0IHZvaWQgKnZhbHVlO1xuIDExNjpcdFx0c2l6ZV90IHZhbHVlX2xlbjtcbiAxMTc6XHRcdGludCBuYW1lX2luZGV4O1xuIDExODpcdFx0aW50IGluX2lub2RlO1xuIDExOTpcdH07XG4gMTIwOlx0XG4gMTIxOlx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHtcbiAxMjI6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdDtcbiAxMjM6XHRcdHZvaWQgKmJhc2U7XG4gMTI0Olx0XHR2b2lkICplbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBDYWxsIFNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtJiMzOTtzIGlubGluZSBkYXRhIGhhbmRsaW5nLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgZWRnZSBjYXNlcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBhbnkgcG90ZW50aWFsIHJpc2tzIG9yIGltcHJvdmVtZW50cyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM3Njg9ZXh0ZXJuIGludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozNzY5OmV4dGVybiBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM3NzAtZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQyLSAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxNDM6aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQwNj1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDI0LVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjQyNTpcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNDI2LVx0aWYgKGVpLVx1MDAzZWlfaW5saW5lX29mZilcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtODMyLVx0XHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6ODMzOlx0XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTgzNC1cbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIxNC1cdFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuZnMvZXh0NC9pbm9kZS5jOjUyMTU6XHRcdGVyciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTUyMTYtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MzM9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNzc2LVx0XHRpZiAoIWlzX2Jsb2NrIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbmZzL2V4dDQveGF0dHIuYzoxNzc3Olx0XHRcdHJldCA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE3NzgtXHRcdFx0aWYgKHJldCkge1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yNzY1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODU3LVx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYzoyODU4Olx0XHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTI4NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqS2NvbmZpZyBSZXZpZXcgZm9yIGV4dDQgSW5saW5lIERhdGEgYW5kIEV4dGVuZGVkIEF0dHJpYnV0ZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBteSBkdWNrcyBpbiBhIHJvdyBmb3IgdGhlIGV4dDQgY2hhbmdlcyB3ZSYjMzk7cmUgbG9va2luZyBhdCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBpbmxpbmUgZGF0YSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gTGV0IG1lIGp1c3Qgb3BlbiB1cCB0aGUgS2NvbmZpZyBmaWxlcy4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkLiBBcmUgdGhleSBzZXBhcmF0ZSBvcHRpb25zPyBBcmUgdGhleSBuZXN0ZWQ/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBsaWtlIGEgZ2VuZXJhbCAmIzM0O2V4dDQgc3VwcG9ydCYjMzQ7IGZsYWcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBldmVuICpzZWUqIHRoZSBpbmxpbmUgZGF0YSBvciB4YXR0ciBvcHRpb25zPyBXaGF0IGFib3V0IGRlZmF1bHQgdmFsdWVzPyBBcmUgdGhleSBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGVtPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBtYWtpbmcgc3VyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiByZWZsZWN0cyB0aGUgZGVzaXJlZCBiZWhhdmlvci4gSSBhbHNvIHNob3VsZCBjb25zaWRlciBhbnkgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvLmt1bml0Y29uZmlnPTE9Q09ORklHX0tVTklUPXlcbmZzL2V4dDQvLmt1bml0Y29uZmlnOjI6Q09ORklHX0VYVDRfRlM9eVxuZnMvZXh0NC8ua3VuaXRjb25maWctMy1DT05GSUdfRVhUNF9LVU5JVF9URVNUUz15XG4tLVxuZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbmZzL2V4dDQvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG5mcy9leHQ0L0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zOC1cdGRlcGVuZHMgb24gRVhUMl9GUz1uXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG5mcy9leHQ0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy00OS1cdHNlbGVjdCBGU19QT1NJWF9BQ0xcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbmZzL2V4dDQvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTU5LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz02OD1jb25maWcgRVhUNF9ERUJVR1xuZnMvZXh0NC9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG5mcy9leHQ0L0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy03MS1cdGhlbHBcbi0tXG5mcy9leHQ0L0tjb25maWc9Nzc9Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcbmZzL2V4dDQvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBleHQ0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmZzL2V4dDQvS2NvbmZpZzo3OTpcdGRlcGVuZHMgb24gRVhUNF9GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbmZzL2V4dDQvS2NvbmZpZy04MC1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS01LVxuZnMvZXh0NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19FWFQ0X0ZTKSAmIzQzOz0gZXh0NC5vXG5mcy9leHQ0L01ha2VmaWxlLTctXG5mcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlOjE1OmV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuLS1cbmZzL2V4dDQvYWNsLmg9Mzk9c3RhdGljIGlubGluZSBpbnQgZXh0NF9hY2xfY291bnQoc2l6ZV90IHNpemUpXG4tLVxuZnMvZXh0NC9hY2wuaC01NC1cbmZzL2V4dDQvYWNsLmg6NTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9hY2wuaC01Ni1cbi0tXG5mcy9leHQ0L2FjbC5oPTYxPWV4dGVybiBpbnQgZXh0NF9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopO1xuZnMvZXh0NC9hY2wuaC02Mi1cbmZzL2V4dDQvYWNsLmg6NjM6I2Vsc2UgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC02NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tLVxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxuLS1cbmZzL2V4dDQvYWNsLmgtNzItfVxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC03NC1cbi0tXG5mcy9leHQ0L2ZzbWFwLmgtNi0gKi9cbmZzL2V4dDQvZnNtYXAuaDo3OiNpZm5kZWYgX19FWFQ0X0ZTTUFQX0hfX1xuZnMvZXh0NC9mc21hcC5oOjg6I2RlZmluZVx0X19FWFQ0X0ZTTUFQX0hfX1xuZnMvZXh0NC9mc21hcC5oLTktXG4tLVxuZnMvZXh0NC9mc21hcC5oPTM5PWludCBleHQ0X2dldGZzbWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X2ZzbWFwX2hlYWQgKmhlYWQsXG4tLVxuZnMvZXh0NC9mc21hcC5oLTU1LVxuZnMvZXh0NC9mc21hcC5oOjU2OiNlbmRpZiAvKiBfX0VYVDRfRlNNQVBfSF9fICovXG4tLVxuZnMvZXh0NC9pYWxsb2MuYz04NzY9c3RhdGljIGludCBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90IG1vZGUsXG4tLVxuZnMvZXh0NC9pYWxsb2MuYy04ODAtXHRpbnQgbmJsb2NrcyA9IDA7XG5mcy9leHQ0L2lhbGxvYy5jOjg4MTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L2lhbGxvYy5jLTg4Mi1cdHN0cnVjdCBwb3NpeF9hY2wgKnAgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTkzOC1cdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXG5mcy9leHQ0L3N1cGVyLmM6MTkzOTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3N1cGVyLmMtMTk0MC1cdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYz00NDA0PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MTktXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcbmZzL2V4dDQvc3VwZXIuYzo0NDIwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvc3VwZXIuYy00NDIxLVx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xuZnMvZXh0NC94YXR0ci5jLTg5LVx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cdFx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQveGF0dHIuYy05MS1cdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuLS1cbmZzL2V4dDQveGF0dHIuYy05NC1cdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmMtOTYtXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVx0XHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTEwNS1cdFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmg9MjA4PV9feGF0dHJfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5oLTIxMy1cbmZzL2V4dDQveGF0dHIuaDoyMTQ6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmgtMjE1LWV4dGVybiBpbnQgZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gRGVwZW5kZW5jaWVzIG9mIGBpbmxpbmUuY2Agd2l0aGluIGV4dDQqKgoKUmlnaHQsIHNvIGBpbmxpbmUuY2Agd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gc2VlbXMgdG8gYmUgY29udGluZ2VudCBvbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIFNwZWNpZmljYWxseSwgYENPTkZJR19FWFQ0X0ZTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcywgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGluIGBmcy9leHQ0L01ha2VmaWxlYC4gSSB3aWxsIHZlcmlmeSB0aGF0IHRoZSBjb21waWxhdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgaXMgaW5kZWVkIGhhbmRsZWQgaW4gdGhhdCBgTWFrZWZpbGVgLCBhbmQgYWxzbyB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24gY29uc3RyYWludC4gTG9va2luZyBhdCBsaW5lcyA4LTE1IHRoZXJlIHNob3VsZCBnaXZlIG1lIGFsbCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGV4dDQtZmlsZXN5c3RlbSByb3V0aW5lcy5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0VYVDRfRlMpICYjNDM7PSBleHQ0Lm9cbiAgIDc6XHRcbiAgIDg6XHRleHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4gICA5Olx0XHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbiAgMTA6XHRcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuICAxMTpcdFx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiAgMTI6XHRcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbiAgMTM6XHRcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbiAgMTQ6XHRcbiAgMTU6XHRleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG4gIDE2Olx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuICAxNzpcdGV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG4gIDE4Olx0XHRcdFx0XHRcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXHRcdCYjNDM7PSBleHQ0LXRlc3Qub1xuICAyMDpcdGV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQmIzQzOz0gdmVyaXR5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjIKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBJbmxpbmUgRGF0YSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBJbml0aWFsbHksIGl0IGp1c3QgY2hlY2tlZCBpZiBgaV9leHRyYV9pc2l6ZWAgd2FzIHplcm8sIGJ1dCBub3cgaXQgdXNlcyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpYC4gVGhpcyBuZXcgY2hlY2sgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGFkZHMgYSBib3VuZHMgY2hlY2ssIGVuc3VyaW5nIHRoYXQgdGhlIGBpX2V4dHJhX2lzaXplYCB2YWx1ZSwgYWxvbmcgd2l0aCB0aGUgaW5saW5lIHhhdHRyIGhlYWRlciwgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBpbm9kZSYjMzk7cyBzaXplIG9uIGRpc2suIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGNyYXNoZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29ycnVwdGVkIG9yIGNyYWZ0ZWQgZmlsZSBzeXN0ZW1zIHdoZXJlIGBpX2V4dHJhX2lzaXplYCBtaWdodCBiZSBtYWxpY2lvdXMuIFRoZSBvbGQgY29kZSBqdXN0IGJsaXRoZWx5IHByb2NlZWRlZCB0byBsb29rIGZvciB4YXR0cnMgaW4gaWJvZHkgcmVnYXJkbGVzcywgd2hpY2ggaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4KClRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGlubGluZSBkYXRhIGFuZCB4YXR0ciBwcm9jZXNzaW5nIGluIEV4dDQuIFRoZSBhcmVhcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBhcmUgaW5vZGUgbG9va3VwcywgYGV4dDRfaWdldGAsIGlubGluZSBkYXRhIHdyaXRlcywgZXh0ZW5kaW5nIGBpX2V4dHJhX2lzaXplYCwgYW5kIGV2ZW4gbW91bnRpbmcgY3JhZnRlZCBleHQ0IGltYWdlcy4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIHRocm91Z2ggZnV6emluZyB3aXRoIFN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgdGhpcywgYWN0aXZlbHkgZnV6emluZyBmaWxlc3lzdGVtIHN5c2NhbGxzIGFuZCBtb3VudGluZyBjcmFmdGVkIGltYWdlcyB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgIGFuZCBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBleHQ0LiBFeHQ0IGlzIGEgY29yZSBjb21wb25lbnQsIHNvIHRoaXMgY2hhbmdlIGhhcyBzb21lIGhlZnQuCgpMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGUgZnV6emluZyBpbXBsaWNhdGlvbnMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGRlZmluaXRlbHkgdHJ1ZSBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBpbXBvcnRhbnQgYW5kIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGBmcy9leHQ0L2lubGluZS5jYC4gTmV4dCwgd2UgaGF2ZSBgRm9jdXNTeW1ib2xzYC4gSSB0aGluayB3ZSBzaG91bGQga2VlcCBpdCBjb25jaXNlIGFuZCBmb2N1c2VkIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGRpcmVjdCBjYWxsZXJzIHRoYXQgYWxzbyBkZWFsIHdpdGggaW5saW5lIGRhdGEuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBpcyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AsIHdoaWNoIGlzICpub24tc3RhdGljKiwgYW5kICpub3QqIHViaXF1aXRvdXMsIGFuZCBpdCBpcyAqdGhlKiBzeW1ib2wgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBXZSBjYW4gYWxzbyBpbmNsdWRlIGBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGFgLCBgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmRgLCBhbmQgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhcyB0aGV5IGFsc28gZGVhbCB3aXRoIGlubGluZSBkYXRhLgoKRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBFWFQ0X0ZTYCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLgoKQSBxdWljayBkb3VibGUtY2hlY2s6CiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtFWFQ0X0ZTJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssICYjMzQ7ZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhJiMzNDssICYjMzQ7ZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQmIzM0OywgJiMzNDtleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSYjMzQ7XWAKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlCiogICBSZWFzb25pbmc6IGNvbmNpc2UgYW5kIGFjY3VyYXRlLgoKQWxyaWdodCwgc2VlbXMgc29saWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm91bmRzIGNoZWNraW5nIGluIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKSBieSBlbnN1cmluZyB0aGUgaW5vZGUgaGFzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIGlubGluZSB4YXR0ciBkYXRhIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSkgcmF0aGVyIHRoYW4gb25seSBjaGVja2luZyB3aGV0aGVyIGlfZXh0cmFfaXNpemUgaXMgbm9uLXplcm8uIFRoaXMgYWZmZWN0cyBleHQ0IGlub2RlIHJlYWRpbmcgYW5kIGlubGluZSBkYXRhIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbW91bnRpbmcgb2YgY3JhZnRlZCBpbWFnZXMgaW4gc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm91bmRzIGNoZWNraW5nIGluIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKSBieSBlbnN1cmluZyB0aGUgaW5vZGUgaGFzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIGlubGluZSB4YXR0ciBkYXRhIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSkgcmF0aGVyIHRoYW4gb25seSBjaGVja2luZyB3aGV0aGVyIGlfZXh0cmFfaXNpemUgaXMgbm9uLXplcm8uIFRoaXMgYWZmZWN0cyBleHQ0IGlub2RlIHJlYWRpbmcgYW5kIGlubGluZSBkYXRhIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbW91bnRpbmcgb2YgY3JhZnRlZCBpbWFnZXMgaW4gc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGNoZWNrIGBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIGxvY2FsIHN0cnVjdHVyZXMgKGUuZy4gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgKSBhcmUgZnVsbHkgb3IgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBmb3IgdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODA5NWI1MDI1MTRlZjQ4ZjY1MTQ1YTgzNzcyODQ1ZjMxM2QwNDNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDM6NDg6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuYwppbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lubGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmMKQEAgLTE1MSw3ICYjNDM7MTUxLDcgQEAgaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKIAl9OwogCWludCBlcnJvcjsKIAotCWlmIChFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplID09IDApCiYjNDM7CWlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAogCWVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmYW1wO2lzLmlsb2MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NAoJCQkJCQkJb3V0cHV0OiA2MgoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVYVDQgSW5saW5lIERhdGEgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjaGFuZ2VzIG1hZGUgd2l0aGluIGBmcy9leHQ0L2lubGluZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjb25kaXRpb25hbCBjaGFuZ2U6IHRoZSBvcmlnaW5hbCBjaGVjayBmb3IgYGlfZXh0cmFfaXNpemUgPT0gMGAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGNoZWNrIGZvciBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgaW5saW5lIGRhdGEgaXMgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyAoWEFUVFJzKS4KClRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyDigJMgbGlrZWx5IGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgYm90aCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgYW5kIHRoZSBtYWNybyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFYCBhY3R1YWxseSBzaWduaWZpZXMuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGNoYW5nZSBhaW1zIHRvIGludGVncmF0ZSBYQVRUUiBoYW5kbGluZyBtb3JlIGRpcmVjdGx5IHdpdGggaW5saW5lIGRhdGEgbWFuYWdlbWVudCwgcGVyaGFwcyB0byBvcHRpbWl6ZSBzcGFjZSBhbGxvY2F0aW9uIG9yIGltcHJvdmUgY29uc2lzdGVuY3kuIEl0JiMzOTtzIGFsc28gcG9zc2libGUgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIHRvIG1ha2UgdGhpbmdzIG1vcmUgcm9idXN0IG9yIGNsZWFyLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jPTM1PXN0YXRpYyBpbnQgZ2V0X21heF9pbmxpbmVfeGF0dHJfdmFsdWVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDMtXG5mcy9leHQ0L2lubGluZS5jOjQ0Olx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jLTQ1LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE0Mz1pbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTUzLVxuZnMvZXh0NC9pbmxpbmUuYzoxNTQ6XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbmZzL2V4dDQvaW5saW5lLmMtMTU1LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIwNC1cbmZzL2V4dDQvaW5vZGUuYzo1MjA1Olx0aWYgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSAgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2lub2RlLmMtNTIwNi1cdCAgICAqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjIzMD1pbnQgZXh0NF94YXR0cl9pYm9keV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXG4tLVxuZnMvZXh0NC94YXR0ci5jLTIyMzYtXG5mcy9leHQ0L3hhdHRyLmM6MjIzNzpcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuZnMvZXh0NC94YXR0ci5jLTIyMzgtXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yMjU2PWludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMjY0LVxuZnMvZXh0NC94YXR0ci5jOjIyNjU6XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYy0yMjY2LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5mcy9leHQ0L3hhdHRyLmg9NDM9c3RydWN0IGV4dDRfeGF0dHJfZW50cnkge1xuLS1cbmZzL2V4dDQveGF0dHIuaC0xMDYtICovXG5mcy9leHQ0L3hhdHRyLmg6MTA3OiNkZWZpbmUgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpXHRcdFx0XHRcXFxuZnMvZXh0NC94YXR0ci5oLTEwOC1cdCgoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplICE9IDApIFx1MDAyNlx1MDAyNlx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHQgKiBjdXJyZW50bHkgb25seSB1c2VkIGluIGEgY29kZSBwYXRoIGNvbWluZyBmb3JtIGV4dDRfaWdldCwgYmVmb3JlXG4gMTQxOlx0ICogdGhlIG5ldyBpbm9kZSBoYXMgYmVlbiB1bmxvY2tlZFxuIDE0MjpcdCAqL1xuIDE0MzpcdGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gMTQ0Olx0e1xuIDE0NTpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbiAxNDY6XHRcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSxcbiAxNDc6XHRcdH07XG4gMTQ4Olx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4gMTQ5Olx0XHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4gMTUwOlx0XHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbiAxNTE6XHRcdH07XG4gMTUyOlx0XHRpbnQgZXJyb3I7XG4gMTUzOlx0XG4gMTU0Olx0XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbiAxNTU6XHRcdFx0cmV0dXJuIDA7XG4gMTU2Olx0XG4gMTU3Olx0XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4gMTU4Olx0XHRpZiAoZXJyb3IpXG4gMTU5Olx0XHRcdHJldHVybiBlcnJvcjtcbiAxNjA6XHRcbiAxNjE6XHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4gMTYyOlx0XHRpZiAoZXJyb3IpXG4gMTYzOlx0XHRcdGdvdG8gb3V0O1xuIDE2NDpcdFxuIDE2NTpcdFx0aWYgKCFpcy5zLm5vdF9mb3VuZCkge1xuIDE2NjpcdFx0XHRpZiAoaXMucy5oZXJlLVx1MDAzZWVfdmFsdWVfaW51bSkge1xuIDE2NzpcdFx0XHRcdEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIFwmIzM0O2lubGluZSBkYXRhIHhhdHRyIHJlZmVycyBcJiMzNDtcbiAxNjg6XHRcdFx0XHRcdFx0IFwmIzM0O3RvIGFuIGV4dGVybmFsIHhhdHRyIGlub2RlXCYjMzQ7KTtcbiAxNjk6XHRcdFx0XHRlcnJvciA9IC1FRlNDT1JSVVBURUQ7XG4gMTcwOlx0XHRcdFx0Z290byBvdXQ7XG4gMTcxOlx0XHRcdH1cbiAxNzI6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAodTE2KSgodm9pZCAqKWlzLnMuaGVyZSAtXG4gMTczOlx0XHRcdFx0XHRcdCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYykpO1xuIDE3NDpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICYjNDM7XG4gMTc1Olx0XHRcdFx0XHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiAxNzY6XHRcdH1cbiAxNzc6XHRvdXQ6XG4gMTc4Olx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4gMTc5Olx0XHRyZXR1cm4gZXJyb3I7XG4gMTgwOlx0fVxuIDE4MTpcdFxuIDE4MjpcdHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcbiAxODM6XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuLFxuIDE4NDpcdFx0XHRcdFx0IHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG4gMTg1Olx0e1xuIDE4NjpcdFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xuIDE4NzpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4gMTg4Olx0XHRpbnQgY3BfbGVuID0gMDtcbiAxODk6XHRcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4gMTkwOlx0XG4gMTkxOlx0XHRpZiAoIWxlbilcbiAxOTI6XHRcdFx0cmV0dXJuIDA7XG4gMTkzOlx0XG4gMTk0Olx0XHRCVUdfT04obGVuIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpO1xuIDE5NTpcdFxuIDE5NjpcdFx0Y3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuIDE5NzpcdFxuIDE5ODpcdFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7XG4gMTk5Olx0XHRtZW1jcHkoYnVmZmVyLCAodm9pZCAqKShyYXdfaW5vZGUtXHUwMDNlaV9ibG9jayksIGNwX2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRVhUNCBJbm9kZSYjMzk7cyBFeHRlbmRlZCBBdHRyaWJ1dGUgU3BhY2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBFWFQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgbWFjcm8gYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBkZWZpbmVkIGluIGBmcy9leHQ0L3hhdHRyLmhgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGhlYWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gaW5vZGUgaGFzIHNwYWNlIGFsbG9jYXRlZCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgaG93IHhhdHRycyBhcmUgbWFuYWdlZCBvbiBkaXNrIGFuZCBpbiBtZW1vcnksIHNvIGdldHRpbmcgYSBzb2xpZCBncmlwIG9uIHRoaXMgbWFjcm8gaXMgZXNzZW50aWFsLiBJJiMzOTttIGFzc3VtaW5nIGl0IGludm9sdmVzIGNoZWNraW5nIHNvbWUgYml0cyB3aXRoaW4gdGhlIGlub2RlIHN0cnVjdHVyZSBvciBtYXliZSBleGFtaW5pbmcgc29tZSByZWxhdGVkIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1hY3JvJiMzOTtzIGRlZmluaXRpb24gaGFzIHRvIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdC8qXG4gMTAxOlx0ICogSWYgd2Ugd2FudCB0byBhZGQgYW4geGF0dHIgdG8gdGhlIGlub2RlLCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXRcbiAxMDI6XHQgKiBpX2V4dHJhX2lzaXplIGlzIG5vdCAwIGFuZCB0aGF0IHRoZSBpbm9kZSBzaXplIGlzIG5vdCBsZXNzIHRoYW5cbiAxMDM6XHQgKiBFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgJiM0MzsgZXh0cmFfaXNpemUgJiM0MzsgcGFkLlxuIDEwNDpcdCAqICAgRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICAgZXh0cmFfaXNpemUgaGVhZGVyICAgZW50cnkgICBwYWQgIGRhdGFcbiAxMDU6XHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tfC0tLS0tLS18XG4gMTA2Olx0ICovXG4gMTA3Olx0I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcdFx0XHRcdFxcXG4gMTA4Olx0XHQoKEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSAhPSAwKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4gMTA5Olx0XHQgKEVYVDRfR09PRF9PTERfSU5PREVfU0laRSAmIzQzOyBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgJiM0MztcdFxcXG4gMTEwOlx0XHQgIHNpemVvZihzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIpICYjNDM7IEVYVDRfWEFUVFJfUEFEIFx1MDAzYz1cdFxcXG4gMTExOlx0XHQgIEVYVDRfSU5PREVfU0laRSgoaW5vZGUpLVx1MDAzZWlfc2IpKSlcbiAxMTI6XHRcbiAxMTM6XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIHtcbiAxMTQ6XHRcdGNvbnN0IGNoYXIgKm5hbWU7XG4gMTE1Olx0XHRjb25zdCB2b2lkICp2YWx1ZTtcbiAxMTY6XHRcdHNpemVfdCB2YWx1ZV9sZW47XG4gMTE3Olx0XHRpbnQgbmFtZV9pbmRleDtcbiAxMTg6XHRcdGludCBpbl9pbm9kZTtcbiAxMTk6XHR9O1xuIDEyMDpcdFxuIDEyMTpcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCB7XG4gMTIyOlx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3Q7XG4gMTIzOlx0XHR2b2lkICpiYXNlO1xuIDEyNDpcdFx0dm9pZCAqZW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIENhbGwgU2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJhY2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0mIzM5O3MgaW5saW5lIGRhdGEgaGFuZGxpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyByb3V0aW5lLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGFueSBwb3RlbnRpYWwgcmlza3Mgb3IgaW1wcm92ZW1lbnRzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zNzY4PWV4dGVybiBpbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0Lmg6Mzc2OTpleHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzcwLWV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTEwPWludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE0Mi0gKi9cbmZzL2V4dDQvaW5saW5lLmM6MTQzOmludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE0NC17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz00MDY9c3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQyNC1cdCAqL1xuZnMvZXh0NC9pbmxpbmUuYzo0MjU6XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTQyNi1cdGlmIChlaS1cdTAwM2VpX2lubGluZV9vZmYpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz03OTM9aW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTgzMi1cdFx0ICovXG5mcy9leHQ0L2lubGluZS5jOjgzMzpcdFx0KHZvaWQpIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy04MzQtXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMTQtXHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbmZzL2V4dDQvaW5vZGUuYzo1MjE1Olx0XHRlcnIgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy01MjE2LVx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNjMzPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTc3Ni1cdFx0aWYgKCFpc19ibG9jayBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTc3NzpcdFx0XHRyZXQgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xNzc4LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9Mjc2NT1pbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjg1Ny1cdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmM6Mjg1ODpcdFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0yODU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgRnVuY3Rpb24mIzM5O3MgRXZvbHV0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhIHdpdGhpbiBleHQ0IGlub2Rlcy4gUHJldmlvdXNseSwgdGhlIGNoZWNrIHdhcyBpbmNyZWRpYmx5IHNpbXBsZTogYGlmIChFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplID09IDApIHJldHVybiAwO2AuIEVzc2VudGlhbGx5LCAmIzM0O2lmIGBpX2V4dHJhX2lzaXplYCBpcyB6ZXJvLCB3ZSYjMzk7cmUgZG9uZTsgdGhlcmUmIzM5O3Mgbm8gaW5saW5lIGRhdGEgdG8gZmluZC4mIzM0OyBCdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBhdHRyaWJ1dGVzLCBsaWtlIGBleHQ0X3hhdHRyX2lib2R5X2ZpbmRgIG9yIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIGhhZCB0aGUgbW9yZSByb2J1c3QgY2hlY2sgb2YgYGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKWAsIHdoaWNoIGlzIGNsZWFybHkgbW9yZSBjb21wcmVoZW5zaXZlLgoKTm93LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc2NlbmFyaW8gd2hlcmUgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIHdhc24mIzM5O3QgYmVoYXZpbmcgaWRlYWxseS4gSXQgY29udGludWVkIHByb2Nlc3NpbmcgKmV2ZW4gaWYqIGBpX2V4dHJhX2lzaXplYCB3YXMgKm5vbi16ZXJvKiwgYnV0IGEgc3Vic2VxdWVudCBzaXplIGNoZWNrIGZhaWxlZDogYEVYVDRfR09PRF9PTERfSU5PREVfU0laRSAmIzQzOyBFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplICYjNDM7IHNpemVvZihzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIpICYjNDM7IEVYVDRfWEFUVFJfUEFEICZndDsgRVhUNF9JTk9ERV9TSVpFKChpbm9kZSktJmd0O2lfc2IpYC4gIFRoaXMgdHJpZ2dlcmVkIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGl0IHByb2JhYmx5IHNob3VsZG4mIzM5O3QgaGF2ZSBiZWVuIGNhbGxpbmcgaW4gdGhhdCBzY2VuYXJpbywgbmFtZWx5IGBleHQ0X2dldF9pbm9kZV9sb2NgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9maW5kYC4gSSYjMzk7bGwgd2FudCB0byBpbnZlc3RpZ2F0ZSB3aGF0IGFzc3VtcHRpb25zIGFyZSBidWlsdCBpbnRvIHRob3NlIGNhbGxzLCBhbmQgd2h5IGl0JiMzOTtzIGJlbmVmaWNpYWwgdG8gcHJldmVudCB0aGVtIGZyb20gZXhlY3V0aW5nIGluIHRoaXMgY2FzZS4KCk5leHQgc3RlcDogZGl2ZSBpbnRvIHRoYXQgYGV4dDRfeGF0dHJfaWJvZHlfZmluZGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBpbnNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjMwOlx0aW50IGV4dDRfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuMjIzMTpcdFx0XHRcdCAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCAqaXMpXG4yMjMyOlx0e1xuMjIzMzpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4yMjM0Olx0XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuMjIzNTpcdFx0aW50IGVycm9yO1xuMjIzNjpcdFxuMjIzNzpcdFx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG4yMjM4Olx0XHRcdHJldHVybiAwO1xuMjIzOTpcdFxuMjI0MDpcdFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMtXHUwMDNlaWxvYyk7XG4yMjQxOlx0XHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuMjI0MjpcdFx0aXMtXHUwMDNlcy5iYXNlID0gaXMtXHUwMDNlcy5maXJzdCA9IElGSVJTVChoZWFkZXIpO1xuMjI0MzpcdFx0aXMtXHUwMDNlcy5oZXJlID0gaXMtXHUwMDNlcy5maXJzdDtcbjIyNDQ6XHRcdGlzLVx1MDAzZXMuZW5kID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XG4yMjQ1Olx0XHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkge1xuMjI0NjpcdFx0XHQvKiBGaW5kIHRoZSBuYW1lZCBhdHRyaWJ1dGUuICovXG4yMjQ3Olx0XHRcdGVycm9yID0geGF0dHJfZmluZF9lbnRyeShpbm9kZSwgXHUwMDI2aXMtXHUwMDNlcy5oZXJlLCBpcy1cdTAwM2VzLmVuZCxcbjIyNDg6XHRcdFx0XHRcdFx0IGktXHUwMDNlbmFtZV9pbmRleCwgaS1cdTAwM2VuYW1lLCAwKTtcbjIyNDk6XHRcdFx0aWYgKGVycm9yIFx1MDAyNlx1MDAyNiBlcnJvciAhPSAtRU5PREFUQSlcbjIyNTA6XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4yMjUxOlx0XHRcdGlzLVx1MDAzZXMubm90X2ZvdW5kID0gZXJyb3I7XG4yMjUyOlx0XHR9XG4yMjUzOlx0XHRyZXR1cm4gMDtcbjIyNTQ6XHR9XG4yMjU1Olx0XG4yMjU2Olx0aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4yMjU3Olx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuMjI1ODpcdFx0XHRcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCAqaXMpXG4yMjU5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVkdW5kYW5jeSBpbiBleHQ0IFhhdHRyIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgZXh0NF94YXR0cl9pYm9keV9maW5kYCwgYW5kIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCB3aXRob3V0IHRvdWNoaW5nIGBpcy0mZ3Q7cy5iYXNlYCwgYGlzLSZndDtzLmhlcmVgLCBvciBgaXMtJmd0O3Mubm90X2ZvdW5kYC4gVGhhdCBzZWVtcy4uLm9kZC4gTm93LCBJIHNlZSB0aGlzIGJlaW5nIHVzZWQgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGV5IGluaXRpYWxpemUgYGlzLnMubm90X2ZvdW5kYCB0byBgLUVOT0RBVEFgIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGVuLCB0aGUgY29kZSBjYWxscyBgZXh0NF94YXR0cl9pYm9keV9maW5kYC4gQnV0LCBpZiBgZXJyb3JgIGlzIG5vdCBzZXQsIHRoZW4gdGhlIGNoZWNrIGlzIGAhaXMucy5ub3RfZm91bmRgIHdoaWNoIHNob3VsZCBiZSBmYWxzZSwgc2luY2UgaXQgd2FzIGluaXRpYWxpemVkIHRvIGAtRU5PREFUQWAuIFNvIGJhc2ljYWxseSwgaXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyB0byBgYnJlbHNlKGlzLmlsb2MuYmgpYCBhbmQgcmV0dXJuaW5nIDAsIHdoaWNoIHNlZW1zIGxpa2UgYSBudWxsIG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCBzaW5jZSB0aGUgY2hlY2sgYCFpcy5zLm5vdF9mb3VuZGAgaXMgZXF1aXZhbGVudCB0byBjaGVja2luZyBpZiBgZXJyb3JgIGlzIDAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgaGFwcGVuaW5nPyBJcyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgZG9pbmcgc29tZSB1c2VsZXNzIHdvcmsgYnkgcmVhZGluZyB0aGUgaW5vZGUgbG9jYXRpb24sIHRoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiYWlsIGVhcmx5PyBQZXJoYXBzIGl0JiMzOTtzIHRoZXJlIHRvIHByb3RlY3QgYWdhaW5zdCBzb21lIGluY29uc2lzdGVuY3kgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGlzIHNuaXBwZXQuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb2YgdGhpcywgdG8gZ2FpbiBjb250ZXh0LCBhbmQgZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGRlc2lnbi4gVG8gY2xhcmlmeSB0aGUgd29yaywgSSBuZWVkIHRvIGtub3cgd2h5LgoKSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZ2l0IGxvZyBhbmQgaGlzdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgaW5saW5lLmNgIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvZGUuIEkgbmVlZCB0byBnZXQgdGhlICYjMzQ7d2h5JiMzNDsgYmVmb3JlIEkgY2FuIHNheSBpZiB0aGlzIGlzIGEgYnVnIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM3Njg9ZXh0ZXJuIGludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozNzY5OmV4dGVybiBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM3NzAtZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQyLSAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxNDM6aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQwNj1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDI0LVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjQyNTpcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNDI2LVx0aWYgKGVpLVx1MDAzZWlfaW5saW5lX29mZilcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtODMyLVx0XHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6ODMzOlx0XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTgzNC1cbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIxNC1cdFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuZnMvZXh0NC9pbm9kZS5jOjUyMTU6XHRcdGVyciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTUyMTYtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MzM9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNzc2LVx0XHRpZiAoIWlzX2Jsb2NrIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbmZzL2V4dDQveGF0dHIuYzoxNzc3Olx0XHRcdHJldCA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE3NzgtXHRcdFx0aWYgKHJldCkge1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yNzY1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODU3LVx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYzoyODU4Olx0XHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTI4NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogMjYyCgkJCQkJCQl0aG91Z2h0czogOTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ2hlY2sgaW4gZXh0NCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNoYW5nZSBpbiBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AsIHNwZWNpZmljYWxseSB0aGUgY29uZGl0aW9uIGZvciBhbiBlYXJseSBleGl0LiBQcmV2aW91c2x5LCB3ZSBjaGVja2VkIGlmIGBpX2V4dHJhX2lzaXplYCB3YXMgemVyby4gTm93LCB3ZSYjMzk7cmUgdXNpbmcgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgbWFjcm8gZG9lcyBhIG1vcmUgdGhvcm91Z2ggY2hlY2s6IGl0IG5vdCBvbmx5IHZlcmlmaWVzIGBpX2V4dHJhX2lzaXplYCBpc24mIzM5O3QgemVybyBidXQgYWxzbyBlbnN1cmVzIHRoZSBpbm9kZSBzaXplIGhhcyBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSB4YXR0ciBzcGFjZSwgYWNjb3VudGluZyBmb3IgdGhlIGhlYWRlciBhbmQgcGFkZGluZy4gR29vZCwgYSBtb3JlIHJvYnVzdCBjaGVjayBvdmVyYWxsLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyBpdDoKCjEuICBFeHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGlzIGNvZGUgZG9lc24mIzM5O3QgdG91Y2ggYW55dGhpbmcgZXhwb3NlZCB0byB1c2VybGFuZC4KMi4gIERlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYz8gTm8uIFdlIGhhdmUgYSBsb2NhbCBzdHJ1Y3QsIGBpc2AsIHdoaWNoIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjay4gVGhlIGVhcmx5IHJldHVybiBkb2VzbiYjMzk7dCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YS4KMy4gIEludm9sdmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm9wZSwgaXQgZGVhbHMgd2l0aCBleGlzdGluZyBpbm9kZSBzdHJ1Y3R1cmVzIHdpdGggaW1wcm92ZWQgY2hlY2tzLgo0LiAgQWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdGhyb3VnaCBib3VuZHMgY2hlY2tzPyBOby4gSXQgaW1wcm92ZXMgYm91bmRzIGNoZWNraW5nLCBpbiBmYWN0LCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLgoKU28sIGJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IHRyaWdnZXIgYW55IEtNU0FOIGNvbmNlcm5zLiBJdCYjMzk7cyB0aWdodGVuaW5nIGFuIGV4aXN0aW5nIGNoZWNrLCBlbnN1cmluZyB3ZSBkb24mIzM5O3QgcHJvY2VlZCB3aXRoIHNlYXJjaGluZyBmb3IgaW5saW5lIGRhdGEgd2hlbiB0aGVyZSYjMzk7cyBubyB2YWxpZCB4YXR0ciBzcGFjZS4gSW4gZXNzZW5jZSwgaXQmIzM5O3MgYSBzYW5pdHkgY2hlY2sgb24gaW5vZGUgbGF5b3V0IGNvbnNpc3RlbmN5LgoKVGhpcyBjaGFuZ2UgZG9lcyBib2xzdGVyIEtBU0FOJiMzOTtzIHJvbGUsIGFjdHVhbGx5LiBCeSBiZXR0ZXIgdmFsaWRhdGluZyB0aGUgaW5vZGUmIzM5O3MgaW50ZXJuYWwgbGF5b3V0LCBpdCByZWR1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFsb25nIHdpdGggdHlwaWNhbCBhc3NlcnRpb25zIGFuZCBVQiBzYW5pdGl6ZXJzLiBTbywgaXQmIzM5O3MgYSBnb29kIHRoaW5nLCBhIGRlZmVuc2l2ZSBtZWFzdXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBjaGVjayBgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplID09IDBgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpYCByZXR1cm5zIGVhcmx5ICh3aXRoIDApIGlmIHRoZSBpbm9kZSBzaXplIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGUgZXh0cmEgaXNpemUsIHhhdHRyIGhlYWRlciwgYW5kIHBhZGRpbmcuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjb21wdXRhdGlvbnMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChlLmcuIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCkgYXJlIGZ1bGx5IG9yIGFwcHJvcHJpYXRlbHkgaW5pdGlhbGl6ZWQuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB0aWdodGVuZWQgYm91bmRzIHZhbGlkYXRpb24gcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnZhbGlkIGxheW91dCB0cmF2ZXJzYWwgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggaXMgcHJvcGVybHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIHNhbml0aXplcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgZm9yIHRoaXMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGNoZWNrIGBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIGxvY2FsIHN0cnVjdHVyZXMgKGUuZy4gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgKSBhcmUgZnVsbHkgb3IgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBmb3IgdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjE3NjYwOTI0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzMyMDg4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gICAgXCJleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgY2hlY2sgYEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY29tcHV0YXRpb25zIGluIGEgd2F5IHRoYXQgcmVhZHMgdW5pbml0aWFsaXplZCBkYXRhLiBBbGwgbG9jYWwgc3RydWN0dXJlcyAoZS5nLiBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2ApIGFyZSBmdWxseSBvciBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGZvciB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjE3NjYxNDI2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDk4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODgwOTViNTAyNTE0ZWY0OGY2NTE0NWE4Mzc3Mjg0NWYzMTNkMDQzYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMzo0ODowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xcbmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5AQCAtMTUxLDcgKzE1MSw3IEBAIGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH07XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuLVxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplID09IDApXFxuK1xcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjYzNzg4MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1NzE0MzIzMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gICAgXCJleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYm91bmRzIGNoZWNraW5nIGluIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKSBieSBlbnN1cmluZyB0aGUgaW5vZGUgaGFzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIGlubGluZSB4YXR0ciBkYXRhIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSkgcmF0aGVyIHRoYW4gb25seSBjaGVja2luZyB3aGV0aGVyIGlfZXh0cmFfaXNpemUgaXMgbm9uLXplcm8uIFRoaXMgYWZmZWN0cyBleHQ0IGlub2RlIHJlYWRpbmcgYW5kIGlubGluZSBkYXRhIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbW91bnRpbmcgb2YgY3JhZnRlZCBpbWFnZXMgaW4gc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4MDk1YjUwMjUxNGVmNDhmNjUxNDVhODM3NzI4NDVmMzEzZDA0M2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMzo0ODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMClcbitcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjYzNzg4NDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQxMzQ0NTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRyaWFnZSBmb3IgYGZzL2V4dDQvaW5saW5lLmNgIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGluIGBmcy9leHQ0L2lubGluZS5jYCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBMZXQncyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudCBmaXJzdCwganVzdCB0byBiZSBzdXJlLiBUaGlzIGlzbid0IGFib3V0IGFueXRoaW5nIG1hbGljaW91cywganVzdCBzdGFuZGFyZCBkZWZlbnNpdmUgUUEsIGZ1enppbmcgdHJpYWdlLiBJdCdzIGEgY29kZSByZXZpZXcgc3RlcCwgc28gaXQgc2hvdWxkIGJlIHNhZmUuIE5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBpcyBpbXBsaWVkLCBubyBpbW1lZGlhdGUgaGlnaC1zZXZlcml0eSByaXNrLiBXZSBhcmUgZ29vZCB0byBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhpcyBwYXRjaC4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgaW5saW5lIGRhdGEgaXMgaGFuZGxlZDpcblxuYGBgZGlmZlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMClcbitcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbmBgYFxuXG5TcGVjaWZpY2FsbHksIGl0J3MgcmVwbGFjaW5nIGEgY2hlY2sgb24gYEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZWAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpYCBtYWNybyBkb2VzIGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZS4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5IHRvIGZpbmQgb3V0IHdoYXQgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFYCBleHBhbmRzIHRvLCB3aG8gY2FsbHMgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLCBhbmQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gncyBpbXBhY3QgYW5kIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIG1pZ2h0IHVuY292ZXIgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MTIuMDUxMzMxODMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdCAqIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gYSBjb2RlIHBhdGggY29taW5nIGZvcm0gZXh0NF9pZ2V0LCBiZWZvcmVcXG4gMTQxOlxcdCAqIHRoZSBuZXcgaW5vZGUgaGFzIGJlZW4gdW5sb2NrZWRcXG4gMTQyOlxcdCAqL1xcbiAxNDM6XFx0aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4gMTQ0OlxcdHtcXG4gMTQ1OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuIDE0NjpcXHRcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxcbiAxNDc6XFx0XFx0fTtcXG4gMTQ4OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4gMTQ5OlxcdFxcdFxcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXFxuIDE1MDpcXHRcXHRcXHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXFxuIDE1MTpcXHRcXHR9O1xcbiAxNTI6XFx0XFx0aW50IGVycm9yO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG4gMTU1OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbiAxNTg6XFx0XFx0aWYgKGVycm9yKVxcbiAxNTk6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuIDE2MjpcXHRcXHRpZiAoZXJyb3IpXFxuIDE2MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0aWYgKCFpcy5zLm5vdF9mb3VuZCkge1xcbiAxNjY6XFx0XFx0XFx0aWYgKGlzLnMuaGVyZS1cXHUwMDNlZV92YWx1ZV9pbnVtKSB7XFxuIDE2NzpcXHRcXHRcXHRcXHRFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCBcXFwiaW5saW5lIGRhdGEgeGF0dHIgcmVmZXJzIFxcXCJcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdFxcdCBcXFwidG8gYW4gZXh0ZXJuYWwgeGF0dHIgaW5vZGVcXFwiKTtcXG4gMTY5OlxcdFxcdFxcdFxcdGVycm9yID0gLUVGU0NPUlJVUFRFRDtcXG4gMTcwOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNzE6XFx0XFx0XFx0fVxcbiAxNzI6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmID0gKHUxNikoKHZvaWQgKilpcy5zLmhlcmUgLVxcbiAxNzM6XFx0XFx0XFx0XFx0XFx0XFx0KHZvaWQgKilleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYykpO1xcbiAxNzQ6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgK1xcbiAxNzU6XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaXMucy5oZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUpO1xcbiAxNzY6XFx0XFx0fVxcbiAxNzc6XFx0b3V0OlxcbiAxNzg6XFx0XFx0YnJlbHNlKGlzLmlsb2MuYmgpO1xcbiAxNzk6XFx0XFx0cmV0dXJuIGVycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODoxMi4wNTE0Njg5OTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE1NTQ4ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEVYVDQgWEFUVFIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKFhBVFRScykgYW5kIGlubGluZSBkYXRhIHdpdGhpbiBFWFQ0LiBUaGUgc3RhcnRpbmcgcG9pbnQ/IEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRWAuIFRoYXQgbWFjcm8gaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgc3BhY2UgaXMgYWxsb2NhdGVkIHdpdGhpbiBhbiBpbm9kZSB0byBwb3RlbnRpYWxseSBzdG9yZSBYQVRUUiBkYXRhIGRpcmVjdGx5LiBVbmRlcnN0YW5kaW5nIHRoYXQncyBrZXkgdG8gY29tcHJlaGVuZGluZyB0aGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyBvZiBzdG9yaW5nIHNtYWxsIFhBVFRScyBpbiB0aGUgaW5vZGUgaXRzZWxmIHZlcnN1cyB1c2luZyBzZXBhcmF0ZSBibG9ja3MuXG5cbk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpc3NlY3QgdGhlIGNhbGwgY2hhaW4gZm9yIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGhlYXJ0IG9mIHJldHJpZXZpbmcgdGhlIGlubGluZSBkYXRhLCBwb3RlbnRpYWxseSB0aGUgWEFUVFJzLCB3aGVuIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIGlub2RlLiBJJ2xsIG5lZWQgdG8ga25vdzogd2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gaXQ/IEhvdyBkb2VzIGl0IGFjdHVhbGx5IGxvY2F0ZSBhbmQgcmV0cmlldmUgdGhlIGlubGluZSBYQVRUUiBkYXRhPyBBbnkgc3VidGxldGllcyBsaWtlIGxvY2tpbmcgb3IgY29uY3VycmVuY3kgY29uY2VybnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXRyaWV2YWwgbmVlZCB0byBiZSB1bmRlcnN0b29kLiBUaGlzIG1pZ2h0IGludm9sdmUgbG9va2luZyBhdCBmaWxlIHN5c3RlbXMgdGhhdCBoYXZlIGlzc3VlcyB3aXRoIHBlcmZvcm1hbmNlIHdpdGggaW5saW5lIGRhdGEgcmV0cmlldmFsLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbiB0aGlzIGFyZWEgYW5kIGFueSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYmVzdCB0byByZWNvbW1lbmQgdXNhZ2Ugb2YgdGhpcyBmaWxlc3lzdGVtIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE0LjM2NzA0MTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzcwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbmxpbmUuYz0zNT1zdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDMtXFxuZnMvZXh0NC9pbmxpbmUuYzo0NDpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jLTQ1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTUzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTU0OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTU1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIwNC1cXG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcXHRpZiAoRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpICBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYy01MjA2LVxcdCAgICAqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMjMwPWludCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjM2LVxcbmZzL2V4dDQveGF0dHIuYzoyMjM3OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYy0yMjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIyNTY9aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjI2NC1cXG5mcy9leHQ0L3hhdHRyLmM6MjI2NTpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtMjI2Ni1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD00Mz1zdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmgtMTA2LSAqL1xcbmZzL2V4dDQveGF0dHIuaDoxMDc6I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcXHRcXHRcXHRcXHRcXFxcXFxuZnMvZXh0NC94YXR0ci5oLTEwOC1cXHQoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgIT0gMCkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE0LjQxMjgxNTczOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTQzMDgyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGVYdGVuZGVkIEF0dHJpYnV0ZXMgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGluIGV4dDQuIFRpbWUgdG8ganVtcCByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBgZnMvZXh0NC94YXR0ci5oYC4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSBkZWZpbml0aXZlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGVyZSDigJMgdGhlIGBzdHJ1Y3RgIGRlZmluaXRpb25zLCB0aGUgbWFjcm9zLCB0aGUgY29uc3RhbnRzLi4uIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgeGF0dHJzIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlOiBob3cgYXJlIHRoZXkgc3RvcmVkLCB3aGF0IGFyZSB0aGUga2V5IGZpZWxkcywgYW5kIHdoYXQgYXJlIHRoZSBpbXBvcnRhbnQgZmxhZ3Mgb3IgY2hhcmFjdGVyaXN0aWNzPyBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHN0YW5kYXJkIGF0dHJpYnV0ZSBoZWFkZXIsIGFuZCBJJ20gbG9va2luZyBmb3IgaW5zaWdodCBpbnRvIHRoZSBkaWZmZXJlbnQgbmFtZXNwYWNlcyBvciB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24gb2YgdGhlIG1ldGFkYXRhLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIHRoZSBzaXplIGxpbWl0cywgYW5kIGFueSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhhdCBoZWFkZXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE2LjcwNzEyNzU4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQveGF0dHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDU6XFx0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLXwtLS0tLS0tfFxcbiAxMDY6XFx0ICovXFxuIDEwNzpcXHQjZGVmaW5lIEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTA4OlxcdFxcdCgoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9leHRyYV9pc2l6ZSAhPSAwKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcdFxcXFxcXG4gMTA5OlxcdFxcdCAoRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICsgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9leHRyYV9pc2l6ZSArXFx0XFxcXFxcbiAxMTA6XFx0XFx0ICBzaXplb2Yoc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyKSArIEVYVDRfWEFUVFJfUEFEIFxcdTAwM2M9XFx0XFxcXFxcbiAxMTE6XFx0XFx0ICBFWFQ0X0lOT0RFX1NJWkUoKGlub2RlKS1cXHUwMDNlaV9zYikpKVxcbiAxMTI6XFx0XFxuIDExMzpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIHtcXG4gMTE0OlxcdFxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuIDExNTpcXHRcXHRjb25zdCB2b2lkICp2YWx1ZTtcXG4gMTE2OlxcdFxcdHNpemVfdCB2YWx1ZV9sZW47XFxuIDExNzpcXHRcXHRpbnQgbmFtZV9pbmRleDtcXG4gMTE4OlxcdFxcdGludCBpbl9pbm9kZTtcXG4gMTE5OlxcdH07XFxuIDEyMDpcXHRcXG4gMTIxOlxcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCB7XFxuIDEyMjpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3Q7XFxuIDEyMzpcXHRcXHR2b2lkICpiYXNlO1xcbiAxMjQ6XFx0XFx0dm9pZCAqZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODoxNi43MDcxOTQxOTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE0NjUzOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgQ2FsbCBTaXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIEVzc2VudGlhbGx5LCBJJ20gdHJhY2luZyB0aGUgZnVuY3Rpb24ncyB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGV4dDQgZmlsZXN5c3RlbSdzIGlubGluZSBkYXRhIGhhbmRsaW5nLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgZWRnZSBjYXNlcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGFueSBwb3RlbnRpYWwgcmlza3Mgb3IgaW1wcm92ZW1lbnRzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MTguMzIxODUwNjQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzc2OD1leHRlcm4gaW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaDozNzY5OmV4dGVybiBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzcwLWV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDItICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxNDM6aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTE0NC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTQwNj1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00MjQtXFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo0MjU6XFx0KHZvaWQpIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvaW5saW5lLmMtNDI2LVxcdGlmIChlaS1cXHUwMDNlaV9pbmxpbmVfb2ZmKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz03OTM9aW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtODMyLVxcdFxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6ODMzOlxcdFxcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTgzNC1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MTk4PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfaWdldF9leHRyYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUyMTQtXFx0XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xcbmZzL2V4dDQvaW5vZGUuYzo1MjE1OlxcdFxcdGVyciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy01MjE2LVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNjMzPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNzc2LVxcdFxcdGlmICghaXNfYmxvY2sgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuZnMvZXh0NC94YXR0ci5jOjE3Nzc6XFx0XFx0XFx0cmV0ID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTE3NzgtXFx0XFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI3NjU9aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjg1Ny1cXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYzoyODU4OlxcdFxcdGVycm9yID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTI4NTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE4LjM2NzU3NjUxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc4Mjc1NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipLY29uZmlnIFJldmlldyBmb3IgZXh0NCBJbmxpbmUgRGF0YSBhbmQgRXh0ZW5kZWQgQXR0cmlidXRlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBteSBkdWNrcyBpbiBhIHJvdyBmb3IgdGhlIGV4dDQgY2hhbmdlcyB3ZSdyZSBsb29raW5nIGF0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGlubGluZSBkYXRhIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBMZXQgbWUganVzdCBvcGVuIHVwIHRoZSBLY29uZmlnIGZpbGVzLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZC4gQXJlIHRoZXkgc2VwYXJhdGUgb3B0aW9ucz8gQXJlIHRoZXkgbmVzdGVkPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgbGlrZSBhIGdlbmVyYWwgXCJleHQ0IHN1cHBvcnRcIiBmbGFnIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiAqc2VlKiB0aGUgaW5saW5lIGRhdGEgb3IgeGF0dHIgb3B0aW9ucz8gV2hhdCBhYm91dCBkZWZhdWx0IHZhbHVlcz8gQXJlIHRoZXkgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBkbyBJIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgdGhlbT8gVGhpcyBpcyBnb2luZyB0byBiZSBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgbWFraW5nIHN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVmbGVjdHMgdGhlIGRlc2lyZWQgYmVoYXZpb3IuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MjAuMTQ1ODU0NjE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC8ua3VuaXRjb25maWc9MT1DT05GSUdfS1VOSVQ9eVxcbmZzL2V4dDQvLmt1bml0Y29uZmlnOjI6Q09ORklHX0VYVDRfRlM9eVxcbmZzL2V4dDQvLmt1bml0Y29uZmlnLTMtQ09ORklHX0VYVDRfS1VOSVRfVEVTVFM9eVxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuZnMvZXh0NC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG5mcy9leHQ0L0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTM4LVxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbmZzL2V4dDQvS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctNDktXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5mcy9leHQ0L0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTU5LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz02OD1jb25maWcgRVhUNF9ERUJVR1xcbmZzL2V4dDQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbmZzL2V4dDQvS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctNzEtXFx0aGVscFxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTc3PWNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmZzL2V4dDQvS2NvbmZpZzo3OTpcXHRkZXBlbmRzIG9uIEVYVDRfRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVRcXG5mcy9leHQ0L0tjb25maWctODAtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtNS1cXG5mcy9leHQ0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0VYVDRfRlMpICs9IGV4dDQub1xcbmZzL2V4dDQvTWFrZWZpbGUtNy1cXG5mcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlOjE1OmV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuLS1cXG5mcy9leHQ0L2FjbC5oPTM5PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfYWNsX2NvdW50KHNpemVfdCBzaXplKVxcbi0tXFxuZnMvZXh0NC9hY2wuaC01NC1cXG5mcy9leHQ0L2FjbC5oOjU1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L2FjbC5oLTU2LVxcbi0tXFxuZnMvZXh0NC9hY2wuaD02MT1leHRlcm4gaW50IGV4dDRfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTtcXG5mcy9leHQ0L2FjbC5oLTYyLVxcbmZzL2V4dDQvYWNsLmg6NjM6I2Vsc2UgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xcbmZzL2V4dDQvYWNsLmgtNjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLS1cXG5mcy9leHQ0L2FjbC5oPTY5PWV4dDRfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpXFxuLS1cXG5mcy9leHQ0L2FjbC5oLTcyLX1cXG5mcy9leHQ0L2FjbC5oOjczOiNlbmRpZiAgLyogQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMICovXFxuZnMvZXh0NC9hY2wuaC03NC1cXG4tLVxcbmZzL2V4dDQvZnNtYXAuaC02LSAqL1xcbmZzL2V4dDQvZnNtYXAuaDo3OiNpZm5kZWYgX19FWFQ0X0ZTTUFQX0hfX1xcbmZzL2V4dDQvZnNtYXAuaDo4OiNkZWZpbmVcXHRfX0VYVDRfRlNNQVBfSF9fXFxuZnMvZXh0NC9mc21hcC5oLTktXFxuLS1cXG5mcy9leHQ0L2ZzbWFwLmg9Mzk9aW50IGV4dDRfZ2V0ZnNtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfZnNtYXBfaGVhZCAqaGVhZCxcXG4tLVxcbmZzL2V4dDQvZnNtYXAuaC01NS1cXG5mcy9leHQ0L2ZzbWFwLmg6NTY6I2VuZGlmIC8qIF9fRVhUNF9GU01BUF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9ODc2PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy04ODAtXFx0aW50IG5ibG9ja3MgPSAwO1xcbmZzL2V4dDQvaWFsbG9jLmM6ODgxOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L2lhbGxvYy5jLTg4Mi1cXHRzdHJ1Y3QgcG9zaXhfYWNsICpwID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTM4LVxcdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jOjE5Mzk6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvc3VwZXIuYy0xOTQwLVxcdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ0MDQ9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NDE5LVxcdHNldF9vcHQoc2IsIFhBVFRSX1VTRVIpO1xcbmZzL2V4dDQvc3VwZXIuYzo0NDIwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L3N1cGVyLmMtNDQyMS1cXHRzZXRfb3B0KHNiLCBQT1NJWF9BQ0wpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcl9tYXBbXSA9IHtcXG5mcy9leHQ0L3hhdHRyLmMtODktXFx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cXHRcXHQgICAgID0gXFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzo5MDojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC94YXR0ci5jLTkxLVxcdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2VzcyxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05NC1cXHRbRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVEXVxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjk1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuYy05Ni1cXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cXHQgICAgID0gXFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMDE9Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVxcdFxcdTAwMjZleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuYy0xMDUtXFx0XFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD0yMDg9X194YXR0cl9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcixcXG4tLVxcbmZzL2V4dDQveGF0dHIuaC0yMTMtXFxuZnMvZXh0NC94YXR0ci5oOjIxNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L3hhdHRyLmgtMjE1LWV4dGVybiBpbnQgZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjIwLjE5MTY5NzQzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODY2MTY2ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gRGVwZW5kZW5jaWVzIG9mIGBpbmxpbmUuY2Agd2l0aGluIGV4dDQqKlxuXG5SaWdodCwgc28gYGlubGluZS5jYCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBzZWVtcyB0byBiZSBjb250aW5nZW50IG9uIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbi4gU3BlY2lmaWNhbGx5LCBgQ09ORklHX0VYVDRfRlNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLCBzbyBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbiBgZnMvZXh0NC9NYWtlZmlsZWAuIEkgd2lsbCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlIGlzIGluZGVlZCBoYW5kbGVkIGluIHRoYXQgYE1ha2VmaWxlYCwgYW5kIGFsc28gdW5kZXIgdGhhdCBjb25maWd1cmF0aW9uIGNvbnN0cmFpbnQuIExvb2tpbmcgYXQgbGluZXMgOC0xNSB0aGVyZSBzaG91bGQgZ2l2ZSBtZSBhbGwgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MjQuMDU3ODY2Njk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggZXh0NC1maWxlc3lzdGVtIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfRVhUNF9GUykgKz0gZXh0NC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbiAgMTY6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG4gIDE3OlxcdGV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXHRcXHQrPSBleHQ0LXRlc3Qub1xcbiAgMjA6XFx0ZXh0NC0kKENPTkZJR19GU19WRVJJVFkpXFx0XFx0Kz0gdmVyaXR5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MjQuMDU3OTI2ODk5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MjE2MTA4Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBJbmxpbmUgRGF0YSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gSW5pdGlhbGx5LCBpdCBqdXN0IGNoZWNrZWQgaWYgYGlfZXh0cmFfaXNpemVgIHdhcyB6ZXJvLCBidXQgbm93IGl0IHVzZXMgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgbmV3IGNoZWNrIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBhZGRzIGEgYm91bmRzIGNoZWNrLCBlbnN1cmluZyB0aGF0IHRoZSBgaV9leHRyYV9pc2l6ZWAgdmFsdWUsIGFsb25nIHdpdGggdGhlIGlubGluZSB4YXR0ciBoZWFkZXIsIGRvZXNuJ3QgZXhjZWVkIHRoZSBpbm9kZSdzIHNpemUgb24gZGlzay4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb3IgY3Jhc2hlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb3JydXB0ZWQgb3IgY3JhZnRlZCBmaWxlIHN5c3RlbXMgd2hlcmUgYGlfZXh0cmFfaXNpemVgIG1pZ2h0IGJlIG1hbGljaW91cy4gVGhlIG9sZCBjb2RlIGp1c3QgYmxpdGhlbHkgcHJvY2VlZGVkIHRvIGxvb2sgZm9yIHhhdHRycyBpbiBpYm9keSByZWdhcmRsZXNzLCB3aGljaCBpcyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLlxuXG5UaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyBpbmxpbmUgZGF0YSBhbmQgeGF0dHIgcHJvY2Vzc2luZyBpbiBFeHQ0LiBUaGUgYXJlYXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYXJlIGlub2RlIGxvb2t1cHMsIGBleHQ0X2lnZXRgLCBpbmxpbmUgZGF0YSB3cml0ZXMsIGV4dGVuZGluZyBgaV9leHRyYV9pc2l6ZWAsIGFuZCBldmVuIG1vdW50aW5nIGNyYWZ0ZWQgZXh0NCBpbWFnZXMuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIHRocm91Z2ggZnV6emluZyB3aXRoIFN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgdGhpcywgYWN0aXZlbHkgZnV6emluZyBmaWxlc3lzdGVtIHN5c2NhbGxzIGFuZCBtb3VudGluZyBjcmFmdGVkIGltYWdlcyB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgIGFuZCBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBleHQ0LiBFeHQ0IGlzIGEgY29yZSBjb21wb25lbnQsIHNvIHRoaXMgY2hhbmdlIGhhcyBzb21lIGhlZnQuXG5cbkxldCdzIHRoaW5rIHRocm91Z2ggdGhlIGZ1enppbmcgaW1wbGljYXRpb25zLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IHRydWUgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgaW1wb3J0YW50IGFuZCByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYyBpbiBgZnMvZXh0NC9pbmxpbmUuY2AuIE5leHQsIHdlIGhhdmUgYEZvY3VzU3ltYm9sc2AuIEkgdGhpbmsgd2Ugc2hvdWxkIGtlZXAgaXQgY29uY2lzZSBhbmQgZm9jdXNlZCBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBkaXJlY3QgY2FsbGVycyB0aGF0IGFsc28gZGVhbCB3aXRoIGlubGluZSBkYXRhLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLCB3aGljaCBpcyAqbm9uLXN0YXRpYyosIGFuZCAqbm90KiB1YmlxdWl0b3VzLCBhbmQgaXQgaXMgKnRoZSogc3ltYm9sIG1vZGlmaWVkIGluIHRoZSBwYXRjaC4gV2UgY2FuIGFsc28gaW5jbHVkZSBgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhYCwgYGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kYCwgYW5kIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgYXMgdGhleSBhbHNvIGRlYWwgd2l0aCBpbmxpbmUgZGF0YS5cblxuRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBFWFQ0X0ZTYCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5BIHF1aWNrIGRvdWJsZS1jaGVjazpcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJFWFQ0X0ZTXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja1wiLCBcImV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YVwiLCBcImV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kXCIsIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIl1gXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWVcbiogICBSZWFzb25pbmc6IGNvbmNpc2UgYW5kIGFjY3VyYXRlLlxuXG5BbHJpZ2h0LCBzZWVtcyBzb2xpZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyMiwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODozOC4yNzQwMzcyNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE2NjA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tcIixcbiAgICBcImV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tcIixcbiAgICBcImV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjM4LjM1MjIxMDQ1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNTY0NzkxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODozOC4zNTI2NzI5NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzE1NjAxMjIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGNoZWNrIGBFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplID09IDBgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpYCByZXR1cm5zIGVhcmx5ICh3aXRoIDApIGlmIHRoZSBpbm9kZSBzaXplIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGUgZXh0cmEgaXNpemUsIHhhdHRyIGhlYWRlciwgYW5kIHBhZGRpbmcuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIGxvY2FsIHN0cnVjdHVyZXMgKGUuZy4gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgKSBhcmUgZnVsbHkgb3IgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB0aWdodGVuZWQgYm91bmRzIHZhbGlkYXRpb24gcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnZhbGlkIGxheW91dCB0cmF2ZXJzYWwgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggaXMgcHJvcGVybHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIHNhbml0aXplcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBmb3IgdGhpcyBjaGFuZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODgwOTViNTAyNTE0ZWY0OGY2NTE0NWE4Mzc3Mjg0NWYzMTNkMDQzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDAzOjQ4OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTUxLDcgKzE1MSw3IEBAIGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9O1xuIFx0aW50IGVycm9yO1xuIFxuLVx0aWYgKEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSA9PSAwKVxuK1x0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MzguMzUyNjczNzAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwOTg3OTc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFWFQ0IElubGluZSBEYXRhIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYGZzL2V4dDQvaW5saW5lLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbi4gVGhlIGRpZmYgaGlnaGxpZ2h0cyBhIGNvbmRpdGlvbmFsIGNoYW5nZTogdGhlIG9yaWdpbmFsIGNoZWNrIGZvciBgaV9leHRyYV9pc2l6ZSA9PSAwYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgY2hlY2sgZm9yIGAhRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBpbmxpbmUgZGF0YSBpcyBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyDigJMgbGlrZWx5IGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgYm90aCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgYW5kIHRoZSBtYWNybyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFYCBhY3R1YWxseSBzaWduaWZpZXMuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGNoYW5nZSBhaW1zIHRvIGludGVncmF0ZSBYQVRUUiBoYW5kbGluZyBtb3JlIGRpcmVjdGx5IHdpdGggaW5saW5lIGRhdGEgbWFuYWdlbWVudCwgcGVyaGFwcyB0byBvcHRpbWl6ZSBzcGFjZSBhbGxvY2F0aW9uIG9yIGltcHJvdmUgY29uc2lzdGVuY3kuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGluZ3MgbW9yZSByb2J1c3Qgb3IgY2xlYXIuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo0Mi40NTE0NzkxODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjQ0Mzg5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbmxpbmUuYz0zNT1zdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDMtXFxuZnMvZXh0NC9pbmxpbmUuYzo0NDpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jLTQ1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTUzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTU0OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTU1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIwNC1cXG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcXHRpZiAoRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpICBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYy01MjA2LVxcdCAgICAqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMjMwPWludCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjM2LVxcbmZzL2V4dDQveGF0dHIuYzoyMjM3OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYy0yMjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIyNTY9aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjI2NC1cXG5mcy9leHQ0L3hhdHRyLmM6MjI2NTpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtMjI2Ni1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD00Mz1zdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmgtMTA2LSAqL1xcbmZzL2V4dDQveGF0dHIuaDoxMDc6I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcXHRcXHRcXHRcXHRcXFxcXFxuZnMvZXh0NC94YXR0ci5oLTEwOC1cXHQoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgIT0gMCkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjQ0LjQxNTkyMjkyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0ICogY3VycmVudGx5IG9ubHkgdXNlZCBpbiBhIGNvZGUgcGF0aCBjb21pbmcgZm9ybSBleHQ0X2lnZXQsIGJlZm9yZVxcbiAxNDE6XFx0ICogdGhlIG5ldyBpbm9kZSBoYXMgYmVlbiB1bmxvY2tlZFxcbiAxNDI6XFx0ICovXFxuIDE0MzpcXHRpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiAxNDQ6XFx0e1xcbiAxNDU6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcXG4gMTQ2OlxcdFxcdFxcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXFxuIDE0NzpcXHRcXHR9O1xcbiAxNDg6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xcbiAxNDk6XFx0XFx0XFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcXG4gMTUwOlxcdFxcdFxcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcXG4gMTUxOlxcdFxcdH07XFxuIDE1MjpcXHRcXHRpbnQgZXJyb3I7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbiAxNTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdFxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuIDE1ODpcXHRcXHRpZiAoZXJyb3IpXFxuIDE1OTpcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4gMTYyOlxcdFxcdGlmIChlcnJvcilcXG4gMTYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRpZiAoIWlzLnMubm90X2ZvdW5kKSB7XFxuIDE2NjpcXHRcXHRcXHRpZiAoaXMucy5oZXJlLVxcdTAwM2VlX3ZhbHVlX2ludW0pIHtcXG4gMTY3OlxcdFxcdFxcdFxcdEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIFxcXCJpbmxpbmUgZGF0YSB4YXR0ciByZWZlcnMgXFxcIlxcbiAxNjg6XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0byBhbiBleHRlcm5hbCB4YXR0ciBpbm9kZVxcXCIpO1xcbiAxNjk6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZTQ09SUlVQVEVEO1xcbiAxNzA6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE3MTpcXHRcXHRcXHR9XFxuIDE3MjpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYgPSAodTE2KSgodm9pZCAqKWlzLnMuaGVyZSAtXFxuIDE3MzpcXHRcXHRcXHRcXHRcXHRcXHQodm9pZCAqKWV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKSk7XFxuIDE3NDpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSArXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIDE3NjpcXHRcXHR9XFxuIDE3NzpcXHRvdXQ6XFxuIDE3ODpcXHRcXHRicmVsc2UoaXMuaWxvYy5iaCk7XFxuIDE3OTpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDE4MDpcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcXG4gMTgzOlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuLFxcbiAxODQ6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuIDE4NTpcXHR7XFxuIDE4NjpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjtcXG4gMTg4OlxcdFxcdGludCBjcF9sZW4gPSAwO1xcbiAxODk6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0aWYgKCFsZW4pXFxuIDE5MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0QlVHX09OKGxlbiBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUpO1xcbiAxOTU6XFx0XFxuIDE5NjpcXHRcXHRjcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKGlsb2MpO1xcbiAxOTk6XFx0XFx0bWVtY3B5KGJ1ZmZlciwgKHZvaWQgKikocmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrKSwgY3BfbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NDQuNDE2MTY1Njg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTY5MTc5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRVhUNCBJbm9kZSdzIEV4dGVuZGVkIEF0dHJpYnV0ZSBTcGFjZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBFWFQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgbWFjcm8gYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIEkga25vdyBpdCdzIHByb2JhYmx5IGRlZmluZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGhlYWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gaW5vZGUgaGFzIHNwYWNlIGFsbG9jYXRlZCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIGZvciBob3cgeGF0dHJzIGFyZSBtYW5hZ2VkIG9uIGRpc2sgYW5kIGluIG1lbW9yeSwgc28gZ2V0dGluZyBhIHNvbGlkIGdyaXAgb24gdGhpcyBtYWNybyBpcyBlc3NlbnRpYWwuIEknbSBhc3N1bWluZyBpdCBpbnZvbHZlcyBjaGVja2luZyBzb21lIGJpdHMgd2l0aGluIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgb3IgbWF5YmUgZXhhbWluaW5nIHNvbWUgcmVsYXRlZCBtZXRhZGF0YS4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1hY3JvJ3MgZGVmaW5pdGlvbiBoYXMgdG8gcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NDYuNDczMDg1NjI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3hhdHRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdC8qXFxuIDEwMTpcXHQgKiBJZiB3ZSB3YW50IHRvIGFkZCBhbiB4YXR0ciB0byB0aGUgaW5vZGUsIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdFxcbiAxMDI6XFx0ICogaV9leHRyYV9pc2l6ZSBpcyBub3QgMCBhbmQgdGhhdCB0aGUgaW5vZGUgc2l6ZSBpcyBub3QgbGVzcyB0aGFuXFxuIDEwMzpcXHQgKiBFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgKyBleHRyYV9pc2l6ZSArIHBhZC5cXG4gMTA0OlxcdCAqICAgRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICAgZXh0cmFfaXNpemUgaGVhZGVyICAgZW50cnkgICBwYWQgIGRhdGFcXG4gMTA1OlxcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS18LS0tLS0tLXxcXG4gMTA2OlxcdCAqL1xcbiAxMDc6XFx0I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcXHRcXHRcXHRcXHRcXFxcXFxuIDEwODpcXHRcXHQoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgIT0gMCkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuIDEwOTpcXHRcXHQgKEVYVDRfR09PRF9PTERfSU5PREVfU0laRSArIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgK1xcdFxcXFxcXG4gMTEwOlxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgKyBFWFQ0X1hBVFRSX1BBRCBcXHUwMDNjPVxcdFxcXFxcXG4gMTExOlxcdFxcdCAgRVhUNF9JTk9ERV9TSVpFKChpbm9kZSktXFx1MDAzZWlfc2IpKSlcXG4gMTEyOlxcdFxcbiAxMTM6XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyB7XFxuIDExNDpcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbiAxMTU6XFx0XFx0Y29uc3Qgdm9pZCAqdmFsdWU7XFxuIDExNjpcXHRcXHRzaXplX3QgdmFsdWVfbGVuO1xcbiAxMTc6XFx0XFx0aW50IG5hbWVfaW5kZXg7XFxuIDExODpcXHRcXHRpbnQgaW5faW5vZGU7XFxuIDExOTpcXHR9O1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2gge1xcbiAxMjI6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0O1xcbiAxMjM6XFx0XFx0dm9pZCAqYmFzZTtcXG4gMTI0OlxcdFxcdHZvaWQgKmVuZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NDYuNDczMjAwODA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTgyMjAxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBDYWxsIFNpdGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gRXNzZW50aWFsbHksIEknbSB0cmFjaW5nIHRoZSBmdW5jdGlvbidzIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtJ3MgaW5saW5lIGRhdGEgaGFuZGxpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyByb3V0aW5lLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaW5mZXIgYW55IHBvdGVudGlhbCByaXNrcyBvciBpbXByb3ZlbWVudHMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo0OC4xOTE0MjM5ODlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjIzOTA1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zNzY4PWV4dGVybiBpbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjM3Njk6ZXh0ZXJuIGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTM3NzAtZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExMD1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE0Mi0gKi9cXG5mcy9leHQ0L2lubGluZS5jOjE0MzppbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NDA2PXN0YXRpYyBpbnQgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTQyNC1cXHQgKi9cXG5mcy9leHQ0L2lubGluZS5jOjQyNTpcXHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy00MjYtXFx0aWYgKGVpLVxcdTAwM2VpX2lubGluZV9vZmYpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy04MzItXFx0XFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo4MzM6XFx0XFx0KHZvaWQpIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvaW5saW5lLmMtODM0LVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIxNC1cXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuZnMvZXh0NC9pbm9kZS5jOjUyMTU6XFx0XFx0ZXJyID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTUyMTYtXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE2MzM9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE3NzYtXFx0XFx0aWYgKCFpc19ibG9jayBcXHUwMDI2XFx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTc3NzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTc3OC1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjc2NT1pbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yODU3LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuZnMvZXh0NC94YXR0ci5jOjI4NTg6XFx0XFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjg1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NTAuMjEzODE5NDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2MjcxNzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIEZ1bmN0aW9uJ3MgRXZvbHV0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYmVlbiBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhIHdpdGhpbiBleHQ0IGlub2Rlcy4gUHJldmlvdXNseSwgdGhlIGNoZWNrIHdhcyBpbmNyZWRpYmx5IHNpbXBsZTogYGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMCkgcmV0dXJuIDA7YC4gRXNzZW50aWFsbHksIFwiaWYgYGlfZXh0cmFfaXNpemVgIGlzIHplcm8sIHdlJ3JlIGRvbmU7IHRoZXJlJ3Mgbm8gaW5saW5lIGRhdGEgdG8gZmluZC5cIiBCdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBhdHRyaWJ1dGVzLCBsaWtlIGBleHQ0X3hhdHRyX2lib2R5X2ZpbmRgIG9yIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIGhhZCB0aGUgbW9yZSByb2J1c3QgY2hlY2sgb2YgYGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKWAsIHdoaWNoIGlzIGNsZWFybHkgbW9yZSBjb21wcmVoZW5zaXZlLlxuXG5Ob3csIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCB3YXNuJ3QgYmVoYXZpbmcgaWRlYWxseS4gSXQgY29udGludWVkIHByb2Nlc3NpbmcgKmV2ZW4gaWYqIGBpX2V4dHJhX2lzaXplYCB3YXMgKm5vbi16ZXJvKiwgYnV0IGEgc3Vic2VxdWVudCBzaXplIGNoZWNrIGZhaWxlZDogYEVYVDRfR09PRF9PTERfSU5PREVfU0laRSArIEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSArIHNpemVvZihzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIpICsgRVhUNF9YQVRUUl9QQUQgXHUwMDNlIEVYVDRfSU5PREVfU0laRSgoaW5vZGUpLVx1MDAzZWlfc2IpYC4gIFRoaXMgdHJpZ2dlcmVkIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGl0IHByb2JhYmx5IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGluZyBpbiB0aGF0IHNjZW5hcmlvLCBuYW1lbHkgYGV4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGBleHQ0X3hhdHRyX2lib2R5X2ZpbmRgLiBJJ2xsIHdhbnQgdG8gaW52ZXN0aWdhdGUgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYnVpbHQgaW50byB0aG9zZSBjYWxscywgYW5kIHdoeSBpdCdzIGJlbmVmaWNpYWwgdG8gcHJldmVudCB0aGVtIGZyb20gZXhlY3V0aW5nIGluIHRoaXMgY2FzZS5cblxuTmV4dCBzdGVwOiBkaXZlIGludG8gdGhhdCBgZXh0NF94YXR0cl9pYm9keV9maW5kYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgaW5zaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjUzLjU3NjUzOTg5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzA6XFx0aW50IGV4dDRfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbjIyMzE6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kICppcylcXG4yMjMyOlxcdHtcXG4yMjMzOlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyO1xcbjIyMzQ6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4yMjM1OlxcdFxcdGludCBlcnJvcjtcXG4yMjM2OlxcdFxcbjIyMzc6XFx0XFx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXFxuMjIzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjM5OlxcdFxcbjIyNDA6XFx0XFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLVxcdTAwM2VpbG9jKTtcXG4yMjQxOlxcdFxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuMjI0MjpcXHRcXHRpcy1cXHUwMDNlcy5iYXNlID0gaXMtXFx1MDAzZXMuZmlyc3QgPSBJRklSU1QoaGVhZGVyKTtcXG4yMjQzOlxcdFxcdGlzLVxcdTAwM2VzLmhlcmUgPSBpcy1cXHUwMDNlcy5maXJzdDtcXG4yMjQ0OlxcdFxcdGlzLVxcdTAwM2VzLmVuZCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xcbjIyNDU6XFx0XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcXG4yMjQ2OlxcdFxcdFxcdC8qIEZpbmQgdGhlIG5hbWVkIGF0dHJpYnV0ZS4gKi9cXG4yMjQ3OlxcdFxcdFxcdGVycm9yID0geGF0dHJfZmluZF9lbnRyeShpbm9kZSwgXFx1MDAyNmlzLVxcdTAwM2VzLmhlcmUsIGlzLVxcdTAwM2VzLmVuZCxcXG4yMjQ4OlxcdFxcdFxcdFxcdFxcdFxcdCBpLVxcdTAwM2VuYW1lX2luZGV4LCBpLVxcdTAwM2VuYW1lLCAwKTtcXG4yMjQ5OlxcdFxcdFxcdGlmIChlcnJvciBcXHUwMDI2XFx1MDAyNiBlcnJvciAhPSAtRU5PREFUQSlcXG4yMjUwOlxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4yMjUxOlxcdFxcdFxcdGlzLVxcdTAwM2VzLm5vdF9mb3VuZCA9IGVycm9yO1xcbjIyNTI6XFx0XFx0fVxcbjIyNTM6XFx0XFx0cmV0dXJuIDA7XFxuMjI1NDpcXHR9XFxuMjI1NTpcXHRcXG4yMjU2OlxcdGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjIyNTc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4yMjU4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgKmlzKVxcbjIyNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo1My41NzY2NzE1OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM0NzI5MTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJlZHVuZGFuY3kgaW4gZXh0NCBYYXR0ciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGV4dDRfeGF0dHJfaWJvZHlfZmluZGAsIGFuZCBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGlzIHRydWUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgd2l0aG91dCB0b3VjaGluZyBgaXMtXHUwMDNlcy5iYXNlYCwgYGlzLVx1MDAzZXMuaGVyZWAsIG9yIGBpcy1cdTAwM2VzLm5vdF9mb3VuZGAuIFRoYXQgc2VlbXMuLi5vZGQuIE5vdywgSSBzZWUgdGhpcyBiZWluZyB1c2VkIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGhleSBpbml0aWFsaXplIGBpcy5zLm5vdF9mb3VuZGAgdG8gYC1FTk9EQVRBYCByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiwgdGhlIGNvZGUgY2FsbHMgYGV4dDRfeGF0dHJfaWJvZHlfZmluZGAuIEJ1dCwgaWYgYGVycm9yYCBpcyBub3Qgc2V0LCB0aGVuIHRoZSBjaGVjayBpcyBgIWlzLnMubm90X2ZvdW5kYCB3aGljaCBzaG91bGQgYmUgZmFsc2UsIHNpbmNlIGl0IHdhcyBpbml0aWFsaXplZCB0byBgLUVOT0RBVEFgLiBTbyBiYXNpY2FsbHksIGl0J3MgaW1tZWRpYXRlbHkganVtcGluZyB0byBgYnJlbHNlKGlzLmlsb2MuYmgpYCBhbmQgcmV0dXJuaW5nIDAsIHdoaWNoIHNlZW1zIGxpa2UgYSBudWxsIG9wZXJhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGF0IHNpbmNlIHRoZSBjaGVjayBgIWlzLnMubm90X2ZvdW5kYCBpcyBlcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIGBlcnJvcmAgaXMgMC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSBpcyB0aGlzIGhhcHBlbmluZz8gSXMgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIGRvaW5nIHNvbWUgdXNlbGVzcyB3b3JrIGJ5IHJlYWRpbmcgdGhlIGlub2RlIGxvY2F0aW9uLCB0aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmFpbCBlYXJseT8gUGVyaGFwcyBpdCdzIHRoZXJlIHRvIHByb3RlY3QgYWdhaW5zdCBzb21lIGluY29uc2lzdGVuY3kgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXNuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoaXMgc25pcHBldC4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSBvZiB0aGlzLCB0byBnYWluIGNvbnRleHQsIGFuZCBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduLiBUbyBjbGFyaWZ5IHRoZSB3b3JrLCBJIG5lZWQgdG8ga25vdyB3aHkuXG5cbkknbSBnb2luZyB0byBkaWcgaW50byB0aGUgZ2l0IGxvZyBhbmQgaGlzdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIHNlYXJjaCBmb3IgY29tbWl0cyByZWxhdGVkIHRvIGBpbmxpbmUuY2AgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29kZS4gSSBuZWVkIHRvIGdldCB0aGUgXCJ3aHlcIiBiZWZvcmUgSSBjYW4gc2F5IGlmIHRoaXMgaXMgYSBidWcgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NTguOTIzOTY1NTg0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyNzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM3Njg9ZXh0ZXJuIGludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0Lmg6Mzc2OTpleHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc3MC1leHRlcm4gaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTEwPWludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQyLSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQzOmludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDQte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz00MDY9c3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDI0LVxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NDI1OlxcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTQyNi1cXHRpZiAoZWktXFx1MDAzZWlfaW5saW5lX29mZilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NzkzPWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTgzMi1cXHRcXHQgKi9cXG5mcy9leHQ0L2lubGluZS5jOjgzMzpcXHRcXHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy04MzQtXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MjE0LVxcdFxcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcXG5mcy9leHQ0L2lub2RlLmM6NTIxNTpcXHRcXHRlcnIgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNTIxNi1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTYzMz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTc3Ni1cXHRcXHRpZiAoIWlzX2Jsb2NrIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xcbmZzL2V4dDQveGF0dHIuYzoxNzc3OlxcdFxcdFxcdHJldCA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNzc4LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNzY1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4NTctXFx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmM6Mjg1ODpcXHRcXHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yODU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo1OC45NzEzOTc1MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUzNzI2OTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElubGluZSBEYXRhIENoZWNrIGluIGV4dDQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmRpdGlvbiBmb3IgYW4gZWFybHkgZXhpdC4gUHJldmlvdXNseSwgd2UgY2hlY2tlZCBpZiBgaV9leHRyYV9pc2l6ZWAgd2FzIHplcm8uIE5vdywgd2UncmUgdXNpbmcgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgbWFjcm8gZG9lcyBhIG1vcmUgdGhvcm91Z2ggY2hlY2s6IGl0IG5vdCBvbmx5IHZlcmlmaWVzIGBpX2V4dHJhX2lzaXplYCBpc24ndCB6ZXJvIGJ1dCBhbHNvIGVuc3VyZXMgdGhlIGlub2RlIHNpemUgaGFzIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHhhdHRyIHNwYWNlLCBhY2NvdW50aW5nIGZvciB0aGUgaGVhZGVyIGFuZCBwYWRkaW5nLiBHb29kLCBhIG1vcmUgcm9idXN0IGNoZWNrIG92ZXJhbGwuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyBpdDpcblxuMS4gIEV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoaXMgY29kZSBkb2Vzbid0IHRvdWNoIGFueXRoaW5nIGV4cG9zZWQgdG8gdXNlcmxhbmQuXG4yLiAgRGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljPyBOby4gV2UgaGF2ZSBhIGxvY2FsIHN0cnVjdCwgYGlzYCwgd2hpY2ggaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLiBUaGUgZWFybHkgcmV0dXJuIGRvZXNuJ3QgbGVhayB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiAgSW52b2x2ZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLCBpdCBkZWFscyB3aXRoIGV4aXN0aW5nIGlub2RlIHN0cnVjdHVyZXMgd2l0aCBpbXByb3ZlZCBjaGVja3MuXG40LiAgQWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdGhyb3VnaCBib3VuZHMgY2hlY2tzPyBOby4gSXQgaW1wcm92ZXMgYm91bmRzIGNoZWNraW5nLCBpbiBmYWN0LCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5TbywgYmFzZWQgb24gdGhhdCBhbmFseXNpcywgdGhpcyBjaGFuZ2UgZG9lc24ndCB0cmlnZ2VyIGFueSBLTVNBTiBjb25jZXJucy4gSXQncyB0aWdodGVuaW5nIGFuIGV4aXN0aW5nIGNoZWNrLCBlbnN1cmluZyB3ZSBkb24ndCBwcm9jZWVkIHdpdGggc2VhcmNoaW5nIGZvciBpbmxpbmUgZGF0YSB3aGVuIHRoZXJlJ3Mgbm8gdmFsaWQgeGF0dHIgc3BhY2UuIEluIGVzc2VuY2UsIGl0J3MgYSBzYW5pdHkgY2hlY2sgb24gaW5vZGUgbGF5b3V0IGNvbnNpc3RlbmN5LlxuXG5UaGlzIGNoYW5nZSBkb2VzIGJvbHN0ZXIgS0FTQU4ncyByb2xlLCBhY3R1YWxseS4gQnkgYmV0dGVyIHZhbGlkYXRpbmcgdGhlIGlub2RlJ3MgaW50ZXJuYWwgbGF5b3V0LCBpdCByZWR1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFsb25nIHdpdGggdHlwaWNhbCBhc3NlcnRpb25zIGFuZCBVQiBzYW5pdGl6ZXJzLiBTbywgaXQncyBhIGdvb2QgdGhpbmcsIGEgZGVmZW5zaXZlIG1lYXN1cmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBMZXQncyBwcm9jZWVkIHdpdGggdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NCwiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDk6MDUuNTA4NjY5MjU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgY2hlY2sgYEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY29tcHV0YXRpb25zIGluIGEgd2F5IHRoYXQgcmVhZHMgdW5pbml0aWFsaXplZCBkYXRhLiBBbGwgbG9jYWwgc3RydWN0dXJlcyAoZS5nLiBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2ApIGFyZSBmdWxseSBvciBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGZvciB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgY2hlY2sgYEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY29tcHV0YXRpb25zIGluIGEgd2F5IHRoYXQgcmVhZHMgdW5pbml0aWFsaXplZCBkYXRhLiBBbGwgbG9jYWwgc3RydWN0dXJlcyAoZS5nLiBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2ApIGFyZSBmdWxseSBvciBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGZvciB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow72kxr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 03:32:05 +0000 UTC FinishedAt: 2026-09-10 03:49:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "08c88aa1-e03b-407e-b9b8-5c4aa66fb813" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_find_inline_data_nolock", "ext4_prepare_inline_data", "ext4_write_inline_data_end" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBjaGVjayBgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplID09IDBgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpYCByZXR1cm5zIGVhcmx5ICh3aXRoIDApIGlmIHRoZSBpbm9kZSBzaXplIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGUgZXh0cmEgaXNpemUsIHhhdHRyIGhlYWRlciwgYW5kIHBhZGRpbmcuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjb21wdXRhdGlvbnMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChlLmcuIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCkgYXJlIGZ1bGx5IG9yIGFwcHJvcHJpYXRlbHkgaW5pdGlhbGl6ZWQuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB0aWdodGVuZWQgYm91bmRzIHZhbGlkYXRpb24gcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnZhbGlkIGxheW91dCB0cmF2ZXJzYWwgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggaXMgcHJvcGVybHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIHNhbml0aXplcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgZm9yIHRoaXMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODA5NWI1MDI1MTRlZjQ4ZjY1MTQ1YTgzNzcyODQ1ZjMxM2QwNDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDM6NDg6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTUxLDcgJiM0MzsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMClcbiYjNDM7XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2smIzM0OywKICAgICYjMzQ7ZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvdW5kcyBjaGVja2luZyBpbiBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKCkgYnkgZW5zdXJpbmcgdGhlIGlub2RlIGhhcyBzdWZmaWNpZW50IHNwYWNlIGZvciBpbmxpbmUgeGF0dHIgZGF0YSAoRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UpIHJhdGhlciB0aGFuIG9ubHkgY2hlY2tpbmcgd2hldGhlciBpX2V4dHJhX2lzaXplIGlzIG5vbi16ZXJvLiBUaGlzIGFmZmVjdHMgZXh0NCBpbm9kZSByZWFkaW5nIGFuZCBpbmxpbmUgZGF0YSBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGR1cmluZyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIG1vdW50aW5nIG9mIGNyYWZ0ZWQgaW1hZ2VzIGluIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4MDk1YjUwMjUxNGVmNDhmNjUxNDVhODM3NzI4NDVmMzEzZDA0M2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwMzo0ODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtMTUxLDcgJiM0MzsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX07CiAJaW50IGVycm9yOwogCi0JaWYgKEVYVDRfSShpbm9kZSktJmd0O2lfZXh0cmFfaXNpemUgPT0gMCkKJiM0MzsJaWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpCiAJCXJldHVybiAwOwogCiAJZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aXMuaWxvYyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2UgZm9yIGBmcy9leHQ0L2lubGluZS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggaW4gYGZzL2V4dDQvaW5saW5lLmNgIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIExldCYjMzk7cyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudCBmaXJzdCwganVzdCB0byBiZSBzdXJlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBhbnl0aGluZyBtYWxpY2lvdXMsIGp1c3Qgc3RhbmRhcmQgZGVmZW5zaXZlIFFBLCBmdXp6aW5nIHRyaWFnZS4gSXQmIzM5O3MgYSBjb2RlIHJldmlldyBzdGVwLCBzbyBpdCBzaG91bGQgYmUgc2FmZS4gTm8gZXhwbG9pdCBnZW5lcmF0aW9uIGlzIGltcGxpZWQsIG5vIGltbWVkaWF0ZSBoaWdoLXNldmVyaXR5IHJpc2suIFdlIGFyZSBnb29kIHRvIHByb2NlZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoaXMgcGF0Y2guIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgYSBjaGFuZ2UgdG8gaG93IGlubGluZSBkYXRhIGlzIGhhbmRsZWQ6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuYwppbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lubGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmMKQEAgLTE1MSw3ICYjNDM7MTUxLDcgQEAgaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKIAl9OwogCWludCBlcnJvcjsKIAotCWlmIChFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplID09IDApCiYjNDM7CWlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAogCWVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmYW1wO2lzLmlsb2MpOwpgYGAKClNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGEgY2hlY2sgb24gYEVYVDRfSShpbm9kZSktJmd0O2lfZXh0cmFfaXNpemVgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgbWFjcm8gZG9lcyBhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHkgdG8gZmluZCBvdXQgd2hhdCBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VgIGV4cGFuZHMgdG8sIHdobyBjYWxscyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AsIGFuZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgdGhhdCBtaWdodCBiZSBpbiBwbGF5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIG1pZ2h0IHVuY292ZXIgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0ICogY3VycmVudGx5IG9ubHkgdXNlZCBpbiBhIGNvZGUgcGF0aCBjb21pbmcgZm9ybSBleHQ0X2lnZXQsIGJlZm9yZVxuIDE0MTpcdCAqIHRoZSBuZXcgaW5vZGUgaGFzIGJlZW4gdW5sb2NrZWRcbiAxNDI6XHQgKi9cbiAxNDM6XHRpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDE0NDpcdHtcbiAxNDU6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4gMTQ2Olx0XHRcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXG4gMTQ3Olx0XHR9O1xuIDE0ODpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xuIDE0OTpcdFx0XHQubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLFxuIDE1MDpcdFx0XHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXG4gMTUxOlx0XHR9O1xuIDE1MjpcdFx0aW50IGVycm9yO1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG4gMTU1Olx0XHRcdHJldHVybiAwO1xuIDE1NjpcdFxuIDE1NzpcdFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuIDE1ODpcdFx0aWYgKGVycm9yKVxuIDE1OTpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gMTYwOlx0XG4gMTYxOlx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuIDE2MjpcdFx0aWYgKGVycm9yKVxuIDE2MzpcdFx0XHRnb3RvIG91dDtcbiAxNjQ6XHRcbiAxNjU6XHRcdGlmICghaXMucy5ub3RfZm91bmQpIHtcbiAxNjY6XHRcdFx0aWYgKGlzLnMuaGVyZS1cdTAwM2VlX3ZhbHVlX2ludW0pIHtcbiAxNjc6XHRcdFx0XHRFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCBcJiMzNDtpbmxpbmUgZGF0YSB4YXR0ciByZWZlcnMgXCYjMzQ7XG4gMTY4Olx0XHRcdFx0XHRcdCBcJiMzNDt0byBhbiBleHRlcm5hbCB4YXR0ciBpbm9kZVwmIzM0Oyk7XG4gMTY5Olx0XHRcdFx0ZXJyb3IgPSAtRUZTQ09SUlVQVEVEO1xuIDE3MDpcdFx0XHRcdGdvdG8gb3V0O1xuIDE3MTpcdFx0XHR9XG4gMTcyOlx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfb2ZmID0gKHUxNikoKHZvaWQgKilpcy5zLmhlcmUgLVxuIDE3MzpcdFx0XHRcdFx0XHQodm9pZCAqKWV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpKTtcbiAxNzQ6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAmIzQzO1xuIDE3NTpcdFx0XHRcdFx0bGUzMl90b19jcHUoaXMucy5oZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gMTc2Olx0XHR9XG4gMTc3Olx0b3V0OlxuIDE3ODpcdFx0YnJlbHNlKGlzLmlsb2MuYmgpO1xuIDE3OTpcdFx0cmV0dXJuIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBFWFQ0IFhBVFRSIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gZXh0ZW5kZWQgYXR0cmlidXRlcyAoWEFUVFJzKSBhbmQgaW5saW5lIGRhdGEgd2l0aGluIEVYVDQuIFRoZSBzdGFydGluZyBwb2ludD8gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRWAuIFRoYXQgbWFjcm8gaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgc3BhY2UgaXMgYWxsb2NhdGVkIHdpdGhpbiBhbiBpbm9kZSB0byBwb3RlbnRpYWxseSBzdG9yZSBYQVRUUiBkYXRhIGRpcmVjdGx5LiBVbmRlcnN0YW5kaW5nIHRoYXQmIzM5O3Mga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgb2Ygc3RvcmluZyBzbWFsbCBYQVRUUnMgaW4gdGhlIGlub2RlIGl0c2VsZiB2ZXJzdXMgdXNpbmcgc2VwYXJhdGUgYmxvY2tzLgoKTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGlzc2VjdCB0aGUgY2FsbCBjaGFpbiBmb3IgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgaGVhcnQgb2YgcmV0cmlldmluZyB0aGUgaW5saW5lIGRhdGEsIHBvdGVudGlhbGx5IHRoZSBYQVRUUnMsIHdoZW4gdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgaW5vZGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzogd2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gaXQ/IEhvdyBkb2VzIGl0IGFjdHVhbGx5IGxvY2F0ZSBhbmQgcmV0cmlldmUgdGhlIGlubGluZSBYQVRUUiBkYXRhPyBBbnkgc3VidGxldGllcyBsaWtlIGxvY2tpbmcgb3IgY29uY3VycmVuY3kgY29uY2VybnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXRyaWV2YWwgbmVlZCB0byBiZSB1bmRlcnN0b29kLiBUaGlzIG1pZ2h0IGludm9sdmUgbG9va2luZyBhdCBmaWxlIHN5c3RlbXMgdGhhdCBoYXZlIGlzc3VlcyB3aXRoIHBlcmZvcm1hbmNlIHdpdGggaW5saW5lIGRhdGEgcmV0cmlldmFsLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIGluIHRoaXMgYXJlYSBhbmQgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBiZXN0IHRvIHJlY29tbWVuZCB1c2FnZSBvZiB0aGlzIGZpbGVzeXN0ZW0gZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYz0zNT1zdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQzLVxuZnMvZXh0NC9pbmxpbmUuYzo0NDpcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuZnMvZXh0NC9pbmxpbmUuYy00NS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE1My1cbmZzL2V4dDQvaW5saW5lLmM6MTU0Olx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jLTE1NS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMDQtXG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcdGlmIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkgIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jLTUyMDYtXHQgICAgKm1hZ2ljID09IGNwdV90b19sZTMyKEVYVDRfWEFUVFJfTUFHSUMpKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTIyMzA9aW50IGV4dDRfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMjM2LVxuZnMvZXh0NC94YXR0ci5jOjIyMzc6XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYy0yMjM4LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjI1Nj1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI2NC1cbmZzL2V4dDQveGF0dHIuYzoyMjY1Olx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmMtMjI2Ni1cdFx0cmV0dXJuIC1FTk9TUEM7XG4tLVxuZnMvZXh0NC94YXR0ci5oPTQzPXN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmgtMTA2LSAqL1xuZnMvZXh0NC94YXR0ci5oOjEwNzojZGVmaW5lIEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKVx0XHRcdFx0XFxcbmZzL2V4dDQveGF0dHIuaC0xMDgtXHQoKEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSAhPSAwKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGVYdGVuZGVkIEF0dHJpYnV0ZXMgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBpbiBleHQ0LiBUaW1lIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgYGZzL2V4dDQveGF0dHIuaGAuIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgc3RydWN0dXJlIGRlZmluaXRpb25zIHRoZXJlIOKAkyB0aGUgYHN0cnVjdGAgZGVmaW5pdGlvbnMsIHRoZSBtYWNyb3MsIHRoZSBjb25zdGFudHMuLi4gZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB4YXR0cnMgd2l0aGluIHRoZSBmaWxlc3lzdGVtLiBJIHdhbnQgdGhlIGNvbXBsZXRlIHBpY3R1cmU6IGhvdyBhcmUgdGhleSBzdG9yZWQsIHdoYXQgYXJlIHRoZSBrZXkgZmllbGRzLCBhbmQgd2hhdCBhcmUgdGhlIGltcG9ydGFudCBmbGFncyBvciBjaGFyYWN0ZXJpc3RpY3M/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHN0YW5kYXJkIGF0dHJpYnV0ZSBoZWFkZXIsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yIGluc2lnaHQgaW50byB0aGUgZGlmZmVyZW50IG5hbWVzcGFjZXMgb3IgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uIG9mIHRoZSBtZXRhZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhpbmdzIGxpa2UgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgdGhlIHNpemUgbGltaXRzLCBhbmQgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGJha2VkIGludG8gdGhlIGRlc2lnbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoYXQgaGVhZGVyIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS18LS0tLS0tLXxcbiAxMDY6XHQgKi9cbiAxMDc6XHQjZGVmaW5lIEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKVx0XHRcdFx0XFxcbiAxMDg6XHRcdCgoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplICE9IDApIFx1MDAyNlx1MDAyNlx0XHRcdFx0XFxcbiAxMDk6XHRcdCAoRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICYjNDM7IEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSAmIzQzO1x0XFxcbiAxMTA6XHRcdCAgc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgJiM0MzsgRVhUNF9YQVRUUl9QQUQgXHUwMDNjPVx0XFxcbiAxMTE6XHRcdCAgRVhUNF9JTk9ERV9TSVpFKChpbm9kZSktXHUwMDNlaV9zYikpKVxuIDExMjpcdFxuIDExMzpcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8ge1xuIDExNDpcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiAxMTU6XHRcdGNvbnN0IHZvaWQgKnZhbHVlO1xuIDExNjpcdFx0c2l6ZV90IHZhbHVlX2xlbjtcbiAxMTc6XHRcdGludCBuYW1lX2luZGV4O1xuIDExODpcdFx0aW50IGluX2lub2RlO1xuIDExOTpcdH07XG4gMTIwOlx0XG4gMTIxOlx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHtcbiAxMjI6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdDtcbiAxMjM6XHRcdHZvaWQgKmJhc2U7XG4gMTI0Olx0XHR2b2lkICplbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBDYWxsIFNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtJiMzOTtzIGlubGluZSBkYXRhIGhhbmRsaW5nLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgZWRnZSBjYXNlcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBhbnkgcG90ZW50aWFsIHJpc2tzIG9yIGltcHJvdmVtZW50cyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM3Njg9ZXh0ZXJuIGludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozNzY5OmV4dGVybiBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM3NzAtZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQyLSAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxNDM6aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQwNj1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDI0LVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjQyNTpcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNDI2LVx0aWYgKGVpLVx1MDAzZWlfaW5saW5lX29mZilcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtODMyLVx0XHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6ODMzOlx0XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTgzNC1cbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIxNC1cdFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuZnMvZXh0NC9pbm9kZS5jOjUyMTU6XHRcdGVyciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTUyMTYtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MzM9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNzc2LVx0XHRpZiAoIWlzX2Jsb2NrIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbmZzL2V4dDQveGF0dHIuYzoxNzc3Olx0XHRcdHJldCA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE3NzgtXHRcdFx0aWYgKHJldCkge1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yNzY1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODU3LVx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYzoyODU4Olx0XHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTI4NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqS2NvbmZpZyBSZXZpZXcgZm9yIGV4dDQgSW5saW5lIERhdGEgYW5kIEV4dGVuZGVkIEF0dHJpYnV0ZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBteSBkdWNrcyBpbiBhIHJvdyBmb3IgdGhlIGV4dDQgY2hhbmdlcyB3ZSYjMzk7cmUgbG9va2luZyBhdCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBpbmxpbmUgZGF0YSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gTGV0IG1lIGp1c3Qgb3BlbiB1cCB0aGUgS2NvbmZpZyBmaWxlcy4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkLiBBcmUgdGhleSBzZXBhcmF0ZSBvcHRpb25zPyBBcmUgdGhleSBuZXN0ZWQ/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBsaWtlIGEgZ2VuZXJhbCAmIzM0O2V4dDQgc3VwcG9ydCYjMzQ7IGZsYWcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBldmVuICpzZWUqIHRoZSBpbmxpbmUgZGF0YSBvciB4YXR0ciBvcHRpb25zPyBXaGF0IGFib3V0IGRlZmF1bHQgdmFsdWVzPyBBcmUgdGhleSBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGVtPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBtYWtpbmcgc3VyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiByZWZsZWN0cyB0aGUgZGVzaXJlZCBiZWhhdmlvci4gSSBhbHNvIHNob3VsZCBjb25zaWRlciBhbnkgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvLmt1bml0Y29uZmlnPTE9Q09ORklHX0tVTklUPXlcbmZzL2V4dDQvLmt1bml0Y29uZmlnOjI6Q09ORklHX0VYVDRfRlM9eVxuZnMvZXh0NC8ua3VuaXRjb25maWctMy1DT05GSUdfRVhUNF9LVU5JVF9URVNUUz15XG4tLVxuZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbmZzL2V4dDQvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG5mcy9leHQ0L0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zOC1cdGRlcGVuZHMgb24gRVhUMl9GUz1uXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG5mcy9leHQ0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy00OS1cdHNlbGVjdCBGU19QT1NJWF9BQ0xcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbmZzL2V4dDQvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTU5LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz02OD1jb25maWcgRVhUNF9ERUJVR1xuZnMvZXh0NC9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG5mcy9leHQ0L0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy03MS1cdGhlbHBcbi0tXG5mcy9leHQ0L0tjb25maWc9Nzc9Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcbmZzL2V4dDQvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBleHQ0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmZzL2V4dDQvS2NvbmZpZzo3OTpcdGRlcGVuZHMgb24gRVhUNF9GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbmZzL2V4dDQvS2NvbmZpZy04MC1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS01LVxuZnMvZXh0NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19FWFQ0X0ZTKSAmIzQzOz0gZXh0NC5vXG5mcy9leHQ0L01ha2VmaWxlLTctXG5mcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlOjE1OmV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuLS1cbmZzL2V4dDQvYWNsLmg9Mzk9c3RhdGljIGlubGluZSBpbnQgZXh0NF9hY2xfY291bnQoc2l6ZV90IHNpemUpXG4tLVxuZnMvZXh0NC9hY2wuaC01NC1cbmZzL2V4dDQvYWNsLmg6NTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9hY2wuaC01Ni1cbi0tXG5mcy9leHQ0L2FjbC5oPTYxPWV4dGVybiBpbnQgZXh0NF9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopO1xuZnMvZXh0NC9hY2wuaC02Mi1cbmZzL2V4dDQvYWNsLmg6NjM6I2Vsc2UgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC02NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tLVxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxuLS1cbmZzL2V4dDQvYWNsLmgtNzItfVxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC03NC1cbi0tXG5mcy9leHQ0L2ZzbWFwLmgtNi0gKi9cbmZzL2V4dDQvZnNtYXAuaDo3OiNpZm5kZWYgX19FWFQ0X0ZTTUFQX0hfX1xuZnMvZXh0NC9mc21hcC5oOjg6I2RlZmluZVx0X19FWFQ0X0ZTTUFQX0hfX1xuZnMvZXh0NC9mc21hcC5oLTktXG4tLVxuZnMvZXh0NC9mc21hcC5oPTM5PWludCBleHQ0X2dldGZzbWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X2ZzbWFwX2hlYWQgKmhlYWQsXG4tLVxuZnMvZXh0NC9mc21hcC5oLTU1LVxuZnMvZXh0NC9mc21hcC5oOjU2OiNlbmRpZiAvKiBfX0VYVDRfRlNNQVBfSF9fICovXG4tLVxuZnMvZXh0NC9pYWxsb2MuYz04NzY9c3RhdGljIGludCBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90IG1vZGUsXG4tLVxuZnMvZXh0NC9pYWxsb2MuYy04ODAtXHRpbnQgbmJsb2NrcyA9IDA7XG5mcy9leHQ0L2lhbGxvYy5jOjg4MTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L2lhbGxvYy5jLTg4Mi1cdHN0cnVjdCBwb3NpeF9hY2wgKnAgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTkzOC1cdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXG5mcy9leHQ0L3N1cGVyLmM6MTkzOTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3N1cGVyLmMtMTk0MC1cdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYz00NDA0PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MTktXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcbmZzL2V4dDQvc3VwZXIuYzo0NDIwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvc3VwZXIuYy00NDIxLVx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xuZnMvZXh0NC94YXR0ci5jLTg5LVx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cdFx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQveGF0dHIuYy05MS1cdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuLS1cbmZzL2V4dDQveGF0dHIuYy05NC1cdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmMtOTYtXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVx0XHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTEwNS1cdFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmg9MjA4PV9feGF0dHJfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5oLTIxMy1cbmZzL2V4dDQveGF0dHIuaDoyMTQ6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmgtMjE1LWV4dGVybiBpbnQgZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gRGVwZW5kZW5jaWVzIG9mIGBpbmxpbmUuY2Agd2l0aGluIGV4dDQqKgoKUmlnaHQsIHNvIGBpbmxpbmUuY2Agd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gc2VlbXMgdG8gYmUgY29udGluZ2VudCBvbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIFNwZWNpZmljYWxseSwgYENPTkZJR19FWFQ0X0ZTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcywgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGluIGBmcy9leHQ0L01ha2VmaWxlYC4gSSB3aWxsIHZlcmlmeSB0aGF0IHRoZSBjb21waWxhdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgaXMgaW5kZWVkIGhhbmRsZWQgaW4gdGhhdCBgTWFrZWZpbGVgLCBhbmQgYWxzbyB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24gY29uc3RyYWludC4gTG9va2luZyBhdCBsaW5lcyA4LTE1IHRoZXJlIHNob3VsZCBnaXZlIG1lIGFsbCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGV4dDQtZmlsZXN5c3RlbSByb3V0aW5lcy5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0VYVDRfRlMpICYjNDM7PSBleHQ0Lm9cbiAgIDc6XHRcbiAgIDg6XHRleHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4gICA5Olx0XHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbiAgMTA6XHRcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuICAxMTpcdFx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiAgMTI6XHRcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbiAgMTM6XHRcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbiAgMTQ6XHRcbiAgMTU6XHRleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG4gIDE2Olx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuICAxNzpcdGV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG4gIDE4Olx0XHRcdFx0XHRcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXHRcdCYjNDM7PSBleHQ0LXRlc3Qub1xuICAyMDpcdGV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQmIzQzOz0gdmVyaXR5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjIKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBJbmxpbmUgRGF0YSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBJbml0aWFsbHksIGl0IGp1c3QgY2hlY2tlZCBpZiBgaV9leHRyYV9pc2l6ZWAgd2FzIHplcm8sIGJ1dCBub3cgaXQgdXNlcyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpYC4gVGhpcyBuZXcgY2hlY2sgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGFkZHMgYSBib3VuZHMgY2hlY2ssIGVuc3VyaW5nIHRoYXQgdGhlIGBpX2V4dHJhX2lzaXplYCB2YWx1ZSwgYWxvbmcgd2l0aCB0aGUgaW5saW5lIHhhdHRyIGhlYWRlciwgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBpbm9kZSYjMzk7cyBzaXplIG9uIGRpc2suIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGNyYXNoZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29ycnVwdGVkIG9yIGNyYWZ0ZWQgZmlsZSBzeXN0ZW1zIHdoZXJlIGBpX2V4dHJhX2lzaXplYCBtaWdodCBiZSBtYWxpY2lvdXMuIFRoZSBvbGQgY29kZSBqdXN0IGJsaXRoZWx5IHByb2NlZWRlZCB0byBsb29rIGZvciB4YXR0cnMgaW4gaWJvZHkgcmVnYXJkbGVzcywgd2hpY2ggaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4KClRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGlubGluZSBkYXRhIGFuZCB4YXR0ciBwcm9jZXNzaW5nIGluIEV4dDQuIFRoZSBhcmVhcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBhcmUgaW5vZGUgbG9va3VwcywgYGV4dDRfaWdldGAsIGlubGluZSBkYXRhIHdyaXRlcywgZXh0ZW5kaW5nIGBpX2V4dHJhX2lzaXplYCwgYW5kIGV2ZW4gbW91bnRpbmcgY3JhZnRlZCBleHQ0IGltYWdlcy4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIHRocm91Z2ggZnV6emluZyB3aXRoIFN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgdGhpcywgYWN0aXZlbHkgZnV6emluZyBmaWxlc3lzdGVtIHN5c2NhbGxzIGFuZCBtb3VudGluZyBjcmFmdGVkIGltYWdlcyB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgIGFuZCBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBleHQ0LiBFeHQ0IGlzIGEgY29yZSBjb21wb25lbnQsIHNvIHRoaXMgY2hhbmdlIGhhcyBzb21lIGhlZnQuCgpMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGUgZnV6emluZyBpbXBsaWNhdGlvbnMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGRlZmluaXRlbHkgdHJ1ZSBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBpbXBvcnRhbnQgYW5kIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljIGluIGBmcy9leHQ0L2lubGluZS5jYC4gTmV4dCwgd2UgaGF2ZSBgRm9jdXNTeW1ib2xzYC4gSSB0aGluayB3ZSBzaG91bGQga2VlcCBpdCBjb25jaXNlIGFuZCBmb2N1c2VkIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbmQgaXRzIGRpcmVjdCBjYWxsZXJzIHRoYXQgYWxzbyBkZWFsIHdpdGggaW5saW5lIGRhdGEuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBpcyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AsIHdoaWNoIGlzICpub24tc3RhdGljKiwgYW5kICpub3QqIHViaXF1aXRvdXMsIGFuZCBpdCBpcyAqdGhlKiBzeW1ib2wgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBXZSBjYW4gYWxzbyBpbmNsdWRlIGBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGFgLCBgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmRgLCBhbmQgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhcyB0aGV5IGFsc28gZGVhbCB3aXRoIGlubGluZSBkYXRhLgoKRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBFWFQ0X0ZTYCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLgoKQSBxdWljayBkb3VibGUtY2hlY2s6CiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtFWFQ0X0ZTJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssICYjMzQ7ZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhJiMzNDssICYjMzQ7ZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQmIzM0OywgJiMzNDtleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSYjMzQ7XWAKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlCiogICBSZWFzb25pbmc6IGNvbmNpc2UgYW5kIGFjY3VyYXRlLgoKQWxyaWdodCwgc2VlbXMgc29saWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm91bmRzIGNoZWNraW5nIGluIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKSBieSBlbnN1cmluZyB0aGUgaW5vZGUgaGFzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIGlubGluZSB4YXR0ciBkYXRhIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSkgcmF0aGVyIHRoYW4gb25seSBjaGVja2luZyB3aGV0aGVyIGlfZXh0cmFfaXNpemUgaXMgbm9uLXplcm8uIFRoaXMgYWZmZWN0cyBleHQ0IGlub2RlIHJlYWRpbmcgYW5kIGlubGluZSBkYXRhIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbW91bnRpbmcgb2YgY3JhZnRlZCBpbWFnZXMgaW4gc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm91bmRzIGNoZWNraW5nIGluIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKSBieSBlbnN1cmluZyB0aGUgaW5vZGUgaGFzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIGlubGluZSB4YXR0ciBkYXRhIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSkgcmF0aGVyIHRoYW4gb25seSBjaGVja2luZyB3aGV0aGVyIGlfZXh0cmFfaXNpemUgaXMgbm9uLXplcm8uIFRoaXMgYWZmZWN0cyBleHQ0IGlub2RlIHJlYWRpbmcgYW5kIGlubGluZSBkYXRhIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbW91bnRpbmcgb2YgY3JhZnRlZCBpbWFnZXMgaW4gc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGNoZWNrIGBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIGxvY2FsIHN0cnVjdHVyZXMgKGUuZy4gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgKSBhcmUgZnVsbHkgb3IgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBmb3IgdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODA5NWI1MDI1MTRlZjQ4ZjY1MTQ1YTgzNzcyODQ1ZjMxM2QwNDNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDM6NDg6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuYwppbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lubGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmMKQEAgLTE1MSw3ICYjNDM7MTUxLDcgQEAgaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKIAl9OwogCWludCBlcnJvcjsKIAotCWlmIChFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplID09IDApCiYjNDM7CWlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAogCWVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmYW1wO2lzLmlsb2MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NAoJCQkJCQkJb3V0cHV0OiA2MgoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVYVDQgSW5saW5lIERhdGEgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjaGFuZ2VzIG1hZGUgd2l0aGluIGBmcy9leHQ0L2lubGluZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjb25kaXRpb25hbCBjaGFuZ2U6IHRoZSBvcmlnaW5hbCBjaGVjayBmb3IgYGlfZXh0cmFfaXNpemUgPT0gMGAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGNoZWNrIGZvciBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgaW5saW5lIGRhdGEgaXMgaGFuZGxlZCB3aXRoIHJlc3BlY3QgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyAoWEFUVFJzKS4KClRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyDigJMgbGlrZWx5IGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgYm90aCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgYW5kIHRoZSBtYWNybyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFYCBhY3R1YWxseSBzaWduaWZpZXMuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGNoYW5nZSBhaW1zIHRvIGludGVncmF0ZSBYQVRUUiBoYW5kbGluZyBtb3JlIGRpcmVjdGx5IHdpdGggaW5saW5lIGRhdGEgbWFuYWdlbWVudCwgcGVyaGFwcyB0byBvcHRpbWl6ZSBzcGFjZSBhbGxvY2F0aW9uIG9yIGltcHJvdmUgY29uc2lzdGVuY3kuIEl0JiMzOTtzIGFsc28gcG9zc2libGUgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIHRvIG1ha2UgdGhpbmdzIG1vcmUgcm9idXN0IG9yIGNsZWFyLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jPTM1PXN0YXRpYyBpbnQgZ2V0X21heF9pbmxpbmVfeGF0dHJfdmFsdWVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDMtXG5mcy9leHQ0L2lubGluZS5jOjQ0Olx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jLTQ1LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE0Mz1pbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTUzLVxuZnMvZXh0NC9pbmxpbmUuYzoxNTQ6XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbmZzL2V4dDQvaW5saW5lLmMtMTU1LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIwNC1cbmZzL2V4dDQvaW5vZGUuYzo1MjA1Olx0aWYgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSAgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2lub2RlLmMtNTIwNi1cdCAgICAqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjIzMD1pbnQgZXh0NF94YXR0cl9pYm9keV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXG4tLVxuZnMvZXh0NC94YXR0ci5jLTIyMzYtXG5mcy9leHQ0L3hhdHRyLmM6MjIzNzpcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuZnMvZXh0NC94YXR0ci5jLTIyMzgtXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yMjU2PWludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMjY0LVxuZnMvZXh0NC94YXR0ci5jOjIyNjU6XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYy0yMjY2LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5mcy9leHQ0L3hhdHRyLmg9NDM9c3RydWN0IGV4dDRfeGF0dHJfZW50cnkge1xuLS1cbmZzL2V4dDQveGF0dHIuaC0xMDYtICovXG5mcy9leHQ0L3hhdHRyLmg6MTA3OiNkZWZpbmUgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpXHRcdFx0XHRcXFxuZnMvZXh0NC94YXR0ci5oLTEwOC1cdCgoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplICE9IDApIFx1MDAyNlx1MDAyNlx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHQgKiBjdXJyZW50bHkgb25seSB1c2VkIGluIGEgY29kZSBwYXRoIGNvbWluZyBmb3JtIGV4dDRfaWdldCwgYmVmb3JlXG4gMTQxOlx0ICogdGhlIG5ldyBpbm9kZSBoYXMgYmVlbiB1bmxvY2tlZFxuIDE0MjpcdCAqL1xuIDE0MzpcdGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gMTQ0Olx0e1xuIDE0NTpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbiAxNDY6XHRcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSxcbiAxNDc6XHRcdH07XG4gMTQ4Olx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4gMTQ5Olx0XHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4gMTUwOlx0XHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbiAxNTE6XHRcdH07XG4gMTUyOlx0XHRpbnQgZXJyb3I7XG4gMTUzOlx0XG4gMTU0Olx0XHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcbiAxNTU6XHRcdFx0cmV0dXJuIDA7XG4gMTU2Olx0XG4gMTU3Olx0XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4gMTU4Olx0XHRpZiAoZXJyb3IpXG4gMTU5Olx0XHRcdHJldHVybiBlcnJvcjtcbiAxNjA6XHRcbiAxNjE6XHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4gMTYyOlx0XHRpZiAoZXJyb3IpXG4gMTYzOlx0XHRcdGdvdG8gb3V0O1xuIDE2NDpcdFxuIDE2NTpcdFx0aWYgKCFpcy5zLm5vdF9mb3VuZCkge1xuIDE2NjpcdFx0XHRpZiAoaXMucy5oZXJlLVx1MDAzZWVfdmFsdWVfaW51bSkge1xuIDE2NzpcdFx0XHRcdEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIFwmIzM0O2lubGluZSBkYXRhIHhhdHRyIHJlZmVycyBcJiMzNDtcbiAxNjg6XHRcdFx0XHRcdFx0IFwmIzM0O3RvIGFuIGV4dGVybmFsIHhhdHRyIGlub2RlXCYjMzQ7KTtcbiAxNjk6XHRcdFx0XHRlcnJvciA9IC1FRlNDT1JSVVBURUQ7XG4gMTcwOlx0XHRcdFx0Z290byBvdXQ7XG4gMTcxOlx0XHRcdH1cbiAxNzI6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAodTE2KSgodm9pZCAqKWlzLnMuaGVyZSAtXG4gMTczOlx0XHRcdFx0XHRcdCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYykpO1xuIDE3NDpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICYjNDM7XG4gMTc1Olx0XHRcdFx0XHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiAxNzY6XHRcdH1cbiAxNzc6XHRvdXQ6XG4gMTc4Olx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4gMTc5Olx0XHRyZXR1cm4gZXJyb3I7XG4gMTgwOlx0fVxuIDE4MTpcdFxuIDE4MjpcdHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcbiAxODM6XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuLFxuIDE4NDpcdFx0XHRcdFx0IHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG4gMTg1Olx0e1xuIDE4NjpcdFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xuIDE4NzpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4gMTg4Olx0XHRpbnQgY3BfbGVuID0gMDtcbiAxODk6XHRcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4gMTkwOlx0XG4gMTkxOlx0XHRpZiAoIWxlbilcbiAxOTI6XHRcdFx0cmV0dXJuIDA7XG4gMTkzOlx0XG4gMTk0Olx0XHRCVUdfT04obGVuIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpO1xuIDE5NTpcdFxuIDE5NjpcdFx0Y3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuIDE5NzpcdFxuIDE5ODpcdFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7XG4gMTk5Olx0XHRtZW1jcHkoYnVmZmVyLCAodm9pZCAqKShyYXdfaW5vZGUtXHUwMDNlaV9ibG9jayksIGNwX2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRVhUNCBJbm9kZSYjMzk7cyBFeHRlbmRlZCBBdHRyaWJ1dGUgU3BhY2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBFWFQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgbWFjcm8gYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBkZWZpbmVkIGluIGBmcy9leHQ0L3hhdHRyLmhgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGhlYWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gaW5vZGUgaGFzIHNwYWNlIGFsbG9jYXRlZCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgaG93IHhhdHRycyBhcmUgbWFuYWdlZCBvbiBkaXNrIGFuZCBpbiBtZW1vcnksIHNvIGdldHRpbmcgYSBzb2xpZCBncmlwIG9uIHRoaXMgbWFjcm8gaXMgZXNzZW50aWFsLiBJJiMzOTttIGFzc3VtaW5nIGl0IGludm9sdmVzIGNoZWNraW5nIHNvbWUgYml0cyB3aXRoaW4gdGhlIGlub2RlIHN0cnVjdHVyZSBvciBtYXliZSBleGFtaW5pbmcgc29tZSByZWxhdGVkIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1hY3JvJiMzOTtzIGRlZmluaXRpb24gaGFzIHRvIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdC8qXG4gMTAxOlx0ICogSWYgd2Ugd2FudCB0byBhZGQgYW4geGF0dHIgdG8gdGhlIGlub2RlLCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXRcbiAxMDI6XHQgKiBpX2V4dHJhX2lzaXplIGlzIG5vdCAwIGFuZCB0aGF0IHRoZSBpbm9kZSBzaXplIGlzIG5vdCBsZXNzIHRoYW5cbiAxMDM6XHQgKiBFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgJiM0MzsgZXh0cmFfaXNpemUgJiM0MzsgcGFkLlxuIDEwNDpcdCAqICAgRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICAgZXh0cmFfaXNpemUgaGVhZGVyICAgZW50cnkgICBwYWQgIGRhdGFcbiAxMDU6XHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tfC0tLS0tLS18XG4gMTA2Olx0ICovXG4gMTA3Olx0I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcdFx0XHRcdFxcXG4gMTA4Olx0XHQoKEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSAhPSAwKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFxcXG4gMTA5Olx0XHQgKEVYVDRfR09PRF9PTERfSU5PREVfU0laRSAmIzQzOyBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgJiM0MztcdFxcXG4gMTEwOlx0XHQgIHNpemVvZihzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIpICYjNDM7IEVYVDRfWEFUVFJfUEFEIFx1MDAzYz1cdFxcXG4gMTExOlx0XHQgIEVYVDRfSU5PREVfU0laRSgoaW5vZGUpLVx1MDAzZWlfc2IpKSlcbiAxMTI6XHRcbiAxMTM6XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIHtcbiAxMTQ6XHRcdGNvbnN0IGNoYXIgKm5hbWU7XG4gMTE1Olx0XHRjb25zdCB2b2lkICp2YWx1ZTtcbiAxMTY6XHRcdHNpemVfdCB2YWx1ZV9sZW47XG4gMTE3Olx0XHRpbnQgbmFtZV9pbmRleDtcbiAxMTg6XHRcdGludCBpbl9pbm9kZTtcbiAxMTk6XHR9O1xuIDEyMDpcdFxuIDEyMTpcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCB7XG4gMTIyOlx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3Q7XG4gMTIzOlx0XHR2b2lkICpiYXNlO1xuIDEyNDpcdFx0dm9pZCAqZW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIENhbGwgU2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJhY2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0mIzM5O3MgaW5saW5lIGRhdGEgaGFuZGxpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyByb3V0aW5lLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGFueSBwb3RlbnRpYWwgcmlza3Mgb3IgaW1wcm92ZW1lbnRzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zNzY4PWV4dGVybiBpbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0Lmg6Mzc2OTpleHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzcwLWV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTEwPWludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE0Mi0gKi9cbmZzL2V4dDQvaW5saW5lLmM6MTQzOmludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE0NC17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz00MDY9c3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQyNC1cdCAqL1xuZnMvZXh0NC9pbmxpbmUuYzo0MjU6XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTQyNi1cdGlmIChlaS1cdTAwM2VpX2lubGluZV9vZmYpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz03OTM9aW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTgzMi1cdFx0ICovXG5mcy9leHQ0L2lubGluZS5jOjgzMzpcdFx0KHZvaWQpIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy04MzQtXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMTQtXHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbmZzL2V4dDQvaW5vZGUuYzo1MjE1Olx0XHRlcnIgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy01MjE2LVx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNjMzPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTc3Ni1cdFx0aWYgKCFpc19ibG9jayBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTc3NzpcdFx0XHRyZXQgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xNzc4LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9Mjc2NT1pbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjg1Ny1cdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmM6Mjg1ODpcdFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0yODU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgRnVuY3Rpb24mIzM5O3MgRXZvbHV0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhIHdpdGhpbiBleHQ0IGlub2Rlcy4gUHJldmlvdXNseSwgdGhlIGNoZWNrIHdhcyBpbmNyZWRpYmx5IHNpbXBsZTogYGlmIChFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplID09IDApIHJldHVybiAwO2AuIEVzc2VudGlhbGx5LCAmIzM0O2lmIGBpX2V4dHJhX2lzaXplYCBpcyB6ZXJvLCB3ZSYjMzk7cmUgZG9uZTsgdGhlcmUmIzM5O3Mgbm8gaW5saW5lIGRhdGEgdG8gZmluZC4mIzM0OyBCdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBhdHRyaWJ1dGVzLCBsaWtlIGBleHQ0X3hhdHRyX2lib2R5X2ZpbmRgIG9yIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIGhhZCB0aGUgbW9yZSByb2J1c3QgY2hlY2sgb2YgYGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKWAsIHdoaWNoIGlzIGNsZWFybHkgbW9yZSBjb21wcmVoZW5zaXZlLgoKTm93LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc2NlbmFyaW8gd2hlcmUgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIHdhc24mIzM5O3QgYmVoYXZpbmcgaWRlYWxseS4gSXQgY29udGludWVkIHByb2Nlc3NpbmcgKmV2ZW4gaWYqIGBpX2V4dHJhX2lzaXplYCB3YXMgKm5vbi16ZXJvKiwgYnV0IGEgc3Vic2VxdWVudCBzaXplIGNoZWNrIGZhaWxlZDogYEVYVDRfR09PRF9PTERfSU5PREVfU0laRSAmIzQzOyBFWFQ0X0koaW5vZGUpLSZndDtpX2V4dHJhX2lzaXplICYjNDM7IHNpemVvZihzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIpICYjNDM7IEVYVDRfWEFUVFJfUEFEICZndDsgRVhUNF9JTk9ERV9TSVpFKChpbm9kZSktJmd0O2lfc2IpYC4gIFRoaXMgdHJpZ2dlcmVkIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGl0IHByb2JhYmx5IHNob3VsZG4mIzM5O3QgaGF2ZSBiZWVuIGNhbGxpbmcgaW4gdGhhdCBzY2VuYXJpbywgbmFtZWx5IGBleHQ0X2dldF9pbm9kZV9sb2NgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9maW5kYC4gSSYjMzk7bGwgd2FudCB0byBpbnZlc3RpZ2F0ZSB3aGF0IGFzc3VtcHRpb25zIGFyZSBidWlsdCBpbnRvIHRob3NlIGNhbGxzLCBhbmQgd2h5IGl0JiMzOTtzIGJlbmVmaWNpYWwgdG8gcHJldmVudCB0aGVtIGZyb20gZXhlY3V0aW5nIGluIHRoaXMgY2FzZS4KCk5leHQgc3RlcDogZGl2ZSBpbnRvIHRoYXQgYGV4dDRfeGF0dHJfaWJvZHlfZmluZGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBpbnNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjMwOlx0aW50IGV4dDRfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuMjIzMTpcdFx0XHRcdCAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCAqaXMpXG4yMjMyOlx0e1xuMjIzMzpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4yMjM0Olx0XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuMjIzNTpcdFx0aW50IGVycm9yO1xuMjIzNjpcdFxuMjIzNzpcdFx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG4yMjM4Olx0XHRcdHJldHVybiAwO1xuMjIzOTpcdFxuMjI0MDpcdFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMtXHUwMDNlaWxvYyk7XG4yMjQxOlx0XHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuMjI0MjpcdFx0aXMtXHUwMDNlcy5iYXNlID0gaXMtXHUwMDNlcy5maXJzdCA9IElGSVJTVChoZWFkZXIpO1xuMjI0MzpcdFx0aXMtXHUwMDNlcy5oZXJlID0gaXMtXHUwMDNlcy5maXJzdDtcbjIyNDQ6XHRcdGlzLVx1MDAzZXMuZW5kID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XG4yMjQ1Olx0XHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkge1xuMjI0NjpcdFx0XHQvKiBGaW5kIHRoZSBuYW1lZCBhdHRyaWJ1dGUuICovXG4yMjQ3Olx0XHRcdGVycm9yID0geGF0dHJfZmluZF9lbnRyeShpbm9kZSwgXHUwMDI2aXMtXHUwMDNlcy5oZXJlLCBpcy1cdTAwM2VzLmVuZCxcbjIyNDg6XHRcdFx0XHRcdFx0IGktXHUwMDNlbmFtZV9pbmRleCwgaS1cdTAwM2VuYW1lLCAwKTtcbjIyNDk6XHRcdFx0aWYgKGVycm9yIFx1MDAyNlx1MDAyNiBlcnJvciAhPSAtRU5PREFUQSlcbjIyNTA6XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4yMjUxOlx0XHRcdGlzLVx1MDAzZXMubm90X2ZvdW5kID0gZXJyb3I7XG4yMjUyOlx0XHR9XG4yMjUzOlx0XHRyZXR1cm4gMDtcbjIyNTQ6XHR9XG4yMjU1Olx0XG4yMjU2Olx0aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4yMjU3Olx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuMjI1ODpcdFx0XHRcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCAqaXMpXG4yMjU5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVkdW5kYW5jeSBpbiBleHQ0IFhhdHRyIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgZXh0NF94YXR0cl9pYm9keV9maW5kYCwgYW5kIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCB3aXRob3V0IHRvdWNoaW5nIGBpcy0mZ3Q7cy5iYXNlYCwgYGlzLSZndDtzLmhlcmVgLCBvciBgaXMtJmd0O3Mubm90X2ZvdW5kYC4gVGhhdCBzZWVtcy4uLm9kZC4gTm93LCBJIHNlZSB0aGlzIGJlaW5nIHVzZWQgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGV5IGluaXRpYWxpemUgYGlzLnMubm90X2ZvdW5kYCB0byBgLUVOT0RBVEFgIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGVuLCB0aGUgY29kZSBjYWxscyBgZXh0NF94YXR0cl9pYm9keV9maW5kYC4gQnV0LCBpZiBgZXJyb3JgIGlzIG5vdCBzZXQsIHRoZW4gdGhlIGNoZWNrIGlzIGAhaXMucy5ub3RfZm91bmRgIHdoaWNoIHNob3VsZCBiZSBmYWxzZSwgc2luY2UgaXQgd2FzIGluaXRpYWxpemVkIHRvIGAtRU5PREFUQWAuIFNvIGJhc2ljYWxseSwgaXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyB0byBgYnJlbHNlKGlzLmlsb2MuYmgpYCBhbmQgcmV0dXJuaW5nIDAsIHdoaWNoIHNlZW1zIGxpa2UgYSBudWxsIG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhhdCBzaW5jZSB0aGUgY2hlY2sgYCFpcy5zLm5vdF9mb3VuZGAgaXMgZXF1aXZhbGVudCB0byBjaGVja2luZyBpZiBgZXJyb3JgIGlzIDAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5IGlzIHRoaXMgaGFwcGVuaW5nPyBJcyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgZG9pbmcgc29tZSB1c2VsZXNzIHdvcmsgYnkgcmVhZGluZyB0aGUgaW5vZGUgbG9jYXRpb24sIHRoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiYWlsIGVhcmx5PyBQZXJoYXBzIGl0JiMzOTtzIHRoZXJlIHRvIHByb3RlY3QgYWdhaW5zdCBzb21lIGluY29uc2lzdGVuY3kgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGlzIHNuaXBwZXQuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb2YgdGhpcywgdG8gZ2FpbiBjb250ZXh0LCBhbmQgZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGRlc2lnbi4gVG8gY2xhcmlmeSB0aGUgd29yaywgSSBuZWVkIHRvIGtub3cgd2h5LgoKSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZ2l0IGxvZyBhbmQgaGlzdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIGNvbW1pdHMgcmVsYXRlZCB0byBgaW5saW5lLmNgIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvZGUuIEkgbmVlZCB0byBnZXQgdGhlICYjMzQ7d2h5JiMzNDsgYmVmb3JlIEkgY2FuIHNheSBpZiB0aGlzIGlzIGEgYnVnIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM3Njg9ZXh0ZXJuIGludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozNzY5OmV4dGVybiBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM3NzAtZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQyLSAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxNDM6aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQwNj1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDI0LVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjQyNTpcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNDI2LVx0aWYgKGVpLVx1MDAzZWlfaW5saW5lX29mZilcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtODMyLVx0XHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6ODMzOlx0XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTgzNC1cbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIxNC1cdFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuZnMvZXh0NC9pbm9kZS5jOjUyMTU6XHRcdGVyciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTUyMTYtXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MzM9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNzc2LVx0XHRpZiAoIWlzX2Jsb2NrIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbmZzL2V4dDQveGF0dHIuYzoxNzc3Olx0XHRcdHJldCA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE3NzgtXHRcdFx0aWYgKHJldCkge1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yNzY1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODU3LVx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYzoyODU4Olx0XHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTI4NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogMjYyCgkJCQkJCQl0aG91Z2h0czogOTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ2hlY2sgaW4gZXh0NCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNoYW5nZSBpbiBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AsIHNwZWNpZmljYWxseSB0aGUgY29uZGl0aW9uIGZvciBhbiBlYXJseSBleGl0LiBQcmV2aW91c2x5LCB3ZSBjaGVja2VkIGlmIGBpX2V4dHJhX2lzaXplYCB3YXMgemVyby4gTm93LCB3ZSYjMzk7cmUgdXNpbmcgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgbWFjcm8gZG9lcyBhIG1vcmUgdGhvcm91Z2ggY2hlY2s6IGl0IG5vdCBvbmx5IHZlcmlmaWVzIGBpX2V4dHJhX2lzaXplYCBpc24mIzM5O3QgemVybyBidXQgYWxzbyBlbnN1cmVzIHRoZSBpbm9kZSBzaXplIGhhcyBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSB4YXR0ciBzcGFjZSwgYWNjb3VudGluZyBmb3IgdGhlIGhlYWRlciBhbmQgcGFkZGluZy4gR29vZCwgYSBtb3JlIHJvYnVzdCBjaGVjayBvdmVyYWxsLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyBpdDoKCjEuICBFeHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGlzIGNvZGUgZG9lc24mIzM5O3QgdG91Y2ggYW55dGhpbmcgZXhwb3NlZCB0byB1c2VybGFuZC4KMi4gIERlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYz8gTm8uIFdlIGhhdmUgYSBsb2NhbCBzdHJ1Y3QsIGBpc2AsIHdoaWNoIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIHRoZSBzdGFjay4gVGhlIGVhcmx5IHJldHVybiBkb2VzbiYjMzk7dCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YS4KMy4gIEludm9sdmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm9wZSwgaXQgZGVhbHMgd2l0aCBleGlzdGluZyBpbm9kZSBzdHJ1Y3R1cmVzIHdpdGggaW1wcm92ZWQgY2hlY2tzLgo0LiAgQWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdGhyb3VnaCBib3VuZHMgY2hlY2tzPyBOby4gSXQgaW1wcm92ZXMgYm91bmRzIGNoZWNraW5nLCBpbiBmYWN0LCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLgoKU28sIGJhc2VkIG9uIHRoYXQgYW5hbHlzaXMsIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IHRyaWdnZXIgYW55IEtNU0FOIGNvbmNlcm5zLiBJdCYjMzk7cyB0aWdodGVuaW5nIGFuIGV4aXN0aW5nIGNoZWNrLCBlbnN1cmluZyB3ZSBkb24mIzM5O3QgcHJvY2VlZCB3aXRoIHNlYXJjaGluZyBmb3IgaW5saW5lIGRhdGEgd2hlbiB0aGVyZSYjMzk7cyBubyB2YWxpZCB4YXR0ciBzcGFjZS4gSW4gZXNzZW5jZSwgaXQmIzM5O3MgYSBzYW5pdHkgY2hlY2sgb24gaW5vZGUgbGF5b3V0IGNvbnNpc3RlbmN5LgoKVGhpcyBjaGFuZ2UgZG9lcyBib2xzdGVyIEtBU0FOJiMzOTtzIHJvbGUsIGFjdHVhbGx5LiBCeSBiZXR0ZXIgdmFsaWRhdGluZyB0aGUgaW5vZGUmIzM5O3MgaW50ZXJuYWwgbGF5b3V0LCBpdCByZWR1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFsb25nIHdpdGggdHlwaWNhbCBhc3NlcnRpb25zIGFuZCBVQiBzYW5pdGl6ZXJzLiBTbywgaXQmIzM5O3MgYSBnb29kIHRoaW5nLCBhIGRlZmVuc2l2ZSBtZWFzdXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBjaGVjayBgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2V4dHJhX2lzaXplID09IDBgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpYCByZXR1cm5zIGVhcmx5ICh3aXRoIDApIGlmIHRoZSBpbm9kZSBzaXplIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGUgZXh0cmEgaXNpemUsIHhhdHRyIGhlYWRlciwgYW5kIHBhZGRpbmcuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjb21wdXRhdGlvbnMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChlLmcuIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCkgYXJlIGZ1bGx5IG9yIGFwcHJvcHJpYXRlbHkgaW5pdGlhbGl6ZWQuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB0aWdodGVuZWQgYm91bmRzIHZhbGlkYXRpb24gcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnZhbGlkIGxheW91dCB0cmF2ZXJzYWwgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggaXMgcHJvcGVybHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIHNhbml0aXplcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgZm9yIHRoaXMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGNoZWNrIGBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIGxvY2FsIHN0cnVjdHVyZXMgKGUuZy4gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgKSBhcmUgZnVsbHkgb3IgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBmb3IgdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjE3NjYwOTI0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzMyMDg4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gICAgXCJleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgY2hlY2sgYEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY29tcHV0YXRpb25zIGluIGEgd2F5IHRoYXQgcmVhZHMgdW5pbml0aWFsaXplZCBkYXRhLiBBbGwgbG9jYWwgc3RydWN0dXJlcyAoZS5nLiBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2ApIGFyZSBmdWxseSBvciBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGZvciB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjE3NjYxNDI2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDk4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODgwOTViNTAyNTE0ZWY0OGY2NTE0NWE4Mzc3Mjg0NWYzMTNkMDQzYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMzo0ODowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xcbmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5AQCAtMTUxLDcgKzE1MSw3IEBAIGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH07XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuLVxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplID09IDApXFxuK1xcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjYzNzg4MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1NzE0MzIzMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gICAgXCJleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYm91bmRzIGNoZWNraW5nIGluIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKSBieSBlbnN1cmluZyB0aGUgaW5vZGUgaGFzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIGlubGluZSB4YXR0ciBkYXRhIChFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRSkgcmF0aGVyIHRoYW4gb25seSBjaGVja2luZyB3aGV0aGVyIGlfZXh0cmFfaXNpemUgaXMgbm9uLXplcm8uIFRoaXMgYWZmZWN0cyBleHQ0IGlub2RlIHJlYWRpbmcgYW5kIGlubGluZSBkYXRhIG9wZXJhdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbW91bnRpbmcgb2YgY3JhZnRlZCBpbWFnZXMgaW4gc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4MDk1YjUwMjUxNGVmNDhmNjUxNDVhODM3NzI4NDVmMzEzZDA0M2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMzo0ODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMClcbitcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjAyLjYzNzg4NDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQxMzQ0NTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRyaWFnZSBmb3IgYGZzL2V4dDQvaW5saW5lLmNgIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGluIGBmcy9leHQ0L2lubGluZS5jYCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBMZXQncyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudCBmaXJzdCwganVzdCB0byBiZSBzdXJlLiBUaGlzIGlzbid0IGFib3V0IGFueXRoaW5nIG1hbGljaW91cywganVzdCBzdGFuZGFyZCBkZWZlbnNpdmUgUUEsIGZ1enppbmcgdHJpYWdlLiBJdCdzIGEgY29kZSByZXZpZXcgc3RlcCwgc28gaXQgc2hvdWxkIGJlIHNhZmUuIE5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBpcyBpbXBsaWVkLCBubyBpbW1lZGlhdGUgaGlnaC1zZXZlcml0eSByaXNrLiBXZSBhcmUgZ29vZCB0byBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhpcyBwYXRjaC4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgaW5saW5lIGRhdGEgaXMgaGFuZGxlZDpcblxuYGBgZGlmZlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi45ZjZhNGQxM2I5YWJjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTE1MSw3ICsxNTEsNyBAQCBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fTtcbiBcdGludCBlcnJvcjtcbiBcbi1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMClcbitcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbmBgYFxuXG5TcGVjaWZpY2FsbHksIGl0J3MgcmVwbGFjaW5nIGEgY2hlY2sgb24gYEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZWAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpYCBtYWNybyBkb2VzIGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZS4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5IHRvIGZpbmQgb3V0IHdoYXQgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFYCBleHBhbmRzIHRvLCB3aG8gY2FsbHMgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLCBhbmQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gncyBpbXBhY3QgYW5kIHBvdGVudGlhbCBhcmVhcyB3aGVyZSBmdXp6aW5nIG1pZ2h0IHVuY292ZXIgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MTIuMDUxMzMxODMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdCAqIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gYSBjb2RlIHBhdGggY29taW5nIGZvcm0gZXh0NF9pZ2V0LCBiZWZvcmVcXG4gMTQxOlxcdCAqIHRoZSBuZXcgaW5vZGUgaGFzIGJlZW4gdW5sb2NrZWRcXG4gMTQyOlxcdCAqL1xcbiAxNDM6XFx0aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4gMTQ0OlxcdHtcXG4gMTQ1OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuIDE0NjpcXHRcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxcbiAxNDc6XFx0XFx0fTtcXG4gMTQ4OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4gMTQ5OlxcdFxcdFxcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXFxuIDE1MDpcXHRcXHRcXHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXFxuIDE1MTpcXHRcXHR9O1xcbiAxNTI6XFx0XFx0aW50IGVycm9yO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG4gMTU1OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbiAxNTg6XFx0XFx0aWYgKGVycm9yKVxcbiAxNTk6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuIDE2MjpcXHRcXHRpZiAoZXJyb3IpXFxuIDE2MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0aWYgKCFpcy5zLm5vdF9mb3VuZCkge1xcbiAxNjY6XFx0XFx0XFx0aWYgKGlzLnMuaGVyZS1cXHUwMDNlZV92YWx1ZV9pbnVtKSB7XFxuIDE2NzpcXHRcXHRcXHRcXHRFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCBcXFwiaW5saW5lIGRhdGEgeGF0dHIgcmVmZXJzIFxcXCJcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdFxcdCBcXFwidG8gYW4gZXh0ZXJuYWwgeGF0dHIgaW5vZGVcXFwiKTtcXG4gMTY5OlxcdFxcdFxcdFxcdGVycm9yID0gLUVGU0NPUlJVUFRFRDtcXG4gMTcwOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNzE6XFx0XFx0XFx0fVxcbiAxNzI6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmID0gKHUxNikoKHZvaWQgKilpcy5zLmhlcmUgLVxcbiAxNzM6XFx0XFx0XFx0XFx0XFx0XFx0KHZvaWQgKilleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYykpO1xcbiAxNzQ6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgK1xcbiAxNzU6XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaXMucy5oZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUpO1xcbiAxNzY6XFx0XFx0fVxcbiAxNzc6XFx0b3V0OlxcbiAxNzg6XFx0XFx0YnJlbHNlKGlzLmlsb2MuYmgpO1xcbiAxNzk6XFx0XFx0cmV0dXJuIGVycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODoxMi4wNTE0Njg5OTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE1NTQ4ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEVYVDQgWEFUVFIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKFhBVFRScykgYW5kIGlubGluZSBkYXRhIHdpdGhpbiBFWFQ0LiBUaGUgc3RhcnRpbmcgcG9pbnQ/IEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRWAuIFRoYXQgbWFjcm8gaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgc3BhY2UgaXMgYWxsb2NhdGVkIHdpdGhpbiBhbiBpbm9kZSB0byBwb3RlbnRpYWxseSBzdG9yZSBYQVRUUiBkYXRhIGRpcmVjdGx5LiBVbmRlcnN0YW5kaW5nIHRoYXQncyBrZXkgdG8gY29tcHJlaGVuZGluZyB0aGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyBvZiBzdG9yaW5nIHNtYWxsIFhBVFRScyBpbiB0aGUgaW5vZGUgaXRzZWxmIHZlcnN1cyB1c2luZyBzZXBhcmF0ZSBibG9ja3MuXG5cbk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpc3NlY3QgdGhlIGNhbGwgY2hhaW4gZm9yIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGhlYXJ0IG9mIHJldHJpZXZpbmcgdGhlIGlubGluZSBkYXRhLCBwb3RlbnRpYWxseSB0aGUgWEFUVFJzLCB3aGVuIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIGlub2RlLiBJJ2xsIG5lZWQgdG8ga25vdzogd2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQgdG8gaXQ/IEhvdyBkb2VzIGl0IGFjdHVhbGx5IGxvY2F0ZSBhbmQgcmV0cmlldmUgdGhlIGlubGluZSBYQVRUUiBkYXRhPyBBbnkgc3VidGxldGllcyBsaWtlIGxvY2tpbmcgb3IgY29uY3VycmVuY3kgY29uY2VybnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXRyaWV2YWwgbmVlZCB0byBiZSB1bmRlcnN0b29kLiBUaGlzIG1pZ2h0IGludm9sdmUgbG9va2luZyBhdCBmaWxlIHN5c3RlbXMgdGhhdCBoYXZlIGlzc3VlcyB3aXRoIHBlcmZvcm1hbmNlIHdpdGggaW5saW5lIGRhdGEgcmV0cmlldmFsLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbiB0aGlzIGFyZWEgYW5kIGFueSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYmVzdCB0byByZWNvbW1lbmQgdXNhZ2Ugb2YgdGhpcyBmaWxlc3lzdGVtIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE0LjM2NzA0MTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzcwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbmxpbmUuYz0zNT1zdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDMtXFxuZnMvZXh0NC9pbmxpbmUuYzo0NDpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jLTQ1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTUzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTU0OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTU1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIwNC1cXG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcXHRpZiAoRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpICBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYy01MjA2LVxcdCAgICAqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMjMwPWludCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjM2LVxcbmZzL2V4dDQveGF0dHIuYzoyMjM3OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYy0yMjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIyNTY9aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjI2NC1cXG5mcy9leHQ0L3hhdHRyLmM6MjI2NTpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtMjI2Ni1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD00Mz1zdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmgtMTA2LSAqL1xcbmZzL2V4dDQveGF0dHIuaDoxMDc6I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcXHRcXHRcXHRcXHRcXFxcXFxuZnMvZXh0NC94YXR0ci5oLTEwOC1cXHQoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgIT0gMCkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE0LjQxMjgxNTczOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTQzMDgyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGVYdGVuZGVkIEF0dHJpYnV0ZXMgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGluIGV4dDQuIFRpbWUgdG8ganVtcCByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBgZnMvZXh0NC94YXR0ci5oYC4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSBkZWZpbml0aXZlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGVyZSDigJMgdGhlIGBzdHJ1Y3RgIGRlZmluaXRpb25zLCB0aGUgbWFjcm9zLCB0aGUgY29uc3RhbnRzLi4uIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgeGF0dHJzIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlOiBob3cgYXJlIHRoZXkgc3RvcmVkLCB3aGF0IGFyZSB0aGUga2V5IGZpZWxkcywgYW5kIHdoYXQgYXJlIHRoZSBpbXBvcnRhbnQgZmxhZ3Mgb3IgY2hhcmFjdGVyaXN0aWNzPyBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHN0YW5kYXJkIGF0dHJpYnV0ZSBoZWFkZXIsIGFuZCBJJ20gbG9va2luZyBmb3IgaW5zaWdodCBpbnRvIHRoZSBkaWZmZXJlbnQgbmFtZXNwYWNlcyBvciB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24gb2YgdGhlIG1ldGFkYXRhLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIHRoZSBzaXplIGxpbWl0cywgYW5kIGFueSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhhdCBoZWFkZXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE2LjcwNzEyNzU4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQveGF0dHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDU6XFx0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLXwtLS0tLS0tfFxcbiAxMDY6XFx0ICovXFxuIDEwNzpcXHQjZGVmaW5lIEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTA4OlxcdFxcdCgoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9leHRyYV9pc2l6ZSAhPSAwKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcdFxcXFxcXG4gMTA5OlxcdFxcdCAoRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICsgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9leHRyYV9pc2l6ZSArXFx0XFxcXFxcbiAxMTA6XFx0XFx0ICBzaXplb2Yoc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyKSArIEVYVDRfWEFUVFJfUEFEIFxcdTAwM2M9XFx0XFxcXFxcbiAxMTE6XFx0XFx0ICBFWFQ0X0lOT0RFX1NJWkUoKGlub2RlKS1cXHUwMDNlaV9zYikpKVxcbiAxMTI6XFx0XFxuIDExMzpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIHtcXG4gMTE0OlxcdFxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuIDExNTpcXHRcXHRjb25zdCB2b2lkICp2YWx1ZTtcXG4gMTE2OlxcdFxcdHNpemVfdCB2YWx1ZV9sZW47XFxuIDExNzpcXHRcXHRpbnQgbmFtZV9pbmRleDtcXG4gMTE4OlxcdFxcdGludCBpbl9pbm9kZTtcXG4gMTE5OlxcdH07XFxuIDEyMDpcXHRcXG4gMTIxOlxcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCB7XFxuIDEyMjpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3Q7XFxuIDEyMzpcXHRcXHR2b2lkICpiYXNlO1xcbiAxMjQ6XFx0XFx0dm9pZCAqZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODoxNi43MDcxOTQxOTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE0NjUzOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgQ2FsbCBTaXRlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIEVzc2VudGlhbGx5LCBJJ20gdHJhY2luZyB0aGUgZnVuY3Rpb24ncyB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGV4dDQgZmlsZXN5c3RlbSdzIGlubGluZSBkYXRhIGhhbmRsaW5nLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhbmQgZWRnZSBjYXNlcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgcm91dGluZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGFueSBwb3RlbnRpYWwgcmlza3Mgb3IgaW1wcm92ZW1lbnRzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MTguMzIxODUwNjQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzc2OD1leHRlcm4gaW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaDozNzY5OmV4dGVybiBpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzcwLWV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDItICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxNDM6aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTE0NC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTQwNj1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00MjQtXFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo0MjU6XFx0KHZvaWQpIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvaW5saW5lLmMtNDI2LVxcdGlmIChlaS1cXHUwMDNlaV9pbmxpbmVfb2ZmKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz03OTM9aW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtODMyLVxcdFxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6ODMzOlxcdFxcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTgzNC1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MTk4PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfaWdldF9leHRyYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUyMTQtXFx0XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xcbmZzL2V4dDQvaW5vZGUuYzo1MjE1OlxcdFxcdGVyciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy01MjE2LVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNjMzPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNzc2LVxcdFxcdGlmICghaXNfYmxvY2sgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuZnMvZXh0NC94YXR0ci5jOjE3Nzc6XFx0XFx0XFx0cmV0ID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTE3NzgtXFx0XFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI3NjU9aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjg1Ny1cXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYzoyODU4OlxcdFxcdGVycm9yID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTI4NTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjE4LjM2NzU3NjUxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc4Mjc1NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipLY29uZmlnIFJldmlldyBmb3IgZXh0NCBJbmxpbmUgRGF0YSBhbmQgRXh0ZW5kZWQgQXR0cmlidXRlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBteSBkdWNrcyBpbiBhIHJvdyBmb3IgdGhlIGV4dDQgY2hhbmdlcyB3ZSdyZSBsb29raW5nIGF0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGlubGluZSBkYXRhIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBMZXQgbWUganVzdCBvcGVuIHVwIHRoZSBLY29uZmlnIGZpbGVzLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZC4gQXJlIHRoZXkgc2VwYXJhdGUgb3B0aW9ucz8gQXJlIHRoZXkgbmVzdGVkPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgbGlrZSBhIGdlbmVyYWwgXCJleHQ0IHN1cHBvcnRcIiBmbGFnIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiAqc2VlKiB0aGUgaW5saW5lIGRhdGEgb3IgeGF0dHIgb3B0aW9ucz8gV2hhdCBhYm91dCBkZWZhdWx0IHZhbHVlcz8gQXJlIHRoZXkgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBkbyBJIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgdGhlbT8gVGhpcyBpcyBnb2luZyB0byBiZSBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgbWFraW5nIHN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVmbGVjdHMgdGhlIGRlc2lyZWQgYmVoYXZpb3IuIEkgYWxzbyBzaG91bGQgY29uc2lkZXIgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MjAuMTQ1ODU0NjE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC8ua3VuaXRjb25maWc9MT1DT05GSUdfS1VOSVQ9eVxcbmZzL2V4dDQvLmt1bml0Y29uZmlnOjI6Q09ORklHX0VYVDRfRlM9eVxcbmZzL2V4dDQvLmt1bml0Y29uZmlnLTMtQ09ORklHX0VYVDRfS1VOSVRfVEVTVFM9eVxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuZnMvZXh0NC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG5mcy9leHQ0L0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTM4LVxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbmZzL2V4dDQvS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctNDktXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5mcy9leHQ0L0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTU5LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz02OD1jb25maWcgRVhUNF9ERUJVR1xcbmZzL2V4dDQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbmZzL2V4dDQvS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctNzEtXFx0aGVscFxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTc3PWNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmZzL2V4dDQvS2NvbmZpZzo3OTpcXHRkZXBlbmRzIG9uIEVYVDRfRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVRcXG5mcy9leHQ0L0tjb25maWctODAtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtNS1cXG5mcy9leHQ0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0VYVDRfRlMpICs9IGV4dDQub1xcbmZzL2V4dDQvTWFrZWZpbGUtNy1cXG5mcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlOjE1OmV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuLS1cXG5mcy9leHQ0L2FjbC5oPTM5PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfYWNsX2NvdW50KHNpemVfdCBzaXplKVxcbi0tXFxuZnMvZXh0NC9hY2wuaC01NC1cXG5mcy9leHQ0L2FjbC5oOjU1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L2FjbC5oLTU2LVxcbi0tXFxuZnMvZXh0NC9hY2wuaD02MT1leHRlcm4gaW50IGV4dDRfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTtcXG5mcy9leHQ0L2FjbC5oLTYyLVxcbmZzL2V4dDQvYWNsLmg6NjM6I2Vsc2UgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xcbmZzL2V4dDQvYWNsLmgtNjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLS1cXG5mcy9leHQ0L2FjbC5oPTY5PWV4dDRfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpXFxuLS1cXG5mcy9leHQ0L2FjbC5oLTcyLX1cXG5mcy9leHQ0L2FjbC5oOjczOiNlbmRpZiAgLyogQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMICovXFxuZnMvZXh0NC9hY2wuaC03NC1cXG4tLVxcbmZzL2V4dDQvZnNtYXAuaC02LSAqL1xcbmZzL2V4dDQvZnNtYXAuaDo3OiNpZm5kZWYgX19FWFQ0X0ZTTUFQX0hfX1xcbmZzL2V4dDQvZnNtYXAuaDo4OiNkZWZpbmVcXHRfX0VYVDRfRlNNQVBfSF9fXFxuZnMvZXh0NC9mc21hcC5oLTktXFxuLS1cXG5mcy9leHQ0L2ZzbWFwLmg9Mzk9aW50IGV4dDRfZ2V0ZnNtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfZnNtYXBfaGVhZCAqaGVhZCxcXG4tLVxcbmZzL2V4dDQvZnNtYXAuaC01NS1cXG5mcy9leHQ0L2ZzbWFwLmg6NTY6I2VuZGlmIC8qIF9fRVhUNF9GU01BUF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9ODc2PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy04ODAtXFx0aW50IG5ibG9ja3MgPSAwO1xcbmZzL2V4dDQvaWFsbG9jLmM6ODgxOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L2lhbGxvYy5jLTg4Mi1cXHRzdHJ1Y3QgcG9zaXhfYWNsICpwID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTM4LVxcdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jOjE5Mzk6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvc3VwZXIuYy0xOTQwLVxcdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ0MDQ9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NDE5LVxcdHNldF9vcHQoc2IsIFhBVFRSX1VTRVIpO1xcbmZzL2V4dDQvc3VwZXIuYzo0NDIwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L3N1cGVyLmMtNDQyMS1cXHRzZXRfb3B0KHNiLCBQT1NJWF9BQ0wpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcl9tYXBbXSA9IHtcXG5mcy9leHQ0L3hhdHRyLmMtODktXFx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cXHRcXHQgICAgID0gXFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzo5MDojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC94YXR0ci5jLTkxLVxcdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2VzcyxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05NC1cXHRbRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVEXVxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjk1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuYy05Ni1cXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cXHQgICAgID0gXFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMDE9Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVxcdFxcdTAwMjZleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuYy0xMDUtXFx0XFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD0yMDg9X194YXR0cl9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcixcXG4tLVxcbmZzL2V4dDQveGF0dHIuaC0yMTMtXFxuZnMvZXh0NC94YXR0ci5oOjIxNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L3hhdHRyLmgtMjE1LWV4dGVybiBpbnQgZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjIwLjE5MTY5NzQzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODY2MTY2ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gRGVwZW5kZW5jaWVzIG9mIGBpbmxpbmUuY2Agd2l0aGluIGV4dDQqKlxuXG5SaWdodCwgc28gYGlubGluZS5jYCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBzZWVtcyB0byBiZSBjb250aW5nZW50IG9uIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbi4gU3BlY2lmaWNhbGx5LCBgQ09ORklHX0VYVDRfRlNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLCBzbyBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbiBgZnMvZXh0NC9NYWtlZmlsZWAuIEkgd2lsbCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlIGlzIGluZGVlZCBoYW5kbGVkIGluIHRoYXQgYE1ha2VmaWxlYCwgYW5kIGFsc28gdW5kZXIgdGhhdCBjb25maWd1cmF0aW9uIGNvbnN0cmFpbnQuIExvb2tpbmcgYXQgbGluZXMgOC0xNSB0aGVyZSBzaG91bGQgZ2l2ZSBtZSBhbGwgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MjQuMDU3ODY2Njk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggZXh0NC1maWxlc3lzdGVtIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfRVhUNF9GUykgKz0gZXh0NC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbiAgMTY6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG4gIDE3OlxcdGV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXHRcXHQrPSBleHQ0LXRlc3Qub1xcbiAgMjA6XFx0ZXh0NC0kKENPTkZJR19GU19WRVJJVFkpXFx0XFx0Kz0gdmVyaXR5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MjQuMDU3OTI2ODk5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MjE2MTA4Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBJbmxpbmUgRGF0YSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gSW5pdGlhbGx5LCBpdCBqdXN0IGNoZWNrZWQgaWYgYGlfZXh0cmFfaXNpemVgIHdhcyB6ZXJvLCBidXQgbm93IGl0IHVzZXMgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgbmV3IGNoZWNrIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBhZGRzIGEgYm91bmRzIGNoZWNrLCBlbnN1cmluZyB0aGF0IHRoZSBgaV9leHRyYV9pc2l6ZWAgdmFsdWUsIGFsb25nIHdpdGggdGhlIGlubGluZSB4YXR0ciBoZWFkZXIsIGRvZXNuJ3QgZXhjZWVkIHRoZSBpbm9kZSdzIHNpemUgb24gZGlzay4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb3IgY3Jhc2hlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb3JydXB0ZWQgb3IgY3JhZnRlZCBmaWxlIHN5c3RlbXMgd2hlcmUgYGlfZXh0cmFfaXNpemVgIG1pZ2h0IGJlIG1hbGljaW91cy4gVGhlIG9sZCBjb2RlIGp1c3QgYmxpdGhlbHkgcHJvY2VlZGVkIHRvIGxvb2sgZm9yIHhhdHRycyBpbiBpYm9keSByZWdhcmRsZXNzLCB3aGljaCBpcyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLlxuXG5UaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZGlyZWN0bHkgaW1wYWN0cyBpbmxpbmUgZGF0YSBhbmQgeGF0dHIgcHJvY2Vzc2luZyBpbiBFeHQ0LiBUaGUgYXJlYXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYXJlIGlub2RlIGxvb2t1cHMsIGBleHQ0X2lnZXRgLCBpbmxpbmUgZGF0YSB3cml0ZXMsIGV4dGVuZGluZyBgaV9leHRyYV9pc2l6ZWAsIGFuZCBldmVuIG1vdW50aW5nIGNyYWZ0ZWQgZXh0NCBpbWFnZXMuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlIHRocm91Z2ggZnV6emluZyB3aXRoIFN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgaXMgcGVyZmVjdCBmb3IgdGhpcywgYWN0aXZlbHkgZnV6emluZyBmaWxlc3lzdGVtIHN5c2NhbGxzIGFuZCBtb3VudGluZyBjcmFmdGVkIGltYWdlcyB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgIGFuZCBsb29wIGRldmljZXMsIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCBleHQ0LiBFeHQ0IGlzIGEgY29yZSBjb21wb25lbnQsIHNvIHRoaXMgY2hhbmdlIGhhcyBzb21lIGhlZnQuXG5cbkxldCdzIHRoaW5rIHRocm91Z2ggdGhlIGZ1enppbmcgaW1wbGljYXRpb25zLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IHRydWUgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgaW1wb3J0YW50IGFuZCByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYyBpbiBgZnMvZXh0NC9pbmxpbmUuY2AuIE5leHQsIHdlIGhhdmUgYEZvY3VzU3ltYm9sc2AuIEkgdGhpbmsgd2Ugc2hvdWxkIGtlZXAgaXQgY29uY2lzZSBhbmQgZm9jdXNlZCBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gYW5kIGl0cyBkaXJlY3QgY2FsbGVycyB0aGF0IGFsc28gZGVhbCB3aXRoIGlubGluZSBkYXRhLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLCB3aGljaCBpcyAqbm9uLXN0YXRpYyosIGFuZCAqbm90KiB1YmlxdWl0b3VzLCBhbmQgaXQgaXMgKnRoZSogc3ltYm9sIG1vZGlmaWVkIGluIHRoZSBwYXRjaC4gV2UgY2FuIGFsc28gaW5jbHVkZSBgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhYCwgYGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kYCwgYW5kIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgYXMgdGhleSBhbHNvIGRlYWwgd2l0aCBpbmxpbmUgZGF0YS5cblxuRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGBFWFQ0X0ZTYCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5BIHF1aWNrIGRvdWJsZS1jaGVjazpcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJFWFQ0X0ZTXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja1wiLCBcImV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YVwiLCBcImV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kXCIsIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIl1gXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWVcbiogICBSZWFzb25pbmc6IGNvbmNpc2UgYW5kIGFjY3VyYXRlLlxuXG5BbHJpZ2h0LCBzZWVtcyBzb2xpZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyMiwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODozOC4yNzQwMzcyNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE2NjA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tcIixcbiAgICBcImV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tcIixcbiAgICBcImV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3VuZHMgY2hlY2tpbmcgaW4gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpIGJ5IGVuc3VyaW5nIHRoZSBpbm9kZSBoYXMgc3VmZmljaWVudCBzcGFjZSBmb3IgaW5saW5lIHhhdHRyIGRhdGEgKEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKSByYXRoZXIgdGhhbiBvbmx5IGNoZWNraW5nIHdoZXRoZXIgaV9leHRyYV9pc2l6ZSBpcyBub24temVyby4gVGhpcyBhZmZlY3RzIGV4dDQgaW5vZGUgcmVhZGluZyBhbmQgaW5saW5lIGRhdGEgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBtb3VudGluZyBvZiBjcmFmdGVkIGltYWdlcyBpbiBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjM4LjM1MjIxMDQ1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNTY0NzkxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODozOC4zNTI2NzI5NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzE1NjAxMjIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGNoZWNrIGBFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2V4dHJhX2lzaXplID09IDBgIHdpdGggYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jaygpYCByZXR1cm5zIGVhcmx5ICh3aXRoIDApIGlmIHRoZSBpbm9kZSBzaXplIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGUgZXh0cmEgaXNpemUsIHhhdHRyIGhlYWRlciwgYW5kIHBhZGRpbmcuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIGxvY2FsIHN0cnVjdHVyZXMgKGUuZy4gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgKSBhcmUgZnVsbHkgb3IgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB0aWdodGVuZWQgYm91bmRzIHZhbGlkYXRpb24gcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnZhbGlkIGxheW91dCB0cmF2ZXJzYWwgd2hlbiBwYXJzaW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggaXMgcHJvcGVybHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIHNhbml0aXplcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBmb3IgdGhpcyBjaGFuZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODgwOTViNTAyNTE0ZWY0OGY2NTE0NWE4Mzc3Mjg0NWYzMTNkMDQzYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDAzOjQ4OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IGNlZWU2OWE2NjQ4MmIuLjlmNmE0ZDEzYjlhYmMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTUxLDcgKzE1MSw3IEBAIGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9O1xuIFx0aW50IGVycm9yO1xuIFxuLVx0aWYgKEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSA9PSAwKVxuK1x0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6MzguMzUyNjczNzAyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwOTg3OTc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFWFQ0IElubGluZSBEYXRhIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYGZzL2V4dDQvaW5saW5lLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbi4gVGhlIGRpZmYgaGlnaGxpZ2h0cyBhIGNvbmRpdGlvbmFsIGNoYW5nZTogdGhlIG9yaWdpbmFsIGNoZWNrIGZvciBgaV9leHRyYV9pc2l6ZSA9PSAwYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgY2hlY2sgZm9yIGAhRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBpbmxpbmUgZGF0YSBpcyBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyDigJMgbGlrZWx5IGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB1c2FnZXMgb2YgYm90aCBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgYW5kIHRoZSBtYWNybyBgRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFYCBhY3R1YWxseSBzaWduaWZpZXMuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGNoYW5nZSBhaW1zIHRvIGludGVncmF0ZSBYQVRUUiBoYW5kbGluZyBtb3JlIGRpcmVjdGx5IHdpdGggaW5saW5lIGRhdGEgbWFuYWdlbWVudCwgcGVyaGFwcyB0byBvcHRpbWl6ZSBzcGFjZSBhbGxvY2F0aW9uIG9yIGltcHJvdmUgY29uc2lzdGVuY3kuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGluZ3MgbW9yZSByb2J1c3Qgb3IgY2xlYXIuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQsIk91dHB1dFRva2VucyI6NjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo0Mi40NTE0NzkxODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjQ0Mzg5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbmxpbmUuYz0zNT1zdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDMtXFxuZnMvZXh0NC9pbmxpbmUuYzo0NDpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jLTQ1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTUzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTU0OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTU1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIwNC1cXG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcXHRpZiAoRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpICBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYy01MjA2LVxcdCAgICAqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMjMwPWludCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjM2LVxcbmZzL2V4dDQveGF0dHIuYzoyMjM3OlxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYy0yMjM4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIyNTY9aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjI2NC1cXG5mcy9leHQ0L3hhdHRyLmM6MjI2NTpcXHRpZiAoIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtMjI2Ni1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD00Mz1zdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmgtMTA2LSAqL1xcbmZzL2V4dDQveGF0dHIuaDoxMDc6I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcXHRcXHRcXHRcXHRcXFxcXFxuZnMvZXh0NC94YXR0ci5oLTEwOC1cXHQoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgIT0gMCkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjQ0LjQxNTkyMjkyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0ICogY3VycmVudGx5IG9ubHkgdXNlZCBpbiBhIGNvZGUgcGF0aCBjb21pbmcgZm9ybSBleHQ0X2lnZXQsIGJlZm9yZVxcbiAxNDE6XFx0ICogdGhlIG5ldyBpbm9kZSBoYXMgYmVlbiB1bmxvY2tlZFxcbiAxNDI6XFx0ICovXFxuIDE0MzpcXHRpbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiAxNDQ6XFx0e1xcbiAxNDU6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcXG4gMTQ2OlxcdFxcdFxcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXFxuIDE0NzpcXHRcXHR9O1xcbiAxNDg6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xcbiAxNDk6XFx0XFx0XFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcXG4gMTUwOlxcdFxcdFxcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcXG4gMTUxOlxcdFxcdH07XFxuIDE1MjpcXHRcXHRpbnQgZXJyb3I7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKVxcbiAxNTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdFxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuIDE1ODpcXHRcXHRpZiAoZXJyb3IpXFxuIDE1OTpcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4gMTYyOlxcdFxcdGlmIChlcnJvcilcXG4gMTYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRpZiAoIWlzLnMubm90X2ZvdW5kKSB7XFxuIDE2NjpcXHRcXHRcXHRpZiAoaXMucy5oZXJlLVxcdTAwM2VlX3ZhbHVlX2ludW0pIHtcXG4gMTY3OlxcdFxcdFxcdFxcdEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIFxcXCJpbmxpbmUgZGF0YSB4YXR0ciByZWZlcnMgXFxcIlxcbiAxNjg6XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJ0byBhbiBleHRlcm5hbCB4YXR0ciBpbm9kZVxcXCIpO1xcbiAxNjk6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZTQ09SUlVQVEVEO1xcbiAxNzA6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE3MTpcXHRcXHRcXHR9XFxuIDE3MjpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYgPSAodTE2KSgodm9pZCAqKWlzLnMuaGVyZSAtXFxuIDE3MzpcXHRcXHRcXHRcXHRcXHRcXHQodm9pZCAqKWV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKSk7XFxuIDE3NDpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSArXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIDE3NjpcXHRcXHR9XFxuIDE3NzpcXHRvdXQ6XFxuIDE3ODpcXHRcXHRicmVsc2UoaXMuaWxvYy5iaCk7XFxuIDE3OTpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDE4MDpcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcXG4gMTgzOlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuLFxcbiAxODQ6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuIDE4NTpcXHR7XFxuIDE4NjpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjtcXG4gMTg4OlxcdFxcdGludCBjcF9sZW4gPSAwO1xcbiAxODk6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0aWYgKCFsZW4pXFxuIDE5MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0QlVHX09OKGxlbiBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUpO1xcbiAxOTU6XFx0XFxuIDE5NjpcXHRcXHRjcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKGlsb2MpO1xcbiAxOTk6XFx0XFx0bWVtY3B5KGJ1ZmZlciwgKHZvaWQgKikocmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrKSwgY3BfbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NDQuNDE2MTY1Njg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTY5MTc5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRVhUNCBJbm9kZSdzIEV4dGVuZGVkIEF0dHJpYnV0ZSBTcGFjZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBFWFQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBhbmQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgbWFjcm8gYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIEkga25vdyBpdCdzIHByb2JhYmx5IGRlZmluZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGhlYWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gaW5vZGUgaGFzIHNwYWNlIGFsbG9jYXRlZCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIGZvciBob3cgeGF0dHJzIGFyZSBtYW5hZ2VkIG9uIGRpc2sgYW5kIGluIG1lbW9yeSwgc28gZ2V0dGluZyBhIHNvbGlkIGdyaXAgb24gdGhpcyBtYWNybyBpcyBlc3NlbnRpYWwuIEknbSBhc3N1bWluZyBpdCBpbnZvbHZlcyBjaGVja2luZyBzb21lIGJpdHMgd2l0aGluIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgb3IgbWF5YmUgZXhhbWluaW5nIHNvbWUgcmVsYXRlZCBtZXRhZGF0YS4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1hY3JvJ3MgZGVmaW5pdGlvbiBoYXMgdG8gcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NDYuNDczMDg1NjI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L3hhdHRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdC8qXFxuIDEwMTpcXHQgKiBJZiB3ZSB3YW50IHRvIGFkZCBhbiB4YXR0ciB0byB0aGUgaW5vZGUsIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdFxcbiAxMDI6XFx0ICogaV9leHRyYV9pc2l6ZSBpcyBub3QgMCBhbmQgdGhhdCB0aGUgaW5vZGUgc2l6ZSBpcyBub3QgbGVzcyB0aGFuXFxuIDEwMzpcXHQgKiBFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgKyBleHRyYV9pc2l6ZSArIHBhZC5cXG4gMTA0OlxcdCAqICAgRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFICAgZXh0cmFfaXNpemUgaGVhZGVyICAgZW50cnkgICBwYWQgIGRhdGFcXG4gMTA1OlxcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS18LS0tLS0tLXxcXG4gMTA2OlxcdCAqL1xcbiAxMDc6XFx0I2RlZmluZSBFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlcXHRcXHRcXHRcXHRcXFxcXFxuIDEwODpcXHRcXHQoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgIT0gMCkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHRcXFxcXFxuIDEwOTpcXHRcXHQgKEVYVDRfR09PRF9PTERfSU5PREVfU0laRSArIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgK1xcdFxcXFxcXG4gMTEwOlxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlcikgKyBFWFQ0X1hBVFRSX1BBRCBcXHUwMDNjPVxcdFxcXFxcXG4gMTExOlxcdFxcdCAgRVhUNF9JTk9ERV9TSVpFKChpbm9kZSktXFx1MDAzZWlfc2IpKSlcXG4gMTEyOlxcdFxcbiAxMTM6XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyB7XFxuIDExNDpcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbiAxMTU6XFx0XFx0Y29uc3Qgdm9pZCAqdmFsdWU7XFxuIDExNjpcXHRcXHRzaXplX3QgdmFsdWVfbGVuO1xcbiAxMTc6XFx0XFx0aW50IG5hbWVfaW5kZXg7XFxuIDExODpcXHRcXHRpbnQgaW5faW5vZGU7XFxuIDExOTpcXHR9O1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2gge1xcbiAxMjI6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0O1xcbiAxMjM6XFx0XFx0dm9pZCAqYmFzZTtcXG4gMTI0OlxcdFxcdHZvaWQgKmVuZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NDYuNDczMjAwODA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTgyMjAxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCBDYWxsIFNpdGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4gRXNzZW50aWFsbHksIEknbSB0cmFjaW5nIHRoZSBmdW5jdGlvbidzIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtJ3MgaW5saW5lIGRhdGEgaGFuZGxpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyByb3V0aW5lLiBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gaW5mZXIgYW55IHBvdGVudGlhbCByaXNrcyBvciBpbXByb3ZlbWVudHMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo0OC4xOTE0MjM5ODlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjIzOTA1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zNzY4PWV4dGVybiBpbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oOjM3Njk6ZXh0ZXJuIGludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTM3NzAtZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExMD1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE0Mi0gKi9cXG5mcy9leHQ0L2lubGluZS5jOjE0MzppbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NDA2PXN0YXRpYyBpbnQgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTQyNC1cXHQgKi9cXG5mcy9leHQ0L2lubGluZS5jOjQyNTpcXHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy00MjYtXFx0aWYgKGVpLVxcdTAwM2VpX2lubGluZV9vZmYpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy04MzItXFx0XFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo4MzM6XFx0XFx0KHZvaWQpIGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvaW5saW5lLmMtODM0LVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTg9c3RhdGljIGlubGluZSBpbnQgZXh0NF9pZ2V0X2V4dHJhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIxNC1cXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuZnMvZXh0NC9pbm9kZS5jOjUyMTU6XFx0XFx0ZXJyID0gZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTUyMTYtXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE2MzM9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE3NzYtXFx0XFx0aWYgKCFpc19ibG9jayBcXHUwMDI2XFx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTc3NzpcXHRcXHRcXHRyZXQgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTc3OC1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjc2NT1pbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yODU3LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuZnMvZXh0NC94YXR0ci5jOjI4NTg6XFx0XFx0ZXJyb3IgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjg1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NTAuMjEzODE5NDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM2MjcxNzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIEZ1bmN0aW9uJ3MgRXZvbHV0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9ja2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYmVlbiBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhIHdpdGhpbiBleHQ0IGlub2Rlcy4gUHJldmlvdXNseSwgdGhlIGNoZWNrIHdhcyBpbmNyZWRpYmx5IHNpbXBsZTogYGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMCkgcmV0dXJuIDA7YC4gRXNzZW50aWFsbHksIFwiaWYgYGlfZXh0cmFfaXNpemVgIGlzIHplcm8sIHdlJ3JlIGRvbmU7IHRoZXJlJ3Mgbm8gaW5saW5lIGRhdGEgdG8gZmluZC5cIiBCdXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBhdHRyaWJ1dGVzLCBsaWtlIGBleHQ0X3hhdHRyX2lib2R5X2ZpbmRgIG9yIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIGhhZCB0aGUgbW9yZSByb2J1c3QgY2hlY2sgb2YgYGlmICghRVhUNF9JTk9ERV9IQVNfWEFUVFJfU1BBQ0UoaW5vZGUpKWAsIHdoaWNoIGlzIGNsZWFybHkgbW9yZSBjb21wcmVoZW5zaXZlLlxuXG5Ob3csIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYCB3YXNuJ3QgYmVoYXZpbmcgaWRlYWxseS4gSXQgY29udGludWVkIHByb2Nlc3NpbmcgKmV2ZW4gaWYqIGBpX2V4dHJhX2lzaXplYCB3YXMgKm5vbi16ZXJvKiwgYnV0IGEgc3Vic2VxdWVudCBzaXplIGNoZWNrIGZhaWxlZDogYEVYVDRfR09PRF9PTERfSU5PREVfU0laRSArIEVYVDRfSShpbm9kZSktXHUwMDNlaV9leHRyYV9pc2l6ZSArIHNpemVvZihzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIpICsgRVhUNF9YQVRUUl9QQUQgXHUwMDNlIEVYVDRfSU5PREVfU0laRSgoaW5vZGUpLVx1MDAzZWlfc2IpYC4gIFRoaXMgdHJpZ2dlcmVkIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGl0IHByb2JhYmx5IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGluZyBpbiB0aGF0IHNjZW5hcmlvLCBuYW1lbHkgYGV4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGBleHQ0X3hhdHRyX2lib2R5X2ZpbmRgLiBJJ2xsIHdhbnQgdG8gaW52ZXN0aWdhdGUgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYnVpbHQgaW50byB0aG9zZSBjYWxscywgYW5kIHdoeSBpdCdzIGJlbmVmaWNpYWwgdG8gcHJldmVudCB0aGVtIGZyb20gZXhlY3V0aW5nIGluIHRoaXMgY2FzZS5cblxuTmV4dCBzdGVwOiBkaXZlIGludG8gdGhhdCBgZXh0NF94YXR0cl9pYm9keV9maW5kYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgaW5zaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAzOjQ4OjUzLjU3NjUzOTg5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzA6XFx0aW50IGV4dDRfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbjIyMzE6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kICppcylcXG4yMjMyOlxcdHtcXG4yMjMzOlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyO1xcbjIyMzQ6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4yMjM1OlxcdFxcdGludCBlcnJvcjtcXG4yMjM2OlxcdFxcbjIyMzc6XFx0XFx0aWYgKCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSkpXFxuMjIzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjM5OlxcdFxcbjIyNDA6XFx0XFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLVxcdTAwM2VpbG9jKTtcXG4yMjQxOlxcdFxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuMjI0MjpcXHRcXHRpcy1cXHUwMDNlcy5iYXNlID0gaXMtXFx1MDAzZXMuZmlyc3QgPSBJRklSU1QoaGVhZGVyKTtcXG4yMjQzOlxcdFxcdGlzLVxcdTAwM2VzLmhlcmUgPSBpcy1cXHUwMDNlcy5maXJzdDtcXG4yMjQ0OlxcdFxcdGlzLVxcdTAwM2VzLmVuZCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xcbjIyNDU6XFx0XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcXG4yMjQ2OlxcdFxcdFxcdC8qIEZpbmQgdGhlIG5hbWVkIGF0dHJpYnV0ZS4gKi9cXG4yMjQ3OlxcdFxcdFxcdGVycm9yID0geGF0dHJfZmluZF9lbnRyeShpbm9kZSwgXFx1MDAyNmlzLVxcdTAwM2VzLmhlcmUsIGlzLVxcdTAwM2VzLmVuZCxcXG4yMjQ4OlxcdFxcdFxcdFxcdFxcdFxcdCBpLVxcdTAwM2VuYW1lX2luZGV4LCBpLVxcdTAwM2VuYW1lLCAwKTtcXG4yMjQ5OlxcdFxcdFxcdGlmIChlcnJvciBcXHUwMDI2XFx1MDAyNiBlcnJvciAhPSAtRU5PREFUQSlcXG4yMjUwOlxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4yMjUxOlxcdFxcdFxcdGlzLVxcdTAwM2VzLm5vdF9mb3VuZCA9IGVycm9yO1xcbjIyNTI6XFx0XFx0fVxcbjIyNTM6XFx0XFx0cmV0dXJuIDA7XFxuMjI1NDpcXHR9XFxuMjI1NTpcXHRcXG4yMjU2OlxcdGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjIyNTc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4yMjU4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgKmlzKVxcbjIyNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo1My41NzY2NzE1OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM0NzI5MTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJlZHVuZGFuY3kgaW4gZXh0NCBYYXR0ciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGV4dDRfeGF0dHJfaWJvZHlfZmluZGAsIGFuZCBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYCFFWFQ0X0lOT0RFX0hBU19YQVRUUl9TUEFDRShpbm9kZSlgIGlzIHRydWUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgd2l0aG91dCB0b3VjaGluZyBgaXMtXHUwMDNlcy5iYXNlYCwgYGlzLVx1MDAzZXMuaGVyZWAsIG9yIGBpcy1cdTAwM2VzLm5vdF9mb3VuZGAuIFRoYXQgc2VlbXMuLi5vZGQuIE5vdywgSSBzZWUgdGhpcyBiZWluZyB1c2VkIGluIGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGhleSBpbml0aWFsaXplIGBpcy5zLm5vdF9mb3VuZGAgdG8gYC1FTk9EQVRBYCByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiwgdGhlIGNvZGUgY2FsbHMgYGV4dDRfeGF0dHJfaWJvZHlfZmluZGAuIEJ1dCwgaWYgYGVycm9yYCBpcyBub3Qgc2V0LCB0aGVuIHRoZSBjaGVjayBpcyBgIWlzLnMubm90X2ZvdW5kYCB3aGljaCBzaG91bGQgYmUgZmFsc2UsIHNpbmNlIGl0IHdhcyBpbml0aWFsaXplZCB0byBgLUVOT0RBVEFgLiBTbyBiYXNpY2FsbHksIGl0J3MgaW1tZWRpYXRlbHkganVtcGluZyB0byBgYnJlbHNlKGlzLmlsb2MuYmgpYCBhbmQgcmV0dXJuaW5nIDAsIHdoaWNoIHNlZW1zIGxpa2UgYSBudWxsIG9wZXJhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGF0IHNpbmNlIHRoZSBjaGVjayBgIWlzLnMubm90X2ZvdW5kYCBpcyBlcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIGBlcnJvcmAgaXMgMC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSBpcyB0aGlzIGhhcHBlbmluZz8gSXMgYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgIGRvaW5nIHNvbWUgdXNlbGVzcyB3b3JrIGJ5IHJlYWRpbmcgdGhlIGlub2RlIGxvY2F0aW9uLCB0aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmFpbCBlYXJseT8gUGVyaGFwcyBpdCdzIHRoZXJlIHRvIHByb3RlY3QgYWdhaW5zdCBzb21lIGluY29uc2lzdGVuY3kgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIHRoYXQgaXNuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoaXMgc25pcHBldC4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSBvZiB0aGlzLCB0byBnYWluIGNvbnRleHQsIGFuZCBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduLiBUbyBjbGFyaWZ5IHRoZSB3b3JrLCBJIG5lZWQgdG8ga25vdyB3aHkuXG5cbkknbSBnb2luZyB0byBkaWcgaW50byB0aGUgZ2l0IGxvZyBhbmQgaGlzdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIHNlYXJjaCBmb3IgY29tbWl0cyByZWxhdGVkIHRvIGBpbmxpbmUuY2AgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29kZS4gSSBuZWVkIHRvIGdldCB0aGUgXCJ3aHlcIiBiZWZvcmUgSSBjYW4gc2F5IGlmIHRoaXMgaXMgYSBidWcgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDg6NTguOTIzOTY1NTg0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyNzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM3Njg9ZXh0ZXJuIGludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0Lmg6Mzc2OTpleHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc3MC1leHRlcm4gaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTEwPWludCBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQyLSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQzOmludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDQte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz00MDY9c3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDI0LVxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NDI1OlxcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTQyNi1cXHRpZiAoZWktXFx1MDAzZWlfaW5saW5lX29mZilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NzkzPWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTgzMi1cXHRcXHQgKi9cXG5mcy9leHQ0L2lubGluZS5jOjgzMzpcXHRcXHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy04MzQtXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTE5OD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MjE0LVxcdFxcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcXG5mcy9leHQ0L2lub2RlLmM6NTIxNTpcXHRcXHRlcnIgPSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNTIxNi1cXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTYzMz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTc3Ni1cXHRcXHRpZiAoIWlzX2Jsb2NrIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xcbmZzL2V4dDQveGF0dHIuYzoxNzc3OlxcdFxcdFxcdHJldCA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNzc4LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNzY1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4NTctXFx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmM6Mjg1ODpcXHRcXHRlcnJvciA9IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yODU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMzo0ODo1OC45NzEzOTc1MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUzNzI2OTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElubGluZSBEYXRhIENoZWNrIGluIGV4dDQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2tgLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmRpdGlvbiBmb3IgYW4gZWFybHkgZXhpdC4gUHJldmlvdXNseSwgd2UgY2hlY2tlZCBpZiBgaV9leHRyYV9pc2l6ZWAgd2FzIHplcm8uIE5vdywgd2UncmUgdXNpbmcgYEVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAuIFRoaXMgbWFjcm8gZG9lcyBhIG1vcmUgdGhvcm91Z2ggY2hlY2s6IGl0IG5vdCBvbmx5IHZlcmlmaWVzIGBpX2V4dHJhX2lzaXplYCBpc24ndCB6ZXJvIGJ1dCBhbHNvIGVuc3VyZXMgdGhlIGlub2RlIHNpemUgaGFzIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHhhdHRyIHNwYWNlLCBhY2NvdW50aW5nIGZvciB0aGUgaGVhZGVyIGFuZCBwYWRkaW5nLiBHb29kLCBhIG1vcmUgcm9idXN0IGNoZWNrIG92ZXJhbGwuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyBpdDpcblxuMS4gIEV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoaXMgY29kZSBkb2Vzbid0IHRvdWNoIGFueXRoaW5nIGV4cG9zZWQgdG8gdXNlcmxhbmQuXG4yLiAgRGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljPyBOby4gV2UgaGF2ZSBhIGxvY2FsIHN0cnVjdCwgYGlzYCwgd2hpY2ggaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLiBUaGUgZWFybHkgcmV0dXJuIGRvZXNuJ3QgbGVhayB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiAgSW52b2x2ZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLCBpdCBkZWFscyB3aXRoIGV4aXN0aW5nIGlub2RlIHN0cnVjdHVyZXMgd2l0aCBpbXByb3ZlZCBjaGVja3MuXG40LiAgQWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdGhyb3VnaCBib3VuZHMgY2hlY2tzPyBOby4gSXQgaW1wcm92ZXMgYm91bmRzIGNoZWNraW5nLCBpbiBmYWN0LCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5TbywgYmFzZWQgb24gdGhhdCBhbmFseXNpcywgdGhpcyBjaGFuZ2UgZG9lc24ndCB0cmlnZ2VyIGFueSBLTVNBTiBjb25jZXJucy4gSXQncyB0aWdodGVuaW5nIGFuIGV4aXN0aW5nIGNoZWNrLCBlbnN1cmluZyB3ZSBkb24ndCBwcm9jZWVkIHdpdGggc2VhcmNoaW5nIGZvciBpbmxpbmUgZGF0YSB3aGVuIHRoZXJlJ3Mgbm8gdmFsaWQgeGF0dHIgc3BhY2UuIEluIGVzc2VuY2UsIGl0J3MgYSBzYW5pdHkgY2hlY2sgb24gaW5vZGUgbGF5b3V0IGNvbnNpc3RlbmN5LlxuXG5UaGlzIGNoYW5nZSBkb2VzIGJvbHN0ZXIgS0FTQU4ncyByb2xlLCBhY3R1YWxseS4gQnkgYmV0dGVyIHZhbGlkYXRpbmcgdGhlIGlub2RlJ3MgaW50ZXJuYWwgbGF5b3V0LCBpdCByZWR1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gsIGFsb25nIHdpdGggdHlwaWNhbCBhc3NlcnRpb25zIGFuZCBVQiBzYW5pdGl6ZXJzLiBTbywgaXQncyBhIGdvb2QgdGhpbmcsIGEgZGVmZW5zaXZlIG1lYXN1cmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBMZXQncyBwcm9jZWVkIHdpdGggdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NCwiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDM6NDk6MDUuNTA4NjY5MjU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgY2hlY2sgYEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY29tcHV0YXRpb25zIGluIGEgd2F5IHRoYXQgcmVhZHMgdW5pbml0aWFsaXplZCBkYXRhLiBBbGwgbG9jYWwgc3RydWN0dXJlcyAoZS5nLiBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2ApIGFyZSBmdWxseSBvciBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGZvciB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyB0aGUgY2hlY2sgYEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXh0cmFfaXNpemUgPT0gMGAgd2l0aCBgIUVYVDRfSU5PREVfSEFTX1hBVFRSX1NQQUNFKGlub2RlKWAgaW4gYGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKClgIHJldHVybnMgZWFybHkgKHdpdGggMCkgaWYgdGhlIGlub2RlIHNpemUgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIGFjY29tbW9kYXRlIHRoZSBleHRyYSBpc2l6ZSwgeGF0dHIgaGVhZGVyLCBhbmQgcGFkZGluZy5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY29tcHV0YXRpb25zIGluIGEgd2F5IHRoYXQgcmVhZHMgdW5pbml0aWFsaXplZCBkYXRhLiBBbGwgbG9jYWwgc3RydWN0dXJlcyAoZS5nLiBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2ApIGFyZSBmdWxseSBvciBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHRpZ2h0ZW5lZCBib3VuZHMgdmFsaWRhdGlvbiBwcm90ZWN0cyBhZ2FpbnN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludmFsaWQgbGF5b3V0IHRyYXZlcnNhbCB3aGVuIHBhcnNpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBpcyBwcm9wZXJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcgc2FuaXRpemVycy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGZvciB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow72kxr[1] Phase: Succeeded StartedAt: 2026-09-10 03:49:16 +0000 UTC FinishedAt: 2026-09-10 03:49:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 03:49:16 +0000 UTC FinishedAt: 2026-09-10 03:49:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2] Phase: Succeeded StartedAt: 2026-09-10 03:49:16 +0000 UTC FinishedAt: 2026-09-10 07:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 03:49:16 +0000 UTC FinishedAt: 2026-09-10 07:29:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 03:49:16 +0000 UTC FinishedAt: 2026-09-10 03:49:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 03:49:16 +0000 UTC FinishedAt: 2026-09-10 03:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow72kxr/series-workflow72kxr-convert-artifact-2605274482/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 03:49:26 +0000 UTC FinishedAt: 2026-09-10 04:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 03:49:26 +0000 UTC FinishedAt: 2026-09-10 04:05:23 +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:*9b2bdbaa-b1a5-4176-95a4-e5d38f4044cf,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-workflow72kxr/series-workflow72kxr-convert-artifact-2605274482/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": "a75f2f77-a552-41b0-9cca-6b68a8e17bf9", "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-workflow72kxr/series-workflow72kxr-build-action-708500720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 03:49:26 +0000 UTC FinishedAt: 2026-09-10 04:05: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:*9b2bdbaa-b1a5-4176-95a4-e5d38f4044cf,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-workflow72kxr/series-workflow72kxr-convert-artifact-2605274482/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": "a75f2f77-a552-41b0-9cca-6b68a8e17bf9", "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-workflow72kxr/series-workflow72kxr-build-action-708500720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 04:05:23 +0000 UTC FinishedAt: 2026-09-10 04:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 04:05:23 +0000 UTC FinishedAt: 2026-09-10 04:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 04:05:23 +0000 UTC FinishedAt: 2026-09-10 04:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 04:05:23 +0000 UTC FinishedAt: 2026-09-10 04:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow72kxr/series-workflow72kxr-convert-artifact-2929232525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 04:05:33 +0000 UTC FinishedAt: 2026-09-10 04:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 04:05:33 +0000 UTC FinishedAt: 2026-09-10 04:07:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a75f2f77-a552-41b0-9cca-6b68a8e17bf9,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-workflow72kxr/series-workflow72kxr-build-action-708500720/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-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 04:07:55 +0000 UTC FinishedAt: 2026-09-10 04:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 04:07:55 +0000 UTC FinishedAt: 2026-09-10 04:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 04:07:55 +0000 UTC FinishedAt: 2026-09-10 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 04:07:55 +0000 UTC FinishedAt: 2026-09-10 04:25:22 +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:*9b2bdbaa-b1a5-4176-95a4-e5d38f4044cf,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-workflow72kxr/series-workflow72kxr-convert-artifact-2929232525/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": "5d119c7f-3fe1-42ed-8c77-3d96a6be3ec9", "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-workflow72kxr/series-workflow72kxr-build-action-1086920809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 04:07:55 +0000 UTC FinishedAt: 2026-09-10 04:25:12 +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:*9b2bdbaa-b1a5-4176-95a4-e5d38f4044cf,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-workflow72kxr/series-workflow72kxr-convert-artifact-2929232525/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": "5d119c7f-3fe1-42ed-8c77-3d96a6be3ec9", "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-workflow72kxr/series-workflow72kxr-build-action-1086920809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 04:25:22 +0000 UTC FinishedAt: 2026-09-10 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 04:25:22 +0000 UTC FinishedAt: 2026-09-10 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 04:25:22 +0000 UTC FinishedAt: 2026-09-10 04:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 04:25:22 +0000 UTC FinishedAt: 2026-09-10 04:27:00 +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:*5d119c7f-3fe1-42ed-8c77-3d96a6be3ec9,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-workflow72kxr/series-workflow72kxr-build-action-1086920809/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-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 07:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 07:29:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"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:*a75f2f77-a552-41b0-9cca-6b68a8e17bf9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d119c7f-3fe1-42ed-8c77-3d96a6be3ec9,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-workflow72kxr/series-workflow72kxr-build-action-708500720/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-workflow72kxr/series-workflow72kxr-build-action-1086920809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 04:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 04:27:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"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-workflow72kxr/series-workflow72kxr-convert-artifact-1628166002/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 04:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 04:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 04:27:10 +0000 UTC FinishedAt: 2026-09-10 04:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 04:27:20 +0000 UTC FinishedAt: 2026-09-10 07:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72kxr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_find_inline_data_nolock","ext4_prepare_inline_data","ext4_write_inline_data_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"08c88aa1-e03b-407e-b9b8-5c4aa66fb813","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 04:27:20 +0000 UTC FinishedAt: 2026-09-10 07:29:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a75f2f77-a552-41b0-9cca-6b68a8e17bf9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5d119c7f-3fe1-42ed-8c77-3d96a6be3ec9,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-workflow72kxr/series-workflow72kxr-build-action-708500720/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-workflow72kxr/series-workflow72kxr-build-action-1086920809/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-workflow72kxr/series-workflow72kxr-convert-artifact-1628166002/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,}