Name: series-workflow8tr52 Phase: Succeeded StartedAt: 2026-09-05 08:31:15 +0000 UTC FinishedAt: 2026-09-05 09:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[0] Phase: Succeeded StartedAt: 2026-09-05 08:31:15 +0000 UTC FinishedAt: 2026-09-05 08:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 08:31:15 +0000 UTC FinishedAt: 2026-09-05 08:34:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "series_id": "62239cdd-0901-45e4-ba20-e2ae8e212ee8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zap_vma_range_batched", "__hugetlb_zap_begin", "madvise_dontneed_single_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAmIzM5O2RldGFpbHMmIzM5OyB0byBodWdldGxiX3phcF9iZWdpbiBpbiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQpLiBUaGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC8gaHVnZXRsYiB1bm1hcHBpbmcgbG9naWMgYW5kIGRvZXMgbm90IGludm9sdmUgY29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciBhbHRlcmluZyBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIG92ZXIgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIE1NIG9wZXJhdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjb25maWdzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGVjNjNkZDYyMTJhYzUuLmIxYjM4MmQ1NTJjMzkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC0yMzA0LDcgJiM0MzsyMzA0LDcgQEAgdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4gXHRcdFx0XHRhZGRyZXNzLCBlbmQpO1xuLVx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiYjNDM7XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xuIFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDI5NzQ2YWUwZmUzMDNjYWJhMzUxNTIzZDRhNTYzMzM2YWY2ODQ3OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDg6MzM6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGVjNjNkZDYyMTJhYzUuLmIxYjM4MmQ1NTJjMzkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0yMzA0LDcgJiM0MzsyMzA0LDcgQEAgdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAogCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCiAJCQkJYWRkcmVzcywgZW5kKTsKLQlodWdldGxiX3phcF9iZWdpbih2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kKTsKJiM0MzsJaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCwgZGV0YWlscyk7CiAJdXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS0mZ3Q7dm1fbW0pOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZhbXA7cmFuZ2UpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGlmZmAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyB3aXRoaW4gdGhlIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGEgbmV3IGFyZ3VtZW50LCBsaWtlbHkgbmFtZWQgYGRldGFpbHNgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGludGVyZXN0aW5nLgoKTXkgcHJpbWFyeSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGFyZ3VtZW50IHdhcyBhZGRlZC4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBzb21lIG5ldyBmZWF0dXJlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBvciB2aXJ0dWFsIG1lbW9yeSBhcmVhcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhcmd1bWVudCB1c2VkIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb3IgcGVyZm9ybWFuY2UgY291bnRlcnM/IEkgbmVlZCB0byBzZWUgd2hhdCBgZGV0YWlsc2AgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlLgoKVG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgY29udGV4dC4gVGhpcyBzaW5nbGUgbGluZSBkaWZmZXJlbmNlIGlzbiYjMzk7dCBlbm91Z2guIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjb21taXQgbWVzc2FnZSwgYW5kIGlkZWFsbHksIHRoZSByZWxhdGVkIGlzc3VlcyBvciBkaXNjdXNzaW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBzaG93YCB0byB2aWV3IHRoZSBjb21taXQgaW4gaXRzIGVudGlyZXR5LCBvciBpZiB0aGVyZSYjMzk7cyBhIHdpZGVyIGltcGFjdCBJJiMzOTtsbCBoYXZlIHRvIHVzZSBncmVwcGVyIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBmaWxlIGFuZCBwcm9qZWN0LiBUaGVuIEkmIzM5O2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoaXMgY2hhbmdlIG1lYW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfemFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ5PWV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU2Olx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTctfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjMyMDpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMjEtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmM9NTI0NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTU0MDQtXG5tbS9odWdldGxiLmM6NTQwNTp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTQwNi1cdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5tbS9tZW1vcnkuYz0yMjU1PXZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG4tLVxubW0vbWVtb3J5LmMtMjI3MC1cbm1tL21lbW9yeS5jOjIyNzE6XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5tbS9tZW1vcnkuYy0yMjcyLVx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xuLS1cbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0yMzA2LVx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbm1tL21lbW9yeS5jOjIzMDc6XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjMwOC1cdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXHUwMDNldm1fbW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgbW0vbWVtb3J5LmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMzA0LiBUaGF0IHNob3VsZCBiZSB0aGUgYXJlYSBkZWFsaW5nIHdpdGggaHVnZSBwYWdlIGFsbG9jYXRpb24sIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgYmV0dGVyLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIGtlcm5lbCByZXF1ZXN0cywgbWFwcywgYW5kIG1hbmFnZXMgdGhlc2UgbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBhbmQgbWF5YmUgZXZlbiBzb21lIGRldGFpbHMgb24gZXJyb3IgaGFuZGxpbmcuCgpUbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiBsaW5lcyAyNDQtMjYwIGFuZCAzMTQtMzI1LiBUaGVzZSBsaW5lcyBsaWtlbHkgY29udGFpbiB0aGUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBIdWdlVExCIG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBpbmNsdWRlIGltcG9ydGFudCBzdHVmZiwgbGlrZSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBodWdlIHBhZ2VzIHRoZW1zZWx2ZXMsIHJlbGV2YW50IGZsYWdzLCBhbmQgcGVyaGFwcyBzb21lIGludGVybmFsIGRhdGEgdHlwZXMgdXNlZCB0byBtYW5hZ2UgdGhlbS4gTXkgZ29hbCBoZXJlIGlzIHRvIGVzdGFibGlzaCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhbmQgZGF0YSBtb2RlbHMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgaHVnZSBwYWdlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBiYXNpYyBpbnRlcmZhY2Ugb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjkwOlx0ICpcbjIyOTE6XHQgKiBJZiBAZGV0YWlscyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMuXG4yMjkyOlx0ICovXG4yMjkzOlx0dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbjIyOTQ6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbjIyOTU6XHRcdFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4yMjk2Olx0e1xuMjI5NzpcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICYjNDM7IHNpemU7XG4yMjk4Olx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMjI5OTpcdFxuMjMwMDpcdFx0Vk1fV0FSTl9PTl9PTkNFKCF0bGIgfHwgdGxiLVx1MDAzZW1tICE9IHZtYS1cdTAwM2V2bV9tbSk7XG4yMzAxOlx0XG4yMzAyOlx0XHRpZiAodW5saWtlbHkoIXNpemUpKVxuMjMwMzpcdFx0XHRyZXR1cm47XG4yMzA0Olx0XG4yMzA1Olx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuMjMwNjpcdFx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbjIzMDc6XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCwgZGV0YWlscyk7XG4yMzA4Olx0XHR1cGRhdGVfaGl3YXRlcl9yc3Modm1hLVx1MDAzZXZtX21tKTtcbjIzMDk6XHRcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbjIzMTA6XHRcdC8qXG4yMzExOlx0XHQgKiB1bm1hcCAmIzM5O2FkZHJlc3MtZW5kJiMzOTsgbm90ICYjMzk7cmFuZ2Uuc3RhcnQtcmFuZ2UuZW5kJiMzOTsgYXMgcmFuZ2VcbjIzMTI6XHRcdCAqIGNvdWxkIGhhdmUgYmVlbiBleHBhbmRlZCBmb3IgaHVnZXRsYiBwbWQgc2hhcmluZy5cbjIzMTM6XHRcdCAqL1xuMjMxNDpcdFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xuMjMxNTpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbjIzMTY6XHRcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkge1xuMjMxNzpcdFx0XHQvKlxuMjMxODpcdFx0XHQgKiBmbHVzaCB0bGIgYW5kIGZyZWUgcmVzb3VyY2VzIGJlZm9yZSBodWdldGxiX3phcF9lbmQoKSwgdG9cbjIzMTk6XHRcdFx0ICogYXZvaWQgY29uY3VycmVudCBwYWdlIGZhdWx0cyYjMzk7IGFsbG9jYXRpb24gZmFpbHVyZS5cbjIzMjA6XHRcdFx0ICovXG4yMzIxOlx0XHRcdHRsYl9maW5pc2hfbW11KHRsYik7XG4yMzIyOlx0XHRcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xuMjMyMzpcdFx0XHR0bGJfZ2F0aGVyX21tdSh0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4yMzI0Olx0XHR9XG4yMzI1Olx0fVxuMjMyNjpcdFxuMjMyNzpcdC8qKlxuMjMyODpcdCAqIHphcF92bWFfcmFuZ2UgLSB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiBhIHZtYSByYW5nZVxuMjMyOTpcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEh1Z2VUTEIgSGVhZGVyKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBIdWdlVExCIGludGVybmFscywgc3BlY2lmaWNhbGx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlbGV2YW50IG1hY3Jvcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYXJlYSBhcm91bmQgbGluZXMgMjQwLTI3MCBhbmQgdGhlbiBjaXJjbGluZyBiYWNrIHRvIGxpbmVzIDMxMC0zMzUuIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MgYXJlIGxvY2F0ZWQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZWxlbWVudHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgc3BlY2lmaWMgdGFzay4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCk7XG4gMjQxOlx0aW50IGh1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQyOlx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuIDI0MzpcdHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjQ0Olx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQ1Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcbiAyNDY6XHRcbiAyNDc6XHRleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDI0ODpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG4gMjQ5Olx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUwOlx0XHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbiAyNTE6XHRcbiAyNTI6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUzOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMjU0Olx0e1xuIDI1NTpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI1NjpcdFx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG4gMjU3Olx0fVxuIDI1ODpcdFxuIDI1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjYwOlx0XHRcdFx0XHQgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gMjYxOlx0e1xuIDI2MjpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI2MzpcdFx0XHRfX2h1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xuIDI2NDpcdH1cbiAyNjU6XHRcbiAyNjY6XHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY3Olx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY4Olx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAyNjk6XHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcwOlx0aW50IGh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3MTpcdHZvaWQgaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcyOlx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xuIDI3MzpcdGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAyNzQ6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCxcbiAyNzU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcF9mbGFncyk7XG4gMjc2Olx0dm9pZCBodWdldGxiX3Vuc2hhcmVfYWxsX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3NzpcdHZvaWQgZml4dXBfaHVnZXRsYl9yZXNlcnZhdGlvbnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3ODpcdHZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbiAyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBEaXNjcmVwYW5jeSBpbiBgaHVnZXRsYl96YXBfYmVnaW5gJiMzOTtzIEFyZ3VtZW50IExpc3QqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBmdW5jdGlvbiBkZWZpbml0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBJdCBsb29rcyBsaWtlIGl0IHRha2VzIGEgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAgcG9pbnRlciBhbmQgdHdvIGB1bnNpZ25lZCBsb25nYCBwb2ludGVycywgYHN0YXJ0YCBhbmQgYGVuZGAuIFRoZSBkZWZpbml0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgZXhwZWN0ZWQuCgpCdXQgdGhlbiwgd2hlbiBJIGxvb2tlZCBhdCB0aGUgY2FsbCBpbiBgbW0vbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAyMzA3LCB0aGUgY2FsbCBzaXRlIHNlZW1zIHRvIGJlIHVzaW5nICp0aHJlZSogYXJndW1lbnRzLCB3aXRoIHRoZSBpbmNsdXNpb24gb2YgYGRldGFpbHNgOiBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCwgZGV0YWlscyk7YC4KClRoaXMgaXMgYSByZWQgZmxhZy4gRG9lcyBgaHVnZXRsYl96YXBfYmVnaW5gIHRha2UgdGhyZWUgb3IgZm91ciBhcmd1bWVudHM/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgZXhwbGFpbiB0aGlzIGRpdmVyZ2VuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHJpZ2h0LCBvciBpZiBpdCYjMzk7cyBhIGJ1Zy4gU2luY2UgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGBnaXQgbG9nYCBhdCB0aGUgbW9tZW50LCBJJiMzOTtsbCBuZWVkIHRvIHVzZSB3aGF0IEkgaGF2ZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gYWdhaW4gZm9yIHRoZSBmb3VydGggYXJndW1lbnQuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIGRlZmluZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gSSYjMzk7bGwgYWxzbyB0cnkgYSBicm9hZGVyIGdyZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxscyB0byB0aGUgZnVuY3Rpb24gYW5kIGlmIHRoZXkmIzM5O3JlIGNvbnNpc3RlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfemFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ5PWV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU2Olx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTctfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjMyMDpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMjEtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmM9NTI0NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTU0MDQtXG5tbS9odWdldGxiLmM6NTQwNTp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTQwNi1cdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5tbS9tZW1vcnkuYz0yMjU1PXZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG4tLVxubW0vbWVtb3J5LmMtMjI3MC1cbm1tL21lbW9yeS5jOjIyNzE6XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5tbS9tZW1vcnkuYy0yMjcyLVx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xuLS1cbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0yMzA2LVx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbm1tL21lbW9yeS5jOjIzMDc6XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjMwOC1cdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXHUwMDNldm1fbW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEh1Z2VUTEIgSXNzdWUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcy4uLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIG5hcnJvd2VkIGRvd24gdGhlIGFyZWEgb2YgY29uY2VybiwgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBhIGNsb3NlciBsb29rIGF0IHRoZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGhlYWRlciBmaWxlIGlzIHdhcnJhbnRlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBnYW5kZXIgYXQgbGluZXMgMzE1IHRocm91Z2ggMzMwLiBJdCYjMzk7cyBhIGtleSBzcG90IHdoZXJlIHNvbWUgb2YgdGhlIGNvcmUgSHVnZVRMQiBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcyBhcmUgcHJvYmFibHkgZGVjbGFyZWQsIGFuZCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBxdWljayByZS1jaGVjayB0byBlbnN1cmUgbm90aGluZyByZWxhdGVkIHRvIHRoZSByb290IGNhdXNlIGhhcyBzbGlwcGVkIGJ5LiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIGV2ZW4gaWYgaXQgZmVlbHMgcmVkdW5kYW50LCB3aGVuIGRpYWdub3NpbmcgYSB0cmlja3kgbWVtb3J5IGlzc3VlLiBKdXN0IHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgd2hhdGV2ZXImIzM5O3MgaGFwcGVuaW5nIGlzbiYjMzk7dCBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uIG9yIGEgc3VidGxlIGludGVyYWN0aW9uIHdpdGggdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLiBUaW1lIHRvIHB1bGwgdGhhdCBmaWxlIHVwIGFuZCBoYXZlIGEgbG9vay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDMxNjpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiAzMTc6XHR7XG4gMzE4Olx0fVxuIDMxOTpcdFxuIDMyMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcbiAzMjE6XHRcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDMyMjpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiAzMjM6XHR7XG4gMzI0Olx0fVxuIDMyNTpcdFxuIDMyNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoXG4gMzI3Olx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAzMjg6XHRcdFx0XHRcdHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscylcbiAzMjk6XHR7XG4gMzMwOlx0fVxuIDMzMTpcdFxuIDMzMjpcdHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCxcbiAzMzM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4gMzM0Olx0XHRcdFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuIDMzNTpcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSlcbiAzMzY6XHR7XG4gMzM3Olx0XHRCVUcoKTtcbiAzMzg6XHRcdHJldHVybiAwO1xuIDMzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQwNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29tcGlsYXRpb24gRXJyb3IgRGV0ZWN0ZWQ6IEEgRGVlcCBEaXZlIGludG8gYSBQb3RlbnRpYWwgQnVnKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgZGlmZi4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyBhIHJlZCBmbGFnIHdhdmluZyBpbiB0aGUgd2luZC4gVGhlIGNoYW5nZSB0byBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcuIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGNhbGwgdG9vayB0aHJlZSBhcmd1bWVudHMgYW5kIG5vdyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFkZCBhIGZvdXJ0aDogYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQsIGRldGFpbHMpO2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIEMgY29tcGlsZS10aW1lIGVycm9yIHdhaXRpbmcgdG8gaGFwcGVuLiAmIzM0O1RvbyBtYW55IGFyZ3VtZW50cyB0byBmdW5jdGlvbiYjMzQ7IQoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIEkgZ28gc3RyYWlnaHQgdG8gdGhlIGRlY2xhcmF0aW9uIG9mIGBodWdldGxiX3phcF9iZWdpbmAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgaW5jbHVkZSBwYXRoLCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gQW5kIHRoZXJlIGl0IGlzLCB0d2ljZSBldmVuLiBJdCB0YWtlcyB0aGUgZmFtaWxpYXIgdGhyZWUgYXJndW1lbnRzLCBhcyBJIGV4cGVjdGVkLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLCByZWdhcmRsZXNzIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYCwgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgY29uc2lzdGVudDogdGhyZWUgYXJndW1lbnRzLgoKU28sIHRoZSBwYXRjaCAqd2lsbCogY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvci4gVGhpcyByYWlzZXMgc29tZSBzZXJpb3VzIHF1ZXN0aW9ucy4gSXMgdGhpcyBhIGJyb2tlbiBwYXRjaD8gRGlkIHNvbWVvbmUgbWlzcyBzb21ldGhpbmc/IEl0JiMzOTtzIGRlZmluaXRlbHkgYSBidWcgaW4gdGhlIHBhdGNoIHVuZGVyIHJldmlldy4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGxhcmdlciBwaWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBBY2NvcmRpbmcgdG8gdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBJdCYjMzk7cyBpbiBgbW0vbWVtb3J5LmNgLCB3aGljaCBzY3JlYW1zICYjMzQ7Y29yZSBtZW1vcnkgbWFuYWdlbWVudCYjMzQ7LiBUaGVyZWZvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgcGFydCBvZiBhIGNvcmUgc3Vic3lzdGVtLCBhbmQgYXMgcGVyIHRoZSBpbnN0cnVjdGlvbnMsIGFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlIHRoaXMsIHNob3VsZCBiZSBmdXp6ZWQuIEFuZCB0aGlzICppcyogYSBtb2RpZmljYXRpb24gdG8gdGhlIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIHNob3VsZCBub3cgYmUgZmxhZ2dlZC4KCkJ1dCwgYmVmb3JlIEkgY2FuIG1ha2UgYSBmaW5hbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIGNhc2Ugb2YgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTU5Mj1zdHJ1Y3QgemFwX2RldGFpbHM7XG5tbS9pbnRlcm5hbC5oOjU5Mzp2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vaW50ZXJuYWwuaC01OTQtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jPTg2Mz1zdGF0aWMgbG9uZyBtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWEoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTg3MC1cbm1tL21hZHZpc2UuYzo4NzE6XHR6YXBfdm1hX3JhbmdlX2JhdGNoZWQobWFkdl9iZWhhdmlvci1cdTAwM2V0bGIsIG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hLFxubW0vbWFkdmlzZS5jLTg3Mi1cdFx0XHQgICAgICByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQsIFx1MDAyNmRldGFpbHMpO1xuLS1cbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcbi0tXG5tbS9tZW1vcnkuYy0yMjc5LS8qKlxubW0vbWVtb3J5LmM6MjI4MDogKiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQgLSB6YXAgcGFnZSB0YWJsZSBlbnRyaWVzIGluIGEgdm1hIHJhbmdlXG5tbS9tZW1vcnkuYy0yMjgxLSAqIEB0bGI6IHBvaW50ZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdHJ1Y3QgbW11X2dhdGhlclxuLS1cbm1tL21lbW9yeS5jLTIyOTItICovXG5tbS9tZW1vcnkuYzoyMjkzOnZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tZW1vcnkuYy0yMjk0LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbm1tL21lbW9yeS5jPTIzMzU9dm9pZCB6YXBfdm1hX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vbWVtb3J5LmMtMjM0MC1cdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbm1tL21lbW9yeS5jOjIzNDE6XHR6YXBfdm1hX3JhbmdlX2JhdGNoZWQoXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHNpemUsIE5VTEwpO1xubW0vbWVtb3J5LmMtMjM0Mi1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWVtb3J5LmM9NDQzOD1zdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfbWFwcGluZ19yYW5nZV90cmVlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21lbW9yeS5jLTQ0NTQtXHRcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbm1tL21lbW9yeS5jOjQ0NTU6XHRcdHphcF92bWFfcmFuZ2VfYmF0Y2hlZChcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIHNpemUsIGRldGFpbHMpO1xubW0vbWVtb3J5LmMtNDQ1Ni1cdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgY29yZSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBjcnVjaWFsIHBvaW50czogYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgKGhhbmRsaW5nIGBNQURWX0RPTlRORUVEYCBhbmQgc2ltaWxhciBtYWR2aXNlIGNhbGxzKSwgYHphcF92bWFfcmFuZ2VgIGl0c2VsZiwgYW5kIGB1bm1hcF9tYXBwaW5nX3JhbmdlX3RyZWVgICh3aGljaCBjb3ZlcnMgdHJ1bmNhdGlvbiBhbmQgYHVubWFwX21hcHBpbmdfcmFuZ2VgKS4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7aGlnaCB1c2VyLXNwYWNlIHJlYWNoYWJpbGl0eS4mIzM0OyBTcGVjaWZpY2FsbHksIHRoaW5rIGBtYWR2aXNlYCwgZXNwZWNpYWxseSBgTUFEVl9ET05UTkVFRGAsIGFsc28gYHRydW5jYXRlYCwgYGZhbGxvY2F0ZWAgYW5kIHRoZSBldmVyLXByZXNlbnQgYG11bm1hcGAsIGFuZCB0aGF0JiMzOTtzICpiZWZvcmUqIGNvbnNpZGVyaW5nIHRoZSBlZmZlY3RzIG9uIGh1Z2V0bGIgcGFnZXMgb3IgZXZlbiBzdGFuZGFyZCBwYWdlcy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBwcmV0dHkgYmlnLgoKSG1tLCB0aGlzIGBkZXRhaWxzYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBodWdldGxiX3phcF9iZWdpbmAgaXMgbWFraW5nIG1lIHBhdXNlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgZ2V0cyB1c2VkLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB0aGVyZSBpdCBpcywgYGh1Z2V0bGJfemFwX2VuZGAgb24gbGluZSAyMzIyLiBJdCBsb29rcyBsaWtlIGl0IGlzIGFsc28gcGFzc2VkIHRvIGBfX3phcF92bWFfcmFuZ2VgIGxpa2Ugc286CgpgYGBjCmh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtzdGFydCwgJmFtcDtlbmQpOwpfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsICZhbXA7ZGV0YWlscyk7CmBgYAoKSSBzdXNwZWN0IHRoZSBhdXRob3IgKm1lYW50KiB0byBwYXNzIGBkZXRhaWxzYCBoZXJlLCBvciB0aGVyZSYjMzk7cyBhIHR5cG8sIGJ1dCBlaXRoZXIgd2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZCgpYCBpbiBgbW0vbWVtb3J5LmNgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBwYXRjaCBgV29ydGhGdXp6aW5nYD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjcml0ZXJpYS4gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOiBDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiYjMzQ7CgpCaW5nby4gVGhpcyB0b3VjaGVzIGBtbS9tZW1vcnkuY2Agd2l0aGluIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKWAuIEl0JiMzOTtzIGEgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIEl0JiMzOTtzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgdmlhIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYCwgYGZ0cnVuY2F0ZWAsIGBmYWxsb2NhdGVgLCBgbXVubWFwYCwgZXRjLiBTbywgdGhlIGFuc3dlciBpcyAmIzM0O3llcywmIzM0OyB0aGlzIGlzIHdvcnRoIGZ1enppbmcuCgpOb3csIG9uIHRvIHRoZSBjb25maWd1cmF0aW9ucy4gYG1tL21lbW9yeS5jYCBpcyBhbHdheXMgY29tcGlsZWQuIFRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgb3IgYENPTkZJR19NTVVgIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgYF9femFwX3ZtYV9yYW5nZWAgd2lsbCBiZSBydW4sIHdoaWNoIHNlZW1zIHN0YW5kYXJkIGVub3VnaC4gSSBzaG91bGQgY2hlY2sgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCB0byBzZWUgd2hldGhlciBgaHVnZXRsYl96YXBfYmVnaW5gIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4KCk5leHQgc3RlcDogZGVmaW5lIHdoYXQgZm9jdXMgc3ltYm9scyB3aWxsIGJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IVUdFVExCX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yMz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI2LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI4MD11bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI4MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI4MjojZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjgzLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQ2Mz1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKSB7fVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDY0LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDY1OiNlbmRpZiAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDY2LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU4Mj1lbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTk2LSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTk3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01OTgtI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY0OT1IUEFHRUZMQUcoQ21hLCBjbWEpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02NTAtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2NTE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY1Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMDgyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDg2LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTA4NzojZWxzZVx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTA4OC1zdHJ1Y3QgaHN0YXRlIHt9O1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEzMDQ9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfYm9vdG1lbV9zdHJ1Y3RfcGFnZV9pbml0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwNi19XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA3OiNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwOC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEzMDk9c3RhdGljIGlubGluZSBzcGlubG9ja190ICpodWdlX3B0ZV9sb2NrKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxOC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMTk6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NNQSlcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMjAtZXh0ZXJuIHZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjI0CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYEhVR0VUTEJfUEFHRWAgU3VwcG9ydCBhbmQgU3ltYm9sIEluY2x1c2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgaW50ZWdyYXRlIGZ1enppbmcgZm9yIHRoZSBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgYEZvY3VzU3ltYm9sc2Agc2V0LiBUaGlzIGlzIGtleSBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGlzIGNlbnRyYWwgdG8gdGhpcyBsb2dpYy4KCk5vdywgd2hhdCAqc2hvdWxkKiBiZSBpbiBgRm9jdXNTeW1ib2xzYD8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LiBPYnZpb3VzbHksIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgbXVzdC4gVGhlbiwgdGhlIGRpcmVjdCBjYWxsZXIgYHphcF92bWFfcmFuZ2VgLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhpcyByYW5nZSwgc3VjaCBhcyBgX19odWdldGxiX3phcF9iZWdpbmAgYXJlIGRlZmluaXRlbHkgY29udGVuZGVycy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBzaW5jZSBpdCBjYWxscyBvbiB0aGlzIHNlcXVlbmNlLgoKQWxyaWdodCwgYSBxdWljayBjaGVjayBvbiB0aGUgdWJpcXVpdHkgb2YgdGhlc2Ugc3ltYm9scyBpcyBpbiBvcmRlci4gSXQgbG9va3MgbGlrZSBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpcyBpbmRlZWQgbm9uLXViaXF1aXRvdXMsIHNwZWNpZmljIHRvIGJhdGNoZWQgemFwcGluZyBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gYG1hZHZpc2UgRE9OVE5FRURgLCB0cnVuY2F0ZSwgYW5kIGh1Z2V0bGIgdW5tYXAuIFNpbWlsYXJseSwgYF9faHVnZXRsYl96YXBfYmVnaW5gIGlzIGh1Z2V0bGItc3BlY2lmaWMuIGBtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFgIGFuZCB0aGUgcmFuZ2UgY2FsbGVyIGB6YXBfdm1hX3JhbmdlYCBhcmUgYWxzbyBub24tdWJpcXVpdG91cy4gR29vZCwgdGhhdCBtYWtlcyB0aGUgZGVjaXNpb24gZWFzaWVyLgoKTm93LCBsZXQmIzM5O3MgdHJpcGxlLWNoZWNrIGFsbCB0aGUgcmVxdWlyZW1lbnRzOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCB0byBgWyYjMzQ7SFVHRVRMQl9QQUdFJiMzNDtdYC4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBgWyYjMzQ7emFwX3ZtYV9yYW5nZV9iYXRjaGVkJiMzNDssICYjMzQ7X19odWdldGxiX3phcF9iZWdpbiYjMzQ7XWAsIGJ1dCBJIG1heSBhbHNvIGluY2x1ZGUgYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgYXMgd2VsbC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlc2Ugc3ltYm9scyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGZ1bmN0aW9uYWxpdHkgYWZmZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24uCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiBjb25maWdzIGFuZCBzeW1ib2wgbmFtZXMsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kLiBMb2NhdGlvbiBzZWVtcyBjb3JyZWN0OiBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpbiBgbW0vbWVtb3J5LmNgLCBgX19odWdldGxiX3phcF9iZWdpbmAgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBpbiBgbW0vbWFkdmlzZS5jYC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6YXBfdm1hX3JhbmdlX2JhdGNoZWQmIzM0OywKICAgICYjMzQ7X19odWdldGxiX3phcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAmIzM5O2RldGFpbHMmIzM5OyB0byBodWdldGxiX3phcF9iZWdpbiBpbiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQpLiBUaGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC8gaHVnZXRsYiB1bm1hcHBpbmcgbG9naWMgYW5kIGRvZXMgbm90IGludm9sdmUgY29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciBhbHRlcmluZyBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIG92ZXIgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIE1NIG9wZXJhdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjb25maWdzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBlYzYzZGQ2MjEyYWM1Li5iMWIzODJkNTUyYzM5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMjMwNCw3ICYjNDM7MjMwNCw3IEBAIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAKIAltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmYW1wO3JhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtJmd0O3ZtX21tLAogCQkJCWFkZHJlc3MsIGVuZCk7Ci0JaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCk7CiYjNDM7CWh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQsIGRldGFpbHMpOwogCXVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtJmd0O3ZtX21tKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUaW55IE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHRoaXMgaXMgYSBzbWFsbCBvbmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl04oCZcyBmb2N1c2VkIG9uIGEgdmVyeSBzcGVjaWZpYyBhcmVhLCBqdWRnaW5nIGJ5IHRoZSBjb250ZXh0LiBJdCBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoIEh1Z2VUTEIgcGFnZXMuIFRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgYSBtaW5vciBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgbW0vbWVtb3J5LmNgIGZpbGUuIEkgc2VlIHRoZSBkaWZmIHNob3dzIHRoYXQgdGhlIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24gaXMgcmVjZWl2aW5nIGEgbmV3IGFyZ3VtZW50LCBgZGV0YWlsc2AuIExldCYjMzk7cyBhc3N1bWUgdGhhdCBgZGV0YWlsc2AgY29udGFpbnMgdXNlZnVsIGluZm87IGl0JiMzOTtzIGEgZ29vZCBhc3N1bXB0aW9uLgoKR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLCBgaHVnZXRsYl96YXBfYmVnaW5gIHByb2JhYmx5IGhhbmRsZXMgdGhlIHN0YXJ0IG9mIGEgJiMzNDt6YXAmIzM0OyBvcGVyYXRpb24sIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcywgYW5kIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgYmF0Y2hlZCB2ZXJzaW9uIG9mIGEgJiMzNDt6YXAgcmFuZ2UmIzM0OyBvcGVyYXRpb24sIGxpa2VseSBpbnZvbHZpbmcgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpLiBUaGUgY2hhbmdlIGluIHRoZSBhcmd1bWVudCBsaXN0IGZvciBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIHdoYXQgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgdGhlICYjMzQ7YmVnaW4mIzM0OyBvcGVyYXRpb24gbm93IG5lZWRzIGFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBvciBwYXJhbWV0ZXJzLiBQZXJoYXBzIHRoaXMgYGRldGFpbHNgIHN0cnVjdCBpcyBhIG5ldyB3YXkgdG8gY29udmV5IGZsYWdzLCBvciBhIHN0cnVjdHVyZSBjb250YWluaW5nIHJlbGV2YW50IG1ldGFkYXRhIGFib3V0IHRoZSBWTUEgYmVpbmcgemFwcGVkLCBvciB0aGUgcmVhc29uIGJlaGluZCB0aGUgb3BlcmF0aW9uLiAKCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiBib3RoIGBodWdldGxiX3phcF9iZWdpbmAgYW5kIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgLCBhbG9uZyB3aXRoIHRoZSBgZGV0YWlsc2AgYXJndW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUga2V5LiBJJiMzOTtsbCBjaGVjayBob3cgYGRldGFpbHNgIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LCBhIGJ1ZyBmaXgsIG9yIGV2ZW4gYSBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZSBtYW5hZ2VtZW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGRlZmluaXRpb24gb2YgYGh1Z2V0bGJfemFwX2JlZ2luYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl96YXBfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ni1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0NzpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ4LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDk9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjUxLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1My1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTUtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XHRcdF9faHVnZXRsYl96YXBfYmVnaW4odm1hLCBzdGFydCwgZW5kKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzE5LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MzIwOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMS1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQwNC1cbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy01NDA2LVx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuLS1cbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcbi0tXG5tbS9tZW1vcnkuYy0yMjcwLVxubW0vbWVtb3J5LmM6MjI3MTpcdFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKTtcbm1tL21lbW9yeS5jLTIyNzItXHRcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2ZGV0YWlscyk7XG4tLVxubW0vbWVtb3J5LmM9MjI5Mz12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIzMDYtXHRcdFx0XHRhZGRyZXNzLCBlbmQpO1xubW0vbWVtb3J5LmM6MjMwNzpcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCwgZGV0YWlscyk7XG5tbS9tZW1vcnkuYy0yMzA4LVx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGFzaywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaXZpbmcgaW50byBIdWdlVExCIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IEh1Z2VUTEJzIGFyZSBtYW5hZ2VkIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9tZW1vcnkuY2AgYW5kIHplcm8gaW4gb24gbGluZXMgMjI1MCB0aHJvdWdoIDIzMjAuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdmlldyBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMsIGxpa2VseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZnJlZWluZywgb3IgZmF1bHQgaGFuZGxpbmcgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHBvdGVudGlhbGx5IHNvbWUgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGNydWNpYWwgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBwaHlzaWNhbC10by12aXJ0dWFsIG1hcHBpbmdzLgoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBjcmFjayBvcGVuIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGNoZWNraW5nIGxpbmVzIDI0MC0zMzAuIFRoaXMgaXMgdGhlIGhlYWRlciBmaWxlLCBzbyBpdCYjMzk7bGwgZXhwb3NlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgcmVsZXZhbnQgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgdGhlIEh1Z2VUTEIgYmVoYXZpb3IuIFRoaXMgaXMgdGhlIGJsdWVwcmludDsgdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBzZWUgdGhlIGxheW91dCBvZiB0aGUgYGh1Z2V0bGJfY2dyb3VwYCwgdGhlIGBoc3RhdGVgIHN0cnVjdCwgb3IgcmVsZXZhbnQgZGVmaW5pdGlvbnMgb2YgaG93IEh1Z2VUTEIgcGFnZSBzaXplIGlzIG1hbmFnZWQuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5IHJlcHJlc2VudCB0aGUgaHVnZSBwYWdlIHNpemVzLCBhbnkgYXNzb2NpYXRlZCBmbGFncywgYW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyB0aGUgYXZhaWxhYmxlIEh1Z2VUTEIgcmVzb3VyY2VzLiBUaGlzIHdpbGwgbGlrZWx5IGlsbHVtaW5hdGUgdGhlIGRldGFpbHMgYmVoaW5kIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIHNlZSBpbiBgbW0vbWVtb3J5LmNgLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJuIGhvdyBIdWdlVExCIHBhZ2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNTA6XHQgKiB1bm1hcF92bWFzKCkgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgd2lsbCBmbHVzaCB0aGUgd2hvbGUgdW5tYXBwZWQgYWRkcmVzc1xuMjI1MTpcdCAqIHJhbmdlIGFmdGVyIHVubWFwX3ZtYXMoKSByZXR1cm5zLiAgU28gdGhlIG9ubHkgcmVzcG9uc2liaWxpdHkgaGVyZSBpcyB0b1xuMjI1MjpcdCAqIGVuc3VyZSB0aGF0IGFueSB0aHVzLWZhciB1bm1hcHBlZCBwYWdlcyBhcmUgZmx1c2hlZCBiZWZvcmUgdW5tYXBfdm1hcygpXG4yMjUzOlx0ICogZHJvcHMgdGhlIGxvY2sgYW5kIHNjaGVkdWxlcy5cbjIyNTQ6XHQgKi9cbjIyNTU6XHR2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuMjI1NjpcdHtcbjIyNTc6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuMjI1ODpcdFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbjIyNTk6XHRcdHN0cnVjdCB6YXBfZGV0YWlscyBkZXRhaWxzID0ge1xuMjI2MDpcdFx0XHQuemFwX2ZsYWdzID0gWkFQX0ZMQUdfRFJPUF9NQVJLRVIgfCBaQVBfRkxBR19VTk1BUCxcbjIyNjE6XHRcdH07XG4yMjYyOlx0XG4yMjYzOlx0XHR2bWEgPSB1bm1hcC1cdTAwM2VmaXJzdDtcbjIyNjQ6XHRcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX1VOTUFQLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4yMjY1Olx0XHRcdFx0XHR1bm1hcC1cdTAwM2V2bWFfc3RhcnQsIHVubWFwLVx1MDAzZXZtYV9lbmQpO1xuMjI2NjpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMjI2NzpcdFx0ZG8ge1xuMjI2ODpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgdW5tYXAtXHUwMDNldm1hX3N0YXJ0KTtcbjIyNjk6XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBtaW4odm1hLVx1MDAzZXZtX2VuZCwgdW5tYXAtXHUwMDNldm1hX2VuZCk7XG4yMjcwOlx0XG4yMjcxOlx0XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG4yMjcyOlx0XHRcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2ZGV0YWlscyk7XG4yMjczOlx0XHRcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIFx1MDAyNmRldGFpbHMpO1xuMjI3NDpcdFx0XHR2bWEgPSBtYXNfZmluZCh1bm1hcC1cdTAwM2VtYXMsIHVubWFwLVx1MDAzZXRyZWVfZW5kIC0gMSk7XG4yMjc1Olx0XHR9IHdoaWxlICh2bWEpO1xuMjI3NjpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbjIyNzc6XHR9XG4yMjc4Olx0XG4yMjc5Olx0LyoqXG4yMjgwOlx0ICogemFwX3ZtYV9yYW5nZV9iYXRjaGVkIC0gemFwIHBhZ2UgdGFibGUgZW50cmllcyBpbiBhIHZtYSByYW5nZVxuMjI4MTpcdCAqIEB0bGI6IHBvaW50ZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdHJ1Y3QgbW11X2dhdGhlclxuMjI4MjpcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxuMjI4MzpcdCAqIEBhZGRyZXNzOiBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSByYW5nZSB0byB6YXBcbjIyODQ6XHQgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHphcFxuMjI4NTpcdCAqIEBkZXRhaWxzOiBkZXRhaWxzIHNwZWNpZnlpbmcgemFwcGluZyBiZWhhdmlvclxuMjI4NjpcdCAqXG4yMjg3Olx0ICogQHRsYiBtdXN0IG5vdCBiZSBOVUxMLiBUaGUgcHJvdmlkZWQgYWRkcmVzcyByYW5nZSBtdXN0IGJlIGZ1bGx5XG4yMjg4Olx0ICogY29udGFpbmVkIHdpdGhpbiBAdm1hLiBJZiBAdm1hIGlzIGZvciBodWdldGxiLCBAdGxiIGlzIGZsdXNoZWQgYW5kXG4yMjg5Olx0ICogcmUtaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbi5cbjIyOTA6XHQgKlxuMjI5MTpcdCAqIElmIEBkZXRhaWxzIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gd2lsbCB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcy5cbjIyOTI6XHQgKi9cbjIyOTM6XHR2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuMjI5NDpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuMjI5NTpcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscylcbjIyOTY6XHR7XG4yMjk3Olx0XHRjb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgJiM0Mzsgc2l6ZTtcbjIyOTg6XHRcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4yMjk5Olx0XG4yMzAwOlx0XHRWTV9XQVJOX09OX09OQ0UoIXRsYiB8fCB0bGItXHUwMDNlbW0gIT0gdm1hLVx1MDAzZXZtX21tKTtcbjIzMDE6XHRcbjIzMDI6XHRcdGlmICh1bmxpa2VseSghc2l6ZSkpXG4yMzAzOlx0XHRcdHJldHVybjtcbjIzMDQ6XHRcbjIzMDU6XHRcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4yMzA2Olx0XHRcdFx0XHRhZGRyZXNzLCBlbmQpO1xuMjMwNzpcdFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcbjIzMDg6XHRcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXHUwMDNldm1fbW0pO1xuMjMwOTpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMjMxMDpcdFx0LypcbjIzMTE6XHRcdCAqIHVubWFwICYjMzk7YWRkcmVzcy1lbmQmIzM5OyBub3QgJiMzOTtyYW5nZS5zdGFydC1yYW5nZS5lbmQmIzM5OyBhcyByYW5nZVxuMjMxMjpcdFx0ICogY291bGQgaGF2ZSBiZWVuIGV4cGFuZGVkIGZvciBodWdldGxiIHBtZCBzaGFyaW5nLlxuMjMxMzpcdFx0ICovXG4yMzE0Olx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIGFkZHJlc3MsIGVuZCwgZGV0YWlscyk7XG4yMzE1Olx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuMjMxNjpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7XG4yMzE3Olx0XHRcdC8qXG4yMzE4Olx0XHRcdCAqIGZsdXNoIHRsYiBhbmQgZnJlZSByZXNvdXJjZXMgYmVmb3JlIGh1Z2V0bGJfemFwX2VuZCgpLCB0b1xuMjMxOTpcdFx0XHQgKiBhdm9pZCBjb25jdXJyZW50IHBhZ2UgZmF1bHRzJiMzOTsgYWxsb2NhdGlvbiBmYWlsdXJlLlxuMjMyMDpcdFx0XHQgKi9cbjIzMjE6XHRcdFx0dGxiX2ZpbmlzaF9tbXUodGxiKTtcbjIzMjI6XHRcdFx0aHVnZXRsYl96YXBfZW5kKHZtYSwgZGV0YWlscyk7XG4yMzIzOlx0XHRcdHRsYl9nYXRoZXJfbW11KHRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbjIzMjQ6XHRcdH1cbjIzMjU6XHR9XG4yMzI2Olx0XG4yMzI3Olx0LyoqXG4yMzI4Olx0ICogemFwX3ZtYV9yYW5nZSAtIHphcCBhbGwgcGFnZSB0YWJsZSBlbnRyaWVzIGluIGEgdm1hIHJhbmdlXG4yMzI5Olx0ICogQHZtYTogdGhlIHZtYSBjb3ZlcmluZyB0aGUgcmFuZ2UgdG8gemFwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEh1Z2VUTEIgSGVhZGVyIEZpbGVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IEh1Z2VUTEIsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXQgYSBwcmV0dHkgZnVuZGFtZW50YWwgbGV2ZWwuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgdGhlIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgZm9jdXMgb24gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgbG9va2luZyBhcm91bmQgbGluZXMgMjQwIGFuZCAzMTQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBlcmhhcHMgc29tZSBjcml0aWNhbCBtYWNybyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGZvdW5kLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGxpbmVzIHJldmVhbC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGV5JiMzOTtsbCBiZSB1c2VmdWwgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCk7XG4gMjQxOlx0aW50IGh1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQyOlx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuIDI0MzpcdHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjQ0Olx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQ1Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcbiAyNDY6XHRcbiAyNDc6XHRleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDI0ODpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG4gMjQ5Olx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUwOlx0XHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbiAyNTE6XHRcbiAyNTI6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUzOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMjU0Olx0e1xuIDI1NTpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI1NjpcdFx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG4gMjU3Olx0fVxuIDI1ODpcdFxuIDI1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjYwOlx0XHRcdFx0XHQgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gMjYxOlx0e1xuIDI2MjpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI2MzpcdFx0XHRfX2h1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xuIDI2NDpcdH1cbiAyNjU6XHRcbiAyNjY6XHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY3Olx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY4Olx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAyNjk6XHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcwOlx0aW50IGh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3MTpcdHZvaWQgaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcyOlx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xuIDI3MzpcdGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAyNzQ6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCxcbiAyNzU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcF9mbGFncyk7XG4gMjc2Olx0dm9pZCBodWdldGxiX3Vuc2hhcmVfYWxsX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3NzpcdHZvaWQgZml4dXBfaHVnZXRsYl9yZXNlcnZhdGlvbnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3ODpcdHZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbiAyNzk6XHRcbiAyODA6XHR1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbiAyODE6XHRcbiAyODI6XHQjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDI4MzpcdFxuIDI4NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2R1cF92bWFfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAyODU6XHR7XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDI4OTpcdHtcbiAyOTA6XHR9XG4gMjkxOlx0XG4gMjkyOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiAyOTM6XHR7XG4gMjk0Olx0XHRyZXR1cm4gMDtcbiAyOTU6XHR9XG4gMjk2Olx0XG4gMjk3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXG4gMjk4Olx0XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDI5OTpcdHtcbiAzMDA6XHRcdHJldHVybiBOVUxMO1xuIDMwMTpcdH1cbiAzMDI6XHRcbiAzMDM6XHRzdGF0aWMgaW5saW5lIGludCBodWdlX3BtZF91bnNoYXJlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gMzA0Olx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIDMwNTpcdHtcbiAzMDY6XHRcdHJldHVybiAwO1xuIDMwNzpcdH1cbiAzMDg6XHRcbiAzMDk6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIDMxMDpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAzMTE6XHR7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXG4gMzE1Olx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAzMTY6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMzE3Olx0e1xuIDMxODpcdH1cbiAzMTk6XHRcbiAzMjA6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXG4gMzIxOlx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAzMjI6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMzIzOlx0e1xuIDMyNDpcdH1cbiAzMjU6XHRcbiAzMjY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfZW5kKFxuIDMyNzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMzI4Olx0XHRcdFx0XHRzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gMzI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGlzY3JlcGFuY2llcyBpbiBIdWdlVExCIFVubWFwcGluZyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24uLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgbGluZTogYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQsIGRldGFpbHMpO2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBhcmd1bWVudCBjb3VudC4gSXMgYGh1Z2V0bGJfemFwX2JlZ2luYCBzdXBwb3NlZCB0byB0YWtlIGZvdXIgYXJndW1lbnRzLCBhcyBpdCBhcHBlYXJzIGhlcmU/IE9yIGlzIHRoZXJlIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uPwoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoeSBpcyBpdCB0aGF0IGB1bm1hcF92bWFzYCBpcyBjYWxsaW5nIGBodWdldGxiX3phcF9iZWdpbmAgd2l0aCBvbmx5IHRocmVlIGFyZ3VtZW50cywgbGlrZSBzbzogYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtzdGFydCwgJmFtcDtlbmQpO2A/IFlldCwgaGVyZSwgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAgc2VlbXMgdG8gYmUgdXNpbmcgdGhlIGZvdXItYXJndW1lbnQgdmVyc2lvbi4gVGhpcyBpbmNvbnNpc3RlbmN5IGlzIGEgcmVkIGZsYWcuIEl0IGZlZWxzIGxpa2UgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIG9yIGEgcmVjZW50IGNoYW5nZS4KClRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHJldmlldyByZWNlbnQgY29tbWl0cyBhbmQgYW55IG90aGVyIGluc3RhbmNlcyB3aGVyZSBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIHVzZWQuIFRoaXMgaXMgbGlrZWx5IGFuIG92ZXJzaWdodCB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMgYW5kIGl0IGlzIGltcG9ydGFudCB0byBmaW5kIGl0LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGhpc3Rvcnkgb2YgdGhpcyBmdW5jdGlvbiBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI1Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU2Olx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTctfVxuLS1cbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQwNC1cbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy01NDA2LVx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggaW4gaHVnZXRsYi5jKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19odWdldGxiX3phcF9iZWdpbmAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgcGxhY2UgZm9yIGFsbCB0aG9zZSBIdWdlVExCLXJlbGF0ZWQgZnVuY3Rpb25zLiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZSA1NDA1IGluIGBtbS9odWdldGxiLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBjYWxsLCB3aGF0JiMzOTtzIGJlaW5nIHNldCB1cCwgYW5kIHdoYXQgc3RhdGUgdGhlIHN5c3RlbSBpcyBpbiB3aGVuIGBfX2h1Z2V0bGJfemFwX2JlZ2luYCBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBsb2NhbCBjb250ZXh0IHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHByb2JsZW0gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgZXhwZWN0IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHBhZ2UgdW5tYXBwaW5nIHByb2Nlc3MsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDAwOlx0XHR0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7XG41NDAxOlx0XG41NDAyOlx0XHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbjU0MDM6XHR9XG41NDA0Olx0XG41NDA1Olx0dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTQwNjpcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuNTQwNzpcdHtcbjU0MDg6XHRcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG41NDA5Olx0XHRcdHJldHVybjtcbjU0MTA6XHRcbjU0MTE6XHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpO1xuNTQxMjpcdFx0aHVnZXRsYl92bWFfbG9ja193cml0ZSh2bWEpO1xuNTQxMzpcdFx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuNTQxNDpcdFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuNTQxNTpcdH1cbjU0MTY6XHRcbjU0MTc6XHR2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTQxODpcdFx0XHQgICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxuNTQxOTpcdHtcbjU0MjA6XHRcdHphcF9mbGFnc190IHphcF9mbGFncyA9IGRldGFpbHMgPyBkZXRhaWxzLVx1MDAzZXphcF9mbGFncyA6IDA7XG41NDIxOlx0XG41NDIyOlx0XHRpZiAoIXZtYS1cdTAwM2V2bV9maWxlKVx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xuNTQyMzpcdFx0XHRyZXR1cm47XG41NDI0Olx0XG41NDI1Olx0XHRpZiAoemFwX2ZsYWdzIFx1MDAyNiBaQVBfRkxBR19VTk1BUCkge1x0LyogZmluYWwgdW5tYXAgKi9cbjU0MjY6XHRcdFx0LypcbjU0Mjc6XHRcdFx0ICogVW5sb2NrIGFuZCBmcmVlIHRoZSB2bWEgbG9jayBiZWZvcmUgcmVsZWFzaW5nIGlfbW1hcF9yd3NlbS5cbjU0Mjg6XHRcdFx0ICogV2hlbiB0aGUgdm1hX2xvY2sgaXMgZnJlZWQsIHRoaXMgbWFrZXMgdGhlIHZtYSBpbmVsaWdpYmxlXG41NDI5Olx0XHRcdCAqIGZvciBwbWQgc2hhcmluZy4gIEFuZCwgaV9tbWFwX3J3c2VtIGlzIHJlcXVpcmVkIHRvIHNldCB1cFxuNTQzMDpcdFx0XHQgKiBwbWQgc2hhcmluZy4gIFRoaXMgaXMgaW1wb3J0YW50IGFzIHBhZ2UgdGFibGVzIGZvciB0aGlzXG41NDMxOlx0XHRcdCAqIHVubWFwcGVkIHJhbmdlIHdpbGwgYmUgYXN5bmNocm91c2x5IGRlbGV0ZWQuICBJZiB0aGUgcGFnZVxuNTQzMjpcdFx0XHQgKiB0YWJsZXMgYXJlIHNoYXJlZCwgdGhlcmUgd2lsbCBiZSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieVxuNTQzMzpcdFx0XHQgKiBzb21lb25lIGVsc2UuXG41NDM0Olx0XHRcdCAqL1xuNTQzNTpcdFx0XHRfX2h1Z2V0bGJfdm1hX3VubG9ja193cml0ZV9mcmVlKHZtYSk7XG41NDM2Olx0XHR9IGVsc2Uge1xuNTQzNzpcdFx0XHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcbjU0Mzg6XHRcdH1cbjU0Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5NgoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAxMDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gV2hhdCBkb2VzIGBnaXQgZGlmZiBIRUFEfjFgIHRlbGwgbWU/IENhbiBJIGV2ZW4gY2hlY2sgdGhlIGdpdCBsb2c/IEkgb25seSBoYXZlIGEgbGltaXRlZCBzZXQgb2YgdG9vbHMgaGVyZSwgc28gSSYjMzk7bGwgd29yayB3aXRoIHdoYXQgSSYjMzk7dmUgZ290LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgbGluZSAyMzA3LiBBaCwgSSBzZWUgdGhlIGNoYW5nZTogYGh1Z2V0bGJfemFwX2JlZ2luYCBpcyBpbnZvbHZlZC4KCkxvb2tpbmcgY2xvc2VyLCB0aGUgY29tbWl0IGNoYW5nZWQgdGhlIGZ1bmN0aW9uIGNhbGwgZnJvbSBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZClgIHRvIGBodWdldGxiX3phcF9iZWdpbih2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kLCBkZXRhaWxzKWAuICBUaGUgY29ycmVzcG9uZGluZyBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgc2hvd3MgdGhhdCBgaHVnZXRsYl96YXBfYmVnaW5gIG9yaWdpbmFsbHkgdG9vayBvbmx5IHR3byBhcmd1bWVudHMuICBTbywgdGhpcyAqbXVzdCogYmUgYW4gYWRkaXRpb24gb2YgYW4gYXJndW1lbnQuIERvZXMgaXQgZXZlbiBjb21waWxlIHdpdGggdGhlIG5ldyAzLWFyZ3VtZW50IHZlcnNpb24gb3IgaXMgdGhlcmUgYW4gaW50ZXJ2ZW5pbmcgY29tbWl0IGluIGEgc2VyaWVzLCBvciBpcyBpdCBhIGJ1ZyBmaXggb3IgdGVzdD8KCldoeSBkb2VzIHRoaXMgbWF0dGVyIGZvciBLTVNBTiB2cy4gS0FTQU4/IEkgbmVlZCB0byBhcHBseSB0aGUgbG9naWMuIFJlbWVtYmVyLCBLQVNBTiBhbHJlYWR5IGNvdmVycyBhIHdpZGUgYXJyYXkgb2YgbWVtb3J5IGlzc3Vlczogb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcywgZXRjLiBMT0NLREVQIGNhdGNoZXMgbG9ja2luZyBidWdzLCBVQi1zYW5pdGl6ZXJzIGRvIHRoZWlyIHdvcmssIGFuZCB3ZSBoYXZlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuCgpUaGUgcnVsZSBpcyBjbGVhcjogKklmIEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2VycyBjYW4gY2F0Y2ggdGhlIGJ1ZywgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIHdhc3RlIHJlc291cmNlcyBvbiBLTVNBTi4qIEtNU0FOIGlzIGV4cGVuc2l2ZSwgc28gb25seSB1c2UgaXQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIGV4Y2x1c2l2ZWx5IGRldGVjdHMuCgpTbywgd2hlbiBkbyBJIHNldCBgTmVlZHNLTVNBTj10cnVlYD8gV2VsbCwgdGhlIHBhdGNoIG5lZWRzIHRvIGludHJvZHVjZSBvciBtb2RpZnk6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuCjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBleHBvc2Ugc3Vycm91bmRpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuCgpXaGVuIGRvIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYD8KLSBDb2RlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4KLSBTdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCkxldCYjMzk7cyBhcHBseSB0aGlzIHRvIHRoZSBwYXRjaC4gSXQgbW9kaWZpZXMgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAgaW4gYG1tL21lbW9yeS5jYCBieSBwYXNzaW5nIGBkZXRhaWxzYCB0byBgaHVnZXRsYl96YXBfYmVnaW5gLiBEb2VzIHRoaXMgdG91Y2ggYW55IGBjb3B5X3RvX3VzZXJgIGNhbGxzPyBJcyB0aGVyZSBhbiBpbmZvIGxlYWs/IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMgZnJvbSBzdGFjay9oZWFwPyBOby4gYHJhbmdlYCBpcyBpbml0aWFsaXplZCwgYW5kIGBkZXRhaWxzYCBpcyBwYXNzZWQgYXMgYSBwb2ludGVyLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBhbmQgbm8gZXhwb3N1cmVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLgoKVGhlcmVmb3JlLCAqdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzKi4gVGhlIGNvcnJlY3Qgc2V0dGluZyBoZXJlIGlzIGBOZWVkc0tNU0FOPWZhbHNlYC4KCkJlZm9yZSBJIGNvbW1pdCB0byB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOgoqICAgQXJlIHRoZXJlIGFueSBpbmZvIGxlYWtzPyBOby4KKiAgIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25zPyBOby4KKiAgIERvZXMgaXQgYWxsb2NhdGUvaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHJlYWQgbGF0ZXI/IE5vLgoqICAgRG9lcyBpdCBtb2RpZnkgYm91bmRzL2xlbmd0aHMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIEkmIzM5O2xsIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcgY2xlYXJseSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGZ1bmN0aW9uIGNhbGwgaW4gbW0vbWVtb3J5LmMgKHBhc3NpbmcgJiMzOTtkZXRhaWxzJiMzOTsgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGZ1bmN0aW9uIGNhbGwgaW4gbW0vbWVtb3J5LmMgKHBhc3NpbmcgJiMzOTtkZXRhaWxzJiMzOTsgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjMzOjA3LjQ0Nzk2NzE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwODQ3MzI5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCIsXG4gICAgXCJtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAnZGV0YWlscycgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MDcuNDQ3OTg1MzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ2Mjk1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMjk3NDZhZTBmZTMwM2NhYmEzNTE1MjNkNGE1NjMzMzZhZjY4NDc4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDg6MzM6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGVjNjNkZDYyMTJhYzUuLmIxYjM4MmQ1NTJjMzkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC0yMzA0LDcgKzIzMDQsNyBAQCB2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiBcXG4gXFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbiBcXHRcXHRcXHRcXHRhZGRyZXNzLCBlbmQpO1xcbi1cXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuK1xcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG4gXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cXHUwMDNldm1fbW0pO1xcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzowNy44MzMyNzU2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQ1NzU1MDg4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCIsXG4gICAgXCJtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZWM2M2RkNjIxMmFjNS4uYjFiMzgyZDU1MmMzOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIzMDQsNyArMjMwNCw3IEBAIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbi1cdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCk7XG4rXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xuIFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MDcuODMzMjc3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MjQ5NjIyNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkaWZmYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjaGFuZ2luZyBzb21ldGhpbmcgd2l0aGluIHRoZSBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIG5ldyBhcmd1bWVudCwgbGlrZWx5IG5hbWVkIGBkZXRhaWxzYCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24gY2FsbC4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuTXkgcHJpbWFyeSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGFyZ3VtZW50IHdhcyBhZGRlZC4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBzb21lIG5ldyBmZWF0dXJlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBvciB2aXJ0dWFsIG1lbW9yeSBhcmVhcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhcmd1bWVudCB1c2VkIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb3IgcGVyZm9ybWFuY2UgY291bnRlcnM/IEkgbmVlZCB0byBzZWUgd2hhdCBgZGV0YWlsc2AgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlLlxuXG5UbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCBjb250ZXh0LiBUaGlzIHNpbmdsZSBsaW5lIGRpZmZlcmVuY2UgaXNuJ3QgZW5vdWdoLiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29tbWl0IG1lc3NhZ2UsIGFuZCBpZGVhbGx5LCB0aGUgcmVsYXRlZCBpc3N1ZXMgb3IgZGlzY3Vzc2lvbnMuIEknbGwgbmVlZCB0byB1c2UgYGdpdCBzaG93YCB0byB2aWV3IHRoZSBjb21taXQgaW4gaXRzIGVudGlyZXR5LCBvciBpZiB0aGVyZSdzIGEgd2lkZXIgaW1wYWN0IEknbGwgaGF2ZSB0byB1c2UgZ3JlcHBlciB0byBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhbmQgcHJvamVjdC4gVGhlbiBJJ2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoaXMgY2hhbmdlIG1lYW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MjQuMDgyOTAzMTgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI0MTIyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ2LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0NzpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDk9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTQ9c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMjA6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDA0LVxcbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNTQwNi1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4tLVxcbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG4tLVxcbm1tL21lbW9yeS5jLTIyNzAtXFxubW0vbWVtb3J5LmM6MjI3MTpcXHRcXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxubW0vbWVtb3J5LmMtMjI3Mi1cXHRcXHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTIzMDYtXFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG5tbS9tZW1vcnkuYzoyMzA3OlxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMzA4LVxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MjUuNzA1MzIzODU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM1OTE0MDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYG1tL21lbW9yeS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjMwNC4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZSBhbGxvY2F0aW9uLCB3aGljaCBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgYmV0dGVyLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIGhvdyB0aGUga2VybmVsIHJlcXVlc3RzLCBtYXBzLCBhbmQgbWFuYWdlcyB0aGVzZSBsYXJnZSBtZW1vcnkgcmVnaW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZnJhZ21lbnRhdGlvbiwgYW5kIG1heWJlIGV2ZW4gc29tZSBkZXRhaWxzIG9uIGVycm9yIGhhbmRsaW5nLlxuXG5UbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUsIEknbGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZm9jdXMgb24gbGluZXMgMjQ0LTI2MCBhbmQgMzE0LTMyNS4gVGhlc2UgbGluZXMgbGlrZWx5IGNvbnRhaW4gdGhlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBhc3NvY2lhdGVkIHdpdGggSHVnZVRMQiBvcGVyYXRpb25zLiBUaGlzIHdpbGwgaW5jbHVkZSBpbXBvcnRhbnQgc3R1ZmYsIGxpa2UgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgaHVnZSBwYWdlcyB0aGVtc2VsdmVzLCByZWxldmFudCBmbGFncywgYW5kIHBlcmhhcHMgc29tZSBpbnRlcm5hbCBkYXRhIHR5cGVzIHVzZWQgdG8gbWFuYWdlIHRoZW0uIE15IGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZGluZyBibG9ja3MgYW5kIGRhdGEgbW9kZWxzIGludm9sdmVkIGluIGhhbmRsaW5nIGh1Z2UgcGFnZXMgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byBrbm93IHRoZSBiYXNpYyBpbnRlcmZhY2Ugb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjMzOjI4LjA2NDQ2Njc5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjkwOlxcdCAqXFxuMjI5MTpcXHQgKiBJZiBAZGV0YWlscyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMuXFxuMjI5MjpcXHQgKi9cXG4yMjkzOlxcdHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuMjI5NDpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbjIyOTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuMjI5NjpcXHR7XFxuMjI5NzpcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBzaXplO1xcbjIyOTg6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yMjk5OlxcdFxcbjIzMDA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCF0bGIgfHwgdGxiLVxcdTAwM2VtbSAhPSB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzAxOlxcdFxcbjIzMDI6XFx0XFx0aWYgKHVubGlrZWx5KCFzaXplKSlcXG4yMzAzOlxcdFxcdFxcdHJldHVybjtcXG4yMzA0OlxcdFxcbjIzMDU6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIzMDY6XFx0XFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG4yMzA3OlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG4yMzA4OlxcdFxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzA5OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuMjMxMDpcXHRcXHQvKlxcbjIzMTE6XFx0XFx0ICogdW5tYXAgJ2FkZHJlc3MtZW5kJyBub3QgJ3JhbmdlLnN0YXJ0LXJhbmdlLmVuZCcgYXMgcmFuZ2VcXG4yMzEyOlxcdFxcdCAqIGNvdWxkIGhhdmUgYmVlbiBleHBhbmRlZCBmb3IgaHVnZXRsYiBwbWQgc2hhcmluZy5cXG4yMzEzOlxcdFxcdCAqL1xcbjIzMTQ6XFx0XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xcbjIzMTU6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuMjMxNjpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHtcXG4yMzE3OlxcdFxcdFxcdC8qXFxuMjMxODpcXHRcXHRcXHQgKiBmbHVzaCB0bGIgYW5kIGZyZWUgcmVzb3VyY2VzIGJlZm9yZSBodWdldGxiX3phcF9lbmQoKSwgdG9cXG4yMzE5OlxcdFxcdFxcdCAqIGF2b2lkIGNvbmN1cnJlbnQgcGFnZSBmYXVsdHMnIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4yMzIwOlxcdFxcdFxcdCAqL1xcbjIzMjE6XFx0XFx0XFx0dGxiX2ZpbmlzaF9tbXUodGxiKTtcXG4yMzIyOlxcdFxcdFxcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xcbjIzMjM6XFx0XFx0XFx0dGxiX2dhdGhlcl9tbXUodGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzI0OlxcdFxcdH1cXG4yMzI1OlxcdH1cXG4yMzI2OlxcdFxcbjIzMjc6XFx0LyoqXFxuMjMyODpcXHQgKiB6YXBfdm1hX3JhbmdlIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gYSB2bWEgcmFuZ2VcXG4yMzI5OlxcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzoyOC4wNjQ3MjQ1NTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjQyMzExMTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2VUTEIgSGVhZGVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSHVnZVRMQiBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxldmFudCBtYWNyb3MuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyAyNDAtMjcwIGFuZCB0aGVuIGNpcmNsaW5nIGJhY2sgdG8gbGluZXMgMzEwLTMzNS4gSSdtIHByZXR0eSBzdXJlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MgYXJlIGxvY2F0ZWQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBlbGVtZW50cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLi4uIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MzQuNzA3MDM4MjM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHR1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCk7XFxuIDI0MTpcXHRpbnQgaHVnZV9wbWRfdW5zaGFyZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMjQyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbiAyNDM6XFx0dm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjQ0OlxcdHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNDU6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCk7XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI0ODpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG4gMjQ5OlxcdGV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNTM6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbiAyNTY6XFx0XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbiAyNTc6XFx0fVxcbiAyNTg6XFx0XFxuIDI1OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNjA6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiAyNjE6XFx0e1xcbiAyNjI6XFx0XFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbiAyNjM6XFx0XFx0XFx0X19odWdldGxiX3phcF9lbmQodm1hLCBkZXRhaWxzKTtcXG4gMjY0OlxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNjc6XFx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI2ODpcXHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNjk6XFx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzA6XFx0aW50IGh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzE6XFx0dm9pZCBodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjcyOlxcdHZvaWQgaHVnZXRsYl92bWFfbG9ja19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTtcXG4gMjczOlxcdGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMjc0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IG5ld3Byb3QsXFxuIDI3NTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNwX2ZsYWdzKTtcXG4gMjc2OlxcdHZvaWQgaHVnZXRsYl91bnNoYXJlX2FsbF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjc3OlxcdHZvaWQgZml4dXBfaHVnZXRsYl9yZXNlcnZhdGlvbnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzg6XFx0dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjMzOjM0LjcwNzE0MjE4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NzUyOTIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBhIERpc2NyZXBhbmN5IGluIGBodWdldGxiX3phcF9iZWdpbmAncyBBcmd1bWVudCBMaXN0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBmdW5jdGlvbiBkZWZpbml0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBJdCBsb29rcyBsaWtlIGl0IHRha2VzIGEgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAgcG9pbnRlciBhbmQgdHdvIGB1bnNpZ25lZCBsb25nYCBwb2ludGVycywgYHN0YXJ0YCBhbmQgYGVuZGAuIFRoZSBkZWZpbml0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgZXhwZWN0ZWQuXG5cbkJ1dCB0aGVuLCB3aGVuIEkgbG9va2VkIGF0IHRoZSBjYWxsIGluIGBtbS9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBhdCBsaW5lIDIzMDcsIHRoZSBjYWxsIHNpdGUgc2VlbXMgdG8gYmUgdXNpbmcgKnRocmVlKiBhcmd1bWVudHMsIHdpdGggdGhlIGluY2x1c2lvbiBvZiBgZGV0YWlsc2A6IGBodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO2AuXG5cblRoaXMgaXMgYSByZWQgZmxhZy4gRG9lcyBgaHVnZXRsYl96YXBfYmVnaW5gIHRha2UgdGhyZWUgb3IgZm91ciBhcmd1bWVudHM/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgZXhwbGFpbiB0aGlzIGRpdmVyZ2VuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHJpZ2h0LCBvciBpZiBpdCdzIGEgYnVnLiBTaW5jZSBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBgZ2l0IGxvZ2AgYXQgdGhlIG1vbWVudCwgSSdsbCBuZWVkIHRvIHVzZSB3aGF0IEkgaGF2ZS4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiBhZ2FpbiBmb3IgdGhlIGZvdXJ0aCBhcmd1bWVudC4gVGhlbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBodWdldGxiX3phcF9iZWdpbmAgaXMgZGVmaW5lZCB0byBzZWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZ1bmN0aW9uIGRlZmluaXRpb25zLiBJJ2xsIGFsc28gdHJ5IGEgYnJvYWRlciBncmVwIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uIGFuZCBpZiB0aGV5J3JlIGNvbnNpc3RlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo0MC4xODI0Mzg4MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzIyMjA2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ2LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0NzpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDk9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTQ9c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMjA6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDA0LVxcbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNTQwNi1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4tLVxcbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG4tLVxcbm1tL21lbW9yeS5jLTIyNzAtXFxubW0vbWVtb3J5LmM6MjI3MTpcXHRcXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxubW0vbWVtb3J5LmMtMjI3Mi1cXHRcXHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTIzMDYtXFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG5tbS9tZW1vcnkuYzoyMzA3OlxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMzA4LVxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6NDIuMDU0NjY5OTY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Njg5OTA1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBIdWdlVExCIElzc3VlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzLi4uIEknbSBwcmV0dHkgc3VyZSBJJ3ZlIG5hcnJvd2VkIGRvd24gdGhlIGFyZWEgb2YgY29uY2VybiwgYnV0IGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBoZWFkZXIgZmlsZSBpcyB3YXJyYW50ZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBnYW5kZXIgYXQgbGluZXMgMzE1IHRocm91Z2ggMzMwLiBJdCdzIGEga2V5IHNwb3Qgd2hlcmUgc29tZSBvZiB0aGUgY29yZSBIdWdlVExCIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGFyZSBwcm9iYWJseSBkZWNsYXJlZCwgYW5kIGl0J3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgcmUtY2hlY2sgdG8gZW5zdXJlIG5vdGhpbmcgcmVsYXRlZCB0byB0aGUgcm9vdCBjYXVzZSBoYXMgc2xpcHBlZCBieS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBldmVuIGlmIGl0IGZlZWxzIHJlZHVuZGFudCwgd2hlbiBkaWFnbm9zaW5nIGEgdHJpY2t5IG1lbW9yeSBpc3N1ZS4gSnVzdCB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHdoYXRldmVyJ3MgaGFwcGVuaW5nIGlzbid0IGEgc2ltcGxlIG1pc2NvbmZpZ3VyYXRpb24gb3IgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuIFRpbWUgdG8gcHVsbCB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo0NS4wMjM2NjQzNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdH1cXG4gMzI1OlxcdFxcbiAzMjY6XFx0c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2VuZChcXG4gMzI3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiAzMjk6XFx0e1xcbiAzMzA6XFx0fVxcbiAzMzE6XFx0XFxuIDMzMjpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsXFxuIDMzMzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcXG4gMzM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbiAzMzU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpXFxuIDMzNjpcXHR7XFxuIDMzNzpcXHRcXHRCVUcoKTtcXG4gMzM4OlxcdFxcdHJldHVybiAwO1xcbiAzMzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo0NS4wMjM3ODE3NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcxNDI1NzgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb21waWxhdGlvbiBFcnJvciBEZXRlY3RlZDogQSBEZWVwIERpdmUgaW50byBhIFBvdGVudGlhbCBCdWcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGlzIGRpZmYuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSByZWQgZmxhZyB3YXZpbmcgaW4gdGhlIHdpbmQuIFRoZSBjaGFuZ2UgdG8gYGh1Z2V0bGJfemFwX2JlZ2luYCBpcyBpbW1lZGlhdGVseSBjb25jZXJuaW5nLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBjYWxsIHRvb2sgdGhyZWUgYXJndW1lbnRzIGFuZCBub3cgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhZGQgYSBmb3VydGg6IGBodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO2AuIFRoYXQncyBhIGNsYXNzaWMgQyBjb21waWxlLXRpbWUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4uIFwiVG9vIG1hbnkgYXJndW1lbnRzIHRvIGZ1bmN0aW9uXCIhXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBJIGdvIHN0cmFpZ2h0IHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBgaHVnZXRsYl96YXBfYmVnaW5gLCB3aGljaCwgYmFzZWQgb24gdGhlIGluY2x1ZGUgcGF0aCwgc2hvdWxkIGJlIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIEFuZCB0aGVyZSBpdCBpcywgdHdpY2UgZXZlbi4gSXQgdGFrZXMgdGhlIGZhbWlsaWFyIHRocmVlIGFyZ3VtZW50cywgYXMgSSBleHBlY3RlZC4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZSwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGNvbnNpc3RlbnQ6IHRocmVlIGFyZ3VtZW50cy5cblxuU28sIHRoZSBwYXRjaCAqd2lsbCogY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvci4gVGhpcyByYWlzZXMgc29tZSBzZXJpb3VzIHF1ZXN0aW9ucy4gSXMgdGhpcyBhIGJyb2tlbiBwYXRjaD8gRGlkIHNvbWVvbmUgbWlzcyBzb21ldGhpbmc/IEl0J3MgZGVmaW5pdGVseSBhIGJ1ZyBpbiB0aGUgcGF0Y2ggdW5kZXIgcmV2aWV3LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGxhcmdlciBwaWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBBY2NvcmRpbmcgdG8gdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBJdCdzIGluIGBtbS9tZW1vcnkuY2AsIHdoaWNoIHNjcmVhbXMgXCJjb3JlIG1lbW9yeSBtYW5hZ2VtZW50XCIuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHBhcnQgb2YgYSBjb3JlIHN1YnN5c3RlbSwgYW5kIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLCBhbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZSB0aGlzLCBzaG91bGQgYmUgZnV6emVkLiBBbmQgdGhpcyAqaXMqIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBmdW5jdGlvbiBjYWxsLCB3aGljaCBzaG91bGQgbm93IGJlIGZsYWdnZWQuXG5cbkJ1dCwgYmVmb3JlIEkgY2FuIG1ha2UgYSBmaW5hbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIGNhc2Ugb2YgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6NTAuNzM4MDQyMDQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MzA3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInphcF92bWFfcmFuZ2VfYmF0Y2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTU5Mj1zdHJ1Y3QgemFwX2RldGFpbHM7XFxubW0vaW50ZXJuYWwuaDo1OTM6dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9pbnRlcm5hbC5oLTU5NC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWFkdmlzZS5jPTg2Mz1zdGF0aWMgbG9uZyBtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWEoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtODcwLVxcbm1tL21hZHZpc2UuYzo4NzE6XFx0emFwX3ZtYV9yYW5nZV9iYXRjaGVkKG1hZHZfYmVoYXZpb3ItXFx1MDAzZXRsYiwgbWFkdl9iZWhhdmlvci1cXHUwMDNldm1hLFxcbm1tL21hZHZpc2UuYy04NzItXFx0XFx0XFx0ICAgICAgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kIC0gcmFuZ2UtXFx1MDAzZXN0YXJ0LCBcXHUwMDI2ZGV0YWlscyk7XFxuLS1cXG5tbS9tZW1vcnkuYz0yMjU1PXZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjc5LS8qKlxcbm1tL21lbW9yeS5jOjIyODA6ICogemFwX3ZtYV9yYW5nZV9iYXRjaGVkIC0gemFwIHBhZ2UgdGFibGUgZW50cmllcyBpbiBhIHZtYSByYW5nZVxcbm1tL21lbW9yeS5jLTIyODEtICogQHRsYjogcG9pbnRlciB0byB0aGUgY2FsbGVyJ3Mgc3RydWN0IG1tdV9nYXRoZXJcXG4tLVxcbm1tL21lbW9yeS5jLTIyOTItICovXFxubW0vbWVtb3J5LmM6MjI5Mzp2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbm1tL21lbW9yeS5jLTIyOTQtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL21lbW9yeS5jPTIzMzU9dm9pZCB6YXBfdm1hX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMzQwLVxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIHZtYS1cXHUwMDNldm1fbW0pO1xcbm1tL21lbW9yeS5jOjIzNDE6XFx0emFwX3ZtYV9yYW5nZV9iYXRjaGVkKFxcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgc2l6ZSwgTlVMTCk7XFxubW0vbWVtb3J5LmMtMjM0Mi1cXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ0Mzg9c3RhdGljIGlubGluZSB2b2lkIHVubWFwX21hcHBpbmdfcmFuZ2VfdHJlZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21lbW9yeS5jLTQ0NTQtXFx0XFx0dGxiX2dhdGhlcl9tbXUoXFx1MDAyNnRsYiwgdm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vbWVtb3J5LmM6NDQ1NTpcXHRcXHR6YXBfdm1hX3JhbmdlX2JhdGNoZWQoXFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgc2l6ZSwgZGV0YWlscyk7XFxubW0vbWVtb3J5LmMtNDQ1Ni1cXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6NTIuMzQ0MzU2ODc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NTQxOTU1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgY29yZSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBjcnVjaWFsIHBvaW50czogYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgKGhhbmRsaW5nIGBNQURWX0RPTlRORUVEYCBhbmQgc2ltaWxhciBtYWR2aXNlIGNhbGxzKSwgYHphcF92bWFfcmFuZ2VgIGl0c2VsZiwgYW5kIGB1bm1hcF9tYXBwaW5nX3JhbmdlX3RyZWVgICh3aGljaCBjb3ZlcnMgdHJ1bmNhdGlvbiBhbmQgYHVubWFwX21hcHBpbmdfcmFuZ2VgKS4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiaGlnaCB1c2VyLXNwYWNlIHJlYWNoYWJpbGl0eS5cIiBTcGVjaWZpY2FsbHksIHRoaW5rIGBtYWR2aXNlYCwgZXNwZWNpYWxseSBgTUFEVl9ET05UTkVFRGAsIGFsc28gYHRydW5jYXRlYCwgYGZhbGxvY2F0ZWAgYW5kIHRoZSBldmVyLXByZXNlbnQgYG11bm1hcGAsIGFuZCB0aGF0J3MgKmJlZm9yZSogY29uc2lkZXJpbmcgdGhlIGVmZmVjdHMgb24gaHVnZXRsYiBwYWdlcyBvciBldmVuIHN0YW5kYXJkIHBhZ2VzLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHByZXR0eSBiaWcuXG5cbkhtbSwgdGhpcyBgZGV0YWlsc2AgcGFyYW1ldGVyIHBhc3NlZCB0byBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIG1ha2luZyBtZSBwYXVzZS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGdldHMgdXNlZC4gTGV0J3Mgc2VlLi4uIEFoLCB0aGVyZSBpdCBpcywgYGh1Z2V0bGJfemFwX2VuZGAgb24gbGluZSAyMzIyLiBJdCBsb29rcyBsaWtlIGl0IGlzIGFsc28gcGFzc2VkIHRvIGBfX3phcF92bWFfcmFuZ2VgIGxpa2Ugc286XG5cbmBgYGNcbmh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5fX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xuYGBgXG5cbkkgc3VzcGVjdCB0aGUgYXV0aG9yICptZWFudCogdG8gcGFzcyBgZGV0YWlsc2AgaGVyZSwgb3IgdGhlcmUncyBhIHR5cG8sIGJ1dCBlaXRoZXIgd2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZCgpYCBpbiBgbW0vbWVtb3J5LmNgLiBUaGF0J3MgdGhlIGtleS5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggYFdvcnRoRnV6emluZ2A/IExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOiBDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlwiXG5cbkJpbmdvLiBUaGlzIHRvdWNoZXMgYG1tL21lbW9yeS5jYCB3aXRoaW4gYHphcF92bWFfcmFuZ2VfYmF0Y2hlZCgpYC4gSXQncyBhIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBJdCdzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgdmlhIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYCwgYGZ0cnVuY2F0ZWAsIGBmYWxsb2NhdGVgLCBgbXVubWFwYCwgZXRjLiBTbywgdGhlIGFuc3dlciBpcyBcInllcyxcIiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuXG5cbk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBvciBgQ09ORklHX01NVWAgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBgX196YXBfdm1hX3JhbmdlYCB3aWxsIGJlIHJ1biwgd2hpY2ggc2VlbXMgc3RhbmRhcmQgZW5vdWdoLiBJIHNob3VsZCBjaGVjayBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIHRvIHNlZSB3aGV0aGVyIGBodWdldGxiX3phcF9iZWdpbmAgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzLlxuXG5OZXh0IHN0ZXA6IGRlZmluZSB3aGF0IGZvY3VzIHN5bWJvbHMgd2lsbCBiZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo1Ny44OTg1NTU5ODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjkwODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19IVUdFVExCX1BBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjM9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI4MD11bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yODEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjgyOiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjgzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDYzPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpIHt9XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDY0LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ2NTojZW5kaWYgLyogIUNPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00NjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01ODI9ZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTk2LSAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjU5NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU5OC0jZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02NDk9SFBBR0VGTEFHKENtYSwgY21hKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY1MC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2NTE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02NTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMDgyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEwODYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTA4NzojZWxzZVxcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDg4LXN0cnVjdCBoc3RhdGUge307XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMzA0PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2Jvb3RtZW1fc3RydWN0X3BhZ2VfaW5pdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwNi19XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMwNzojZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwOC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMzA5PXN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqaHVnZV9wdGVfbG9jayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxOC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzE5OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NNQSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzIwLWV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo1Ny45NDgyNDk1NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM4NjQyMjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYEhVR0VUTEJfUEFHRWAgU3VwcG9ydCBhbmQgU3ltYm9sIEluY2x1c2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGludGVncmF0ZSBmdXp6aW5nIGZvciB0aGUgYEhVR0VUTEJfUEFHRWAgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpcyBpbmNsdWRlZCB3aXRoaW4gdGhlIGBGb2N1c1N5bWJvbHNgIHNldC4gVGhpcyBpcyBrZXkgYmVjYXVzZSB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgaXMgY2VudHJhbCB0byB0aGlzIGxvZ2ljLlxuXG5Ob3csIHdoYXQgKnNob3VsZCogYmUgaW4gYEZvY3VzU3ltYm9sc2A/IExldCdzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LiBPYnZpb3VzbHksIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgbXVzdC4gVGhlbiwgdGhlIGRpcmVjdCBjYWxsZXIgYHphcF92bWFfcmFuZ2VgLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhpcyByYW5nZSwgc3VjaCBhcyBgX19odWdldGxiX3phcF9iZWdpbmAgYXJlIGRlZmluaXRlbHkgY29udGVuZGVycy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBzaW5jZSBpdCBjYWxscyBvbiB0aGlzIHNlcXVlbmNlLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSB1YmlxdWl0eSBvZiB0aGVzZSBzeW1ib2xzIGlzIGluIG9yZGVyLiBJdCBsb29rcyBsaWtlIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGluZGVlZCBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgdG8gYmF0Y2hlZCB6YXBwaW5nIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBgbWFkdmlzZSBET05UTkVFRGAsIHRydW5jYXRlLCBhbmQgaHVnZXRsYiB1bm1hcC4gU2ltaWxhcmx5LCBgX19odWdldGxiX3phcF9iZWdpbmAgaXMgaHVnZXRsYi1zcGVjaWZpYy4gYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgYW5kIHRoZSByYW5nZSBjYWxsZXIgYHphcF92bWFfcmFuZ2VgIGFyZSBhbHNvIG5vbi11YmlxdWl0b3VzLiBHb29kLCB0aGF0IG1ha2VzIHRoZSBkZWNpc2lvbiBlYXNpZXIuXG5cbk5vdywgbGV0J3MgdHJpcGxlLWNoZWNrIGFsbCB0aGUgcmVxdWlyZW1lbnRzOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCB0byBgW1wiSFVHRVRMQl9QQUdFXCJdYC4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJJ20gbGVhbmluZyB0b3dhcmRzIGBbXCJ6YXBfdm1hX3JhbmdlX2JhdGNoZWRcIiwgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCJdYCwgYnV0IEkgbWF5IGFsc28gaW5jbHVkZSBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBhcyB3ZWxsLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGVzZSBzeW1ib2xzIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZnVuY3Rpb25hbGl0eSBhZmZlY3RlZCBieSB0aGUgY29uZmlndXJhdGlvbi5cblxuRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgY29uZmlncyBhbmQgc3ltYm9sIG5hbWVzLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gb24gc29saWQgZ3JvdW5kLiBMb2NhdGlvbiBzZWVtcyBjb3JyZWN0OiBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpbiBgbW0vbWVtb3J5LmNgLCBgX19odWdldGxiX3phcF9iZWdpbmAgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBpbiBgbW0vbWFkdmlzZS5jYC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjI0LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDowMi4zMzQ2NzQ0OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDEwNjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCIsXG4gICAgXCJtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInphcF92bWFfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwiX19odWdldGxiX3phcF9iZWdpblwiLFxuICAgIFwibWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzQ6MDIuNDA4Nzg4NzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEyMzkwMTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjAyLjQwOTIxNTcwMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MTIzNDcwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGZ1bmN0aW9uIGNhbGwgaW4gbW0vbWVtb3J5LmMgKHBhc3NpbmcgJ2RldGFpbHMnIHRvIGh1Z2V0bGJfemFwX2JlZ2luIGluIHphcF92bWFfcmFuZ2VfYmF0Y2hlZCkuIFRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgLyBodWdldGxiIHVubWFwcGluZyBsb2dpYyBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb3B5aW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBoYW5kbGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIGFsdGVyaW5nIGRhdGEgbGVuZ3Rocy9ib3VuZHMgY2hlY2tpbmcgb3ZlciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gTU0gb3BlcmF0aW9ucyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMsIGxvY2tpbmcgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvbmZpZ3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZWM2M2RkNjIxMmFjNS4uYjFiMzgyZDU1MmMzOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIzMDQsNyArMjMwNCw3IEBAIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbi1cdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCk7XG4rXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xuIFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzQ6MDIuNDA5MjE2NjAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjU3NzIxODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRpbnkgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIGlzIGEgc21hbGwgb25lLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdOKAmXMgZm9jdXNlZCBvbiBhIHZlcnkgc3BlY2lmaWMgYXJlYSwganVkZ2luZyBieSB0aGUgY29udGV4dC4gSXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBIdWdlVExCIHBhZ2VzLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGEgbWlub3IgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG1tL21lbW9yeS5jYCBmaWxlLiBJIHNlZSB0aGUgZGlmZiBzaG93cyB0aGF0IHRoZSBgaHVnZXRsYl96YXBfYmVnaW5gIGZ1bmN0aW9uIGlzIHJlY2VpdmluZyBhIG5ldyBhcmd1bWVudCwgYGRldGFpbHNgLiBMZXQncyBhc3N1bWUgdGhhdCBgZGV0YWlsc2AgY29udGFpbnMgdXNlZnVsIGluZm87IGl0J3MgYSBnb29kIGFzc3VtcHRpb24uXG5cbkdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcywgYGh1Z2V0bGJfemFwX2JlZ2luYCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzdGFydCBvZiBhIFwiemFwXCIgb3BlcmF0aW9uLCByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMsIGFuZCBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpcyBhIGJhdGNoZWQgdmVyc2lvbiBvZiBhIFwiemFwIHJhbmdlXCIgb3BlcmF0aW9uLCBsaWtlbHkgaW52b2x2aW5nIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKS4gVGhlIGNoYW5nZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBmb3IgYGh1Z2V0bGJfemFwX2JlZ2luYCBpcyB3aGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGF0IHRoZSBcImJlZ2luXCIgb3BlcmF0aW9uIG5vdyBuZWVkcyBhZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gb3IgcGFyYW1ldGVycy4gUGVyaGFwcyB0aGlzIGBkZXRhaWxzYCBzdHJ1Y3QgaXMgYSBuZXcgd2F5IHRvIGNvbnZleSBmbGFncywgb3IgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyByZWxldmFudCBtZXRhZGF0YSBhYm91dCB0aGUgVk1BIGJlaW5nIHphcHBlZCwgb3IgdGhlIHJlYXNvbiBiZWhpbmQgdGhlIG9wZXJhdGlvbi4gXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBjaGFuZ2UuIEknbGwgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYm90aCBgaHVnZXRsYl96YXBfYmVnaW5gIGFuZCBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCwgYWxvbmcgd2l0aCB0aGUgYGRldGFpbHNgIGFyZ3VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleS4gSSdsbCBjaGVjayBob3cgYGRldGFpbHNgIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LCBhIGJ1ZyBmaXgsIG9yIGV2ZW4gYSBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZSBtYW5hZ2VtZW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGRlZmluaXRpb24gb2YgYGh1Z2V0bGJfemFwX2JlZ2luYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjE1LjA2Njk0MjM1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyOTQ2NzAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX3phcF9iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDQ9dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjQ3OmV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ4LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0OT1leHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1MS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTI6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1My1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTUtXFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1NjpcXHRcXHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzE5LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjMyMDpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzIxLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTUyNDU9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0MDQtXFxubW0vaHVnZXRsYi5jOjU0MDU6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01NDA2LVxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxubW0vbWVtb3J5LmM9MjI1NT12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxcbi0tXFxubW0vbWVtb3J5LmMtMjI3MC1cXG5tbS9tZW1vcnkuYzoyMjcxOlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKTtcXG5tbS9tZW1vcnkuYy0yMjcyLVxcdFxcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNmRldGFpbHMpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjI5Mz12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjMwNi1cXHRcXHRcXHRcXHRhZGRyZXNzLCBlbmQpO1xcbm1tL21lbW9yeS5jOjIzMDc6XFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xcbm1tL21lbW9yeS5jLTIzMDgtXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cXHUwMDNldm1fbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoxNi41OTY0MTg4MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1MDUwNTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0YXNrLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSByZWxldmFudCBmaWVsZDpcblxuKipEaXZpbmcgaW50byBIdWdlVExCIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHVnZVRMQnMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtb3J5LmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDIyNTAgdGhyb3VnaCAyMzIwLiBUaGF0IHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpZXcgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLCBsaWtlbHkgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24sIGZyZWVpbmcsIG9yIGZhdWx0IGhhbmRsaW5nIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHBvdGVudGlhbGx5IHNvbWUgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGNydWNpYWwgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBwaHlzaWNhbC10by12aXJ0dWFsIG1hcHBpbmdzLlxuXG5UaGVuLCBJJ2xsIHN3aXRjaCBnZWFycyBhbmQgY3JhY2sgb3BlbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBjaGVja2luZyBsaW5lcyAyNDAtMzMwLiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSwgc28gaXQnbGwgZXhwb3NlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgcmVsZXZhbnQgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgdGhlIEh1Z2VUTEIgYmVoYXZpb3IuIFRoaXMgaXMgdGhlIGJsdWVwcmludDsgdGhpcyBpcyB3aGVyZSBJJ2xsIHNlZSB0aGUgbGF5b3V0IG9mIHRoZSBgaHVnZXRsYl9jZ3JvdXBgLCB0aGUgYGhzdGF0ZWAgc3RydWN0LCBvciByZWxldmFudCBkZWZpbml0aW9ucyBvZiBob3cgSHVnZVRMQiBwYWdlIHNpemUgaXMgbWFuYWdlZC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSByZXByZXNlbnQgdGhlIGh1Z2UgcGFnZSBzaXplcywgYW55IGFzc29jaWF0ZWQgZmxhZ3MsIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlIGF2YWlsYWJsZSBIdWdlVExCIHJlc291cmNlcy4gVGhpcyB3aWxsIGxpa2VseSBpbGx1bWluYXRlIHRoZSBkZXRhaWxzIGJlaGluZCB0aGUgY29yZSBmdW5jdGlvbnMgSSBzZWUgaW4gYG1tL21lbW9yeS5jYC4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJuIGhvdyBIdWdlVExCIHBhZ2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoxOS42NDY5MzIwMTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNTA6XFx0ICogdW5tYXBfdm1hcygpIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZmx1c2ggdGhlIHdob2xlIHVubWFwcGVkIGFkZHJlc3NcXG4yMjUxOlxcdCAqIHJhbmdlIGFmdGVyIHVubWFwX3ZtYXMoKSByZXR1cm5zLiAgU28gdGhlIG9ubHkgcmVzcG9uc2liaWxpdHkgaGVyZSBpcyB0b1xcbjIyNTI6XFx0ICogZW5zdXJlIHRoYXQgYW55IHRodXMtZmFyIHVubWFwcGVkIHBhZ2VzIGFyZSBmbHVzaGVkIGJlZm9yZSB1bm1hcF92bWFzKClcXG4yMjUzOlxcdCAqIGRyb3BzIHRoZSBsb2NrIGFuZCBzY2hlZHVsZXMuXFxuMjI1NDpcXHQgKi9cXG4yMjU1OlxcdHZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxuMjI1NjpcXHR7XFxuMjI1NzpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4yMjU4OlxcdFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuMjI1OTpcXHRcXHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcXG4yMjYwOlxcdFxcdFxcdC56YXBfZmxhZ3MgPSBaQVBfRkxBR19EUk9QX01BUktFUiB8IFpBUF9GTEFHX1VOTUFQLFxcbjIyNjE6XFx0XFx0fTtcXG4yMjYyOlxcdFxcbjIyNjM6XFx0XFx0dm1hID0gdW5tYXAtXFx1MDAzZWZpcnN0O1xcbjIyNjQ6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX1VOTUFQLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIyNjU6XFx0XFx0XFx0XFx0XFx0dW5tYXAtXFx1MDAzZXZtYV9zdGFydCwgdW5tYXAtXFx1MDAzZXZtYV9lbmQpO1xcbjIyNjY6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFx1MDAyNnJhbmdlKTtcXG4yMjY3OlxcdFxcdGRvIHtcXG4yMjY4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtYXgodm1hLVxcdTAwM2V2bV9zdGFydCwgdW5tYXAtXFx1MDAzZXZtYV9zdGFydCk7XFxuMjI2OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IG1pbih2bWEtXFx1MDAzZXZtX2VuZCwgdW5tYXAtXFx1MDAzZXZtYV9lbmQpO1xcbjIyNzA6XFx0XFxuMjI3MTpcXHRcXHRcXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxuMjI3MjpcXHRcXHRcXHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4yMjczOlxcdFxcdFxcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIFxcdTAwMjZkZXRhaWxzKTtcXG4yMjc0OlxcdFxcdFxcdHZtYSA9IG1hc19maW5kKHVubWFwLVxcdTAwM2VtYXMsIHVubWFwLVxcdTAwM2V0cmVlX2VuZCAtIDEpO1xcbjIyNzU6XFx0XFx0fSB3aGlsZSAodm1hKTtcXG4yMjc2OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChcXHUwMDI2cmFuZ2UpO1xcbjIyNzc6XFx0fVxcbjIyNzg6XFx0XFxuMjI3OTpcXHQvKipcXG4yMjgwOlxcdCAqIHphcF92bWFfcmFuZ2VfYmF0Y2hlZCAtIHphcCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gYSB2bWEgcmFuZ2VcXG4yMjgxOlxcdCAqIEB0bGI6IHBvaW50ZXIgdG8gdGhlIGNhbGxlcidzIHN0cnVjdCBtbXVfZ2F0aGVyXFxuMjI4MjpcXHQgKiBAdm1hOiB0aGUgdm1hIGNvdmVyaW5nIHRoZSByYW5nZSB0byB6YXBcXG4yMjgzOlxcdCAqIEBhZGRyZXNzOiBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSByYW5nZSB0byB6YXBcXG4yMjg0OlxcdCAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gemFwXFxuMjI4NTpcXHQgKiBAZGV0YWlsczogZGV0YWlscyBzcGVjaWZ5aW5nIHphcHBpbmcgYmVoYXZpb3JcXG4yMjg2OlxcdCAqXFxuMjI4NzpcXHQgKiBAdGxiIG11c3Qgbm90IGJlIE5VTEwuIFRoZSBwcm92aWRlZCBhZGRyZXNzIHJhbmdlIG11c3QgYmUgZnVsbHlcXG4yMjg4OlxcdCAqIGNvbnRhaW5lZCB3aXRoaW4gQHZtYS4gSWYgQHZtYSBpcyBmb3IgaHVnZXRsYiwgQHRsYiBpcyBmbHVzaGVkIGFuZFxcbjIyODk6XFx0ICogcmUtaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbi5cXG4yMjkwOlxcdCAqXFxuMjI5MTpcXHQgKiBJZiBAZGV0YWlscyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMuXFxuMjI5MjpcXHQgKi9cXG4yMjkzOlxcdHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuMjI5NDpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbjIyOTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuMjI5NjpcXHR7XFxuMjI5NzpcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBzaXplO1xcbjIyOTg6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yMjk5OlxcdFxcbjIzMDA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCF0bGIgfHwgdGxiLVxcdTAwM2VtbSAhPSB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzAxOlxcdFxcbjIzMDI6XFx0XFx0aWYgKHVubGlrZWx5KCFzaXplKSlcXG4yMzAzOlxcdFxcdFxcdHJldHVybjtcXG4yMzA0OlxcdFxcbjIzMDU6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIzMDY6XFx0XFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG4yMzA3OlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG4yMzA4OlxcdFxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzA5OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuMjMxMDpcXHRcXHQvKlxcbjIzMTE6XFx0XFx0ICogdW5tYXAgJ2FkZHJlc3MtZW5kJyBub3QgJ3JhbmdlLnN0YXJ0LXJhbmdlLmVuZCcgYXMgcmFuZ2VcXG4yMzEyOlxcdFxcdCAqIGNvdWxkIGhhdmUgYmVlbiBleHBhbmRlZCBmb3IgaHVnZXRsYiBwbWQgc2hhcmluZy5cXG4yMzEzOlxcdFxcdCAqL1xcbjIzMTQ6XFx0XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xcbjIzMTU6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuMjMxNjpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHtcXG4yMzE3OlxcdFxcdFxcdC8qXFxuMjMxODpcXHRcXHRcXHQgKiBmbHVzaCB0bGIgYW5kIGZyZWUgcmVzb3VyY2VzIGJlZm9yZSBodWdldGxiX3phcF9lbmQoKSwgdG9cXG4yMzE5OlxcdFxcdFxcdCAqIGF2b2lkIGNvbmN1cnJlbnQgcGFnZSBmYXVsdHMnIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4yMzIwOlxcdFxcdFxcdCAqL1xcbjIzMjE6XFx0XFx0XFx0dGxiX2ZpbmlzaF9tbXUodGxiKTtcXG4yMzIyOlxcdFxcdFxcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xcbjIzMjM6XFx0XFx0XFx0dGxiX2dhdGhlcl9tbXUodGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzI0OlxcdFxcdH1cXG4yMzI1OlxcdH1cXG4yMzI2OlxcdFxcbjIzMjc6XFx0LyoqXFxuMjMyODpcXHQgKiB6YXBfdm1hX3JhbmdlIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gYSB2bWEgcmFuZ2VcXG4yMzI5OlxcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoxOS42NDczNzIxNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1MjMxNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBIdWdlVExCIEhlYWRlciBGaWxlcyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgSHVnZVRMQiwgd2hpY2ggbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGF0IGEgcHJldHR5IGZ1bmRhbWVudGFsIGxldmVsLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hhdCdzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgdGhlIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBmb2N1cyBvbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBsb29raW5nIGFyb3VuZCBsaW5lcyAyNDAgYW5kIDMxNCBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgbWFjcm8gZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5pdGlhbCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBmb3VuZC4gTGV0J3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGxpbmVzIHJldmVhbC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGV5J2xsIGJlIHVzZWZ1bCBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjIyLjQ5OTY5MTExOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKTtcXG4gMjQxOlxcdGludCBodWdlX3BtZF91bnNoYXJlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNDI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuIDI0MzpcXHR2b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNDQ6XFx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI0NTpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMjQ4OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xcbiAyNDk6XFx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI1MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI1MzpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXFxuIDI1NjpcXHRcXHRcXHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XFxuIDI1NzpcXHR9XFxuIDI1ODpcXHRcXG4gMjU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI2MDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuIDI2MTpcXHR7XFxuIDI2MjpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXFxuIDI2MzpcXHRcXHRcXHRfX2h1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xcbiAyNjQ6XFx0fVxcbiAyNjU6XFx0XFxuIDI2NjpcXHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI2NzpcXHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjY4OlxcdHZvaWQgaHVnZXRsYl92bWFfbG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI2OTpcXHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI3MDpcXHRpbnQgaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI3MTpcXHR2b2lkIGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzI6XFx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xcbiAyNzM6XFx0bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNzQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCxcXG4gMjc1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3BfZmxhZ3MpO1xcbiAyNzY6XFx0dm9pZCBodWdldGxiX3Vuc2hhcmVfYWxsX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzc6XFx0dm9pZCBmaXh1cF9odWdldGxiX3Jlc2VydmF0aW9ucyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI3ODpcXHR2b2lkIGh1Z2V0bGJfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuIDI3OTpcXHRcXG4gMjgwOlxcdHVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbiAyODE6XFx0XFxuIDI4MjpcXHQjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbiAyODM6XFx0XFxuIDI4NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIDI4NTpcXHR7XFxuIDI4NjpcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyODk6XFx0e1xcbiAyOTA6XFx0fVxcbiAyOTE6XFx0XFxuIDI5MjpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiAyOTM6XFx0e1xcbiAyOTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI5NTpcXHR9XFxuIDI5NjpcXHRcXG4gMjk3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4gMjk5OlxcdHtcXG4gMzAwOlxcdFxcdHJldHVybiBOVUxMO1xcbiAzMDE6XFx0fVxcbiAzMDI6XFx0XFxuIDMwMzpcXHRzdGF0aWMgaW5saW5lIGludCBodWdlX3BtZF91bnNoYXJlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuIDMwNDpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4gMzA1OlxcdHtcXG4gMzA2OlxcdFxcdHJldHVybiAwO1xcbiAzMDc6XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiAzMTA6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIDMxMTpcXHR7XFxuIDMxMjpcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXFxuIDMxNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdH1cXG4gMzI1OlxcdFxcbiAzMjY6XFx0c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2VuZChcXG4gMzI3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiAzMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoyMi40OTk4NDEyODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0NTE4NTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERpc2NyZXBhbmNpZXMgaW4gSHVnZVRMQiBVbm1hcHBpbmcqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24uLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBsaW5lOiBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYXJndW1lbnQgY291bnQuIElzIGBodWdldGxiX3phcF9iZWdpbmAgc3VwcG9zZWQgdG8gdGFrZSBmb3VyIGFyZ3VtZW50cywgYXMgaXQgYXBwZWFycyBoZXJlPyBPciBpcyB0aGVyZSBzb21ldGhpbmcgZWxzZSBnb2luZyBvbj9cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2h5IGlzIGl0IHRoYXQgYHVubWFwX3ZtYXNgIGlzIGNhbGxpbmcgYGh1Z2V0bGJfemFwX2JlZ2luYCB3aXRoIG9ubHkgdGhyZWUgYXJndW1lbnRzLCBsaWtlIHNvOiBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKTtgPyBZZXQsIGhlcmUsIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIHNlZW1zIHRvIGJlIHVzaW5nIHRoZSBmb3VyLWFyZ3VtZW50IHZlcnNpb24uIFRoaXMgaW5jb25zaXN0ZW5jeSBpcyBhIHJlZCBmbGFnLiBJdCBmZWVscyBsaWtlIEknbSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIG9yIGEgcmVjZW50IGNoYW5nZS5cblxuVG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmV2aWV3IHJlY2VudCBjb21taXRzIGFuZCBhbnkgb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGBodWdldGxiX3phcF9iZWdpbmAgaXMgdXNlZC4gVGhpcyBpcyBsaWtlbHkgYW4gb3ZlcnNpZ2h0IHRoYXQgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcyBhbmQgaXQgaXMgaW1wb3J0YW50IHRvIGZpbmQgaXQuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBoaXN0b3J5IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjI1Ljc0NTAyOTYwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTc4MTk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ni1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDgtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNTI9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XFxuLS1cXG5tbS9odWdldGxiLmM9NTI0NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTQwNC1cXG5tbS9odWdldGxiLmM6NTQwNTp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTU0MDYtXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjI3LjI5NDgyMjM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTg1MTI5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIGluIGh1Z2V0bGIuYyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBfX2h1Z2V0bGJfemFwX2JlZ2luYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3MgbmVzdGxlZCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHBsYWNlIGZvciBhbGwgdGhvc2UgSHVnZVRMQi1yZWxhdGVkIGZ1bmN0aW9ucy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTQwNSBpbiBgbW0vaHVnZXRsYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBjYWxsLCB3aGF0J3MgYmVpbmcgc2V0IHVwLCBhbmQgd2hhdCBzdGF0ZSB0aGUgc3lzdGVtIGlzIGluIHdoZW4gYF9faHVnZXRsYl96YXBfYmVnaW5gIGlzIGludm9rZWQuIEtub3dpbmcgdGhlIGxvY2FsIGNvbnRleHQgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgcHJvYmxlbSBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIEknbSBpbnZlc3RpZ2F0aW5nLiBJIGV4cGVjdCBpdCdzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHBhZ2UgdW5tYXBwaW5nIHByb2Nlc3MsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoyOS4yNTMzMzg3NDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDAwOlxcdFxcdHRsYl9lbmRfdm1hKHRsYiwgdm1hKTtcXG41NDAxOlxcdFxcbjU0MDI6XFx0XFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaCh0bGIsIHZtYSk7XFxuNTQwMzpcXHR9XFxuNTQwNDpcXHRcXG41NDA1OlxcdHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG41NDA2OlxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjU0MDc6XFx0e1xcbjU0MDg6XFx0XFx0aWYgKCF2bWEtXFx1MDAzZXZtX2ZpbGUpXFx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xcbjU0MDk6XFx0XFx0XFx0cmV0dXJuO1xcbjU0MTA6XFx0XFxuNTQxMTpcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBzdGFydCwgZW5kKTtcXG41NDEyOlxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcXG41NDEzOlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZpbGUpXFxuNTQxNDpcXHRcXHRcXHRpX21tYXBfbG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNTQxNTpcXHR9XFxuNTQxNjpcXHRcXG41NDE3OlxcdHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuNTQxODpcXHRcXHRcXHQgICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbjU0MTk6XFx0e1xcbjU0MjA6XFx0XFx0emFwX2ZsYWdzX3QgemFwX2ZsYWdzID0gZGV0YWlscyA/IGRldGFpbHMtXFx1MDAzZXphcF9mbGFncyA6IDA7XFxuNTQyMTpcXHRcXG41NDIyOlxcdFxcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKVxcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cXG41NDIzOlxcdFxcdFxcdHJldHVybjtcXG41NDI0OlxcdFxcbjU0MjU6XFx0XFx0aWYgKHphcF9mbGFncyBcXHUwMDI2IFpBUF9GTEFHX1VOTUFQKSB7XFx0LyogZmluYWwgdW5tYXAgKi9cXG41NDI2OlxcdFxcdFxcdC8qXFxuNTQyNzpcXHRcXHRcXHQgKiBVbmxvY2sgYW5kIGZyZWUgdGhlIHZtYSBsb2NrIGJlZm9yZSByZWxlYXNpbmcgaV9tbWFwX3J3c2VtLlxcbjU0Mjg6XFx0XFx0XFx0ICogV2hlbiB0aGUgdm1hX2xvY2sgaXMgZnJlZWQsIHRoaXMgbWFrZXMgdGhlIHZtYSBpbmVsaWdpYmxlXFxuNTQyOTpcXHRcXHRcXHQgKiBmb3IgcG1kIHNoYXJpbmcuICBBbmQsIGlfbW1hcF9yd3NlbSBpcyByZXF1aXJlZCB0byBzZXQgdXBcXG41NDMwOlxcdFxcdFxcdCAqIHBtZCBzaGFyaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgYXMgcGFnZSB0YWJsZXMgZm9yIHRoaXNcXG41NDMxOlxcdFxcdFxcdCAqIHVubWFwcGVkIHJhbmdlIHdpbGwgYmUgYXN5bmNocm91c2x5IGRlbGV0ZWQuICBJZiB0aGUgcGFnZVxcbjU0MzI6XFx0XFx0XFx0ICogdGFibGVzIGFyZSBzaGFyZWQsIHRoZXJlIHdpbGwgYmUgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnlcXG41NDMzOlxcdFxcdFxcdCAqIHNvbWVvbmUgZWxzZS5cXG41NDM0OlxcdFxcdFxcdCAqL1xcbjU0MzU6XFx0XFx0XFx0X19odWdldGxiX3ZtYV91bmxvY2tfd3JpdGVfZnJlZSh2bWEpO1xcbjU0MzY6XFx0XFx0fSBlbHNlIHtcXG41NDM3OlxcdFxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xcbjU0Mzg6XFx0XFx0fVxcbjU0Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjI5LjI1MzgyNDg0MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjc4ODQwNzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFdoYXQgZG9lcyBgZ2l0IGRpZmYgSEVBRH4xYCB0ZWxsIG1lPyBDYW4gSSBldmVuIGNoZWNrIHRoZSBnaXQgbG9nPyBJIG9ubHkgaGF2ZSBhIGxpbWl0ZWQgc2V0IG9mIHRvb2xzIGhlcmUsIHNvIEknbGwgd29yayB3aXRoIHdoYXQgSSd2ZSBnb3QuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGxpbmUgMjMwNy4gQWgsIEkgc2VlIHRoZSBjaGFuZ2U6IGBodWdldGxiX3phcF9iZWdpbmAgaXMgaW52b2x2ZWQuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgY29tbWl0IGNoYW5nZWQgdGhlIGZ1bmN0aW9uIGNhbGwgZnJvbSBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKWAgdG8gYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCwgZGV0YWlscylgLiAgVGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIHNob3dzIHRoYXQgYGh1Z2V0bGJfemFwX2JlZ2luYCBvcmlnaW5hbGx5IHRvb2sgb25seSB0d28gYXJndW1lbnRzLiAgU28sIHRoaXMgKm11c3QqIGJlIGFuIGFkZGl0aW9uIG9mIGFuIGFyZ3VtZW50LiBEb2VzIGl0IGV2ZW4gY29tcGlsZSB3aXRoIHRoZSBuZXcgMy1hcmd1bWVudCB2ZXJzaW9uIG9yIGlzIHRoZXJlIGFuIGludGVydmVuaW5nIGNvbW1pdCBpbiBhIHNlcmllcywgb3IgaXMgaXQgYSBidWcgZml4IG9yIHRlc3Q/XG5cbldoeSBkb2VzIHRoaXMgbWF0dGVyIGZvciBLTVNBTiB2cy4gS0FTQU4/IEkgbmVlZCB0byBhcHBseSB0aGUgbG9naWMuIFJlbWVtYmVyLCBLQVNBTiBhbHJlYWR5IGNvdmVycyBhIHdpZGUgYXJyYXkgb2YgbWVtb3J5IGlzc3Vlczogb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcywgZXRjLiBMT0NLREVQIGNhdGNoZXMgbG9ja2luZyBidWdzLCBVQi1zYW5pdGl6ZXJzIGRvIHRoZWlyIHdvcmssIGFuZCB3ZSBoYXZlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuXG5cblRoZSBydWxlIGlzIGNsZWFyOiAqSWYgS0FTQU4gb3Igc3RhbmRhcmQgZGVidWdnZXJzIGNhbiBjYXRjaCB0aGUgYnVnLCB0aGVyZSdzIG5vIHJlYXNvbiB0byB3YXN0ZSByZXNvdXJjZXMgb24gS01TQU4uKiBLTVNBTiBpcyBleHBlbnNpdmUsIHNvIG9ubHkgdXNlIGl0IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBleGNsdXNpdmVseSBkZXRlY3RzLlxuXG5Tbywgd2hlbiBkbyBJIHNldCBgTmVlZHNLTVNBTj10cnVlYD8gV2VsbCwgdGhlIHBhdGNoIG5lZWRzIHRvIGludHJvZHVjZSBvciBtb2RpZnk6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgZXhwb3NlIHN1cnJvdW5kaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzLlxuXG5XaGVuIGRvIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYD9cbi0gQ29kZSBwcmltYXJpbHkgcmlza3Mgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXG4tIFN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuTGV0J3MgYXBwbHkgdGhpcyB0byB0aGUgcGF0Y2guIEl0IG1vZGlmaWVzIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGluIGBtbS9tZW1vcnkuY2AgYnkgcGFzc2luZyBgZGV0YWlsc2AgdG8gYGh1Z2V0bGJfemFwX2JlZ2luYC4gRG9lcyB0aGlzIHRvdWNoIGFueSBgY29weV90b191c2VyYCBjYWxscz8gSXMgdGhlcmUgYW4gaW5mbyBsZWFrPyBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkLCBvciB1bmluaXRpYWxpemVkIHJlYWRzIGZyb20gc3RhY2svaGVhcD8gTm8uIGByYW5nZWAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBgZGV0YWlsc2AgaXMgcGFzc2VkIGFzIGEgcG9pbnRlci4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgYW5kIG5vIGV4cG9zdXJlcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCAqdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzKi4gVGhlIGNvcnJlY3Qgc2V0dGluZyBoZXJlIGlzIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2s6XG4qICAgQXJlIHRoZXJlIGFueSBpbmZvIGxlYWtzPyBOby5cbiogICBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9ucz8gTm8uXG4qICAgRG9lcyBpdCBhbGxvY2F0ZS9pbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8gTm8uXG4qICAgRG9lcyBpdCBtb2RpZnkgYm91bmRzL2xlbmd0aHMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBJJ2xsIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcgY2xlYXJseSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk2LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDozNi41MzI2Njc2NTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAnZGV0YWlscycgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBmdW5jdGlvbiBjYWxsIGluIG1tL21lbW9yeS5jIChwYXNzaW5nICdkZXRhaWxzJyB0byBodWdldGxiX3phcF9iZWdpbiBpbiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQpLiBUaGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC8gaHVnZXRsYiB1bm1hcHBpbmcgbG9naWMgYW5kIGRvZXMgbm90IGludm9sdmUgY29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciBhbHRlcmluZyBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIG92ZXIgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIE1NIG9wZXJhdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjb25maWdzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8tr52[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 08:31:15 +0000 UTC FinishedAt: 2026-09-05 08:34:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE" ], "series_id": "62239cdd-0901-45e4-ba20-e2ae8e212ee8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zap_vma_range_batched", "__hugetlb_zap_begin", "madvise_dontneed_single_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAmIzM5O2RldGFpbHMmIzM5OyB0byBodWdldGxiX3phcF9iZWdpbiBpbiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQpLiBUaGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC8gaHVnZXRsYiB1bm1hcHBpbmcgbG9naWMgYW5kIGRvZXMgbm90IGludm9sdmUgY29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciBhbHRlcmluZyBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIG92ZXIgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIE1NIG9wZXJhdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjb25maWdzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGVjNjNkZDYyMTJhYzUuLmIxYjM4MmQ1NTJjMzkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC0yMzA0LDcgJiM0MzsyMzA0LDcgQEAgdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4gXHRcdFx0XHRhZGRyZXNzLCBlbmQpO1xuLVx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiYjNDM7XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xuIFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDI5NzQ2YWUwZmUzMDNjYWJhMzUxNTIzZDRhNTYzMzM2YWY2ODQ3OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDg6MzM6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGVjNjNkZDYyMTJhYzUuLmIxYjM4MmQ1NTJjMzkgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0yMzA0LDcgJiM0MzsyMzA0LDcgQEAgdm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAogCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCiAJCQkJYWRkcmVzcywgZW5kKTsKLQlodWdldGxiX3phcF9iZWdpbih2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kKTsKJiM0MzsJaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCwgZGV0YWlscyk7CiAJdXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS0mZ3Q7dm1fbW0pOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZhbXA7cmFuZ2UpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGlmZmAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyB3aXRoaW4gdGhlIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGEgbmV3IGFyZ3VtZW50LCBsaWtlbHkgbmFtZWQgYGRldGFpbHNgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGludGVyZXN0aW5nLgoKTXkgcHJpbWFyeSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGFyZ3VtZW50IHdhcyBhZGRlZC4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBzb21lIG5ldyBmZWF0dXJlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBvciB2aXJ0dWFsIG1lbW9yeSBhcmVhcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhcmd1bWVudCB1c2VkIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb3IgcGVyZm9ybWFuY2UgY291bnRlcnM/IEkgbmVlZCB0byBzZWUgd2hhdCBgZGV0YWlsc2AgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlLgoKVG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgY29udGV4dC4gVGhpcyBzaW5nbGUgbGluZSBkaWZmZXJlbmNlIGlzbiYjMzk7dCBlbm91Z2guIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjb21taXQgbWVzc2FnZSwgYW5kIGlkZWFsbHksIHRoZSByZWxhdGVkIGlzc3VlcyBvciBkaXNjdXNzaW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdpdCBzaG93YCB0byB2aWV3IHRoZSBjb21taXQgaW4gaXRzIGVudGlyZXR5LCBvciBpZiB0aGVyZSYjMzk7cyBhIHdpZGVyIGltcGFjdCBJJiMzOTtsbCBoYXZlIHRvIHVzZSBncmVwcGVyIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBmaWxlIGFuZCBwcm9qZWN0LiBUaGVuIEkmIzM5O2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoaXMgY2hhbmdlIG1lYW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfemFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ5PWV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU2Olx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTctfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjMyMDpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMjEtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmM9NTI0NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTU0MDQtXG5tbS9odWdldGxiLmM6NTQwNTp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTQwNi1cdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5tbS9tZW1vcnkuYz0yMjU1PXZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG4tLVxubW0vbWVtb3J5LmMtMjI3MC1cbm1tL21lbW9yeS5jOjIyNzE6XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5tbS9tZW1vcnkuYy0yMjcyLVx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xuLS1cbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0yMzA2LVx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbm1tL21lbW9yeS5jOjIzMDc6XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjMwOC1cdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXHUwMDNldm1fbW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggc29tZSBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgbW0vbWVtb3J5LmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMzA0LiBUaGF0IHNob3VsZCBiZSB0aGUgYXJlYSBkZWFsaW5nIHdpdGggaHVnZSBwYWdlIGFsbG9jYXRpb24sIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgYmV0dGVyLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIGtlcm5lbCByZXF1ZXN0cywgbWFwcywgYW5kIG1hbmFnZXMgdGhlc2UgbGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBhbmQgbWF5YmUgZXZlbiBzb21lIGRldGFpbHMgb24gZXJyb3IgaGFuZGxpbmcuCgpUbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBmb2N1cyBvbiBsaW5lcyAyNDQtMjYwIGFuZCAzMTQtMzI1LiBUaGVzZSBsaW5lcyBsaWtlbHkgY29udGFpbiB0aGUgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBIdWdlVExCIG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBpbmNsdWRlIGltcG9ydGFudCBzdHVmZiwgbGlrZSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBodWdlIHBhZ2VzIHRoZW1zZWx2ZXMsIHJlbGV2YW50IGZsYWdzLCBhbmQgcGVyaGFwcyBzb21lIGludGVybmFsIGRhdGEgdHlwZXMgdXNlZCB0byBtYW5hZ2UgdGhlbS4gTXkgZ29hbCBoZXJlIGlzIHRvIGVzdGFibGlzaCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhbmQgZGF0YSBtb2RlbHMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgaHVnZSBwYWdlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBiYXNpYyBpbnRlcmZhY2Ugb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjkwOlx0ICpcbjIyOTE6XHQgKiBJZiBAZGV0YWlscyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMuXG4yMjkyOlx0ICovXG4yMjkzOlx0dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbjIyOTQ6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbjIyOTU6XHRcdFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4yMjk2Olx0e1xuMjI5NzpcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICYjNDM7IHNpemU7XG4yMjk4Olx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuMjI5OTpcdFxuMjMwMDpcdFx0Vk1fV0FSTl9PTl9PTkNFKCF0bGIgfHwgdGxiLVx1MDAzZW1tICE9IHZtYS1cdTAwM2V2bV9tbSk7XG4yMzAxOlx0XG4yMzAyOlx0XHRpZiAodW5saWtlbHkoIXNpemUpKVxuMjMwMzpcdFx0XHRyZXR1cm47XG4yMzA0Olx0XG4yMzA1Olx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuMjMwNjpcdFx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbjIzMDc6XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCwgZGV0YWlscyk7XG4yMzA4Olx0XHR1cGRhdGVfaGl3YXRlcl9yc3Modm1hLVx1MDAzZXZtX21tKTtcbjIzMDk6XHRcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbjIzMTA6XHRcdC8qXG4yMzExOlx0XHQgKiB1bm1hcCAmIzM5O2FkZHJlc3MtZW5kJiMzOTsgbm90ICYjMzk7cmFuZ2Uuc3RhcnQtcmFuZ2UuZW5kJiMzOTsgYXMgcmFuZ2VcbjIzMTI6XHRcdCAqIGNvdWxkIGhhdmUgYmVlbiBleHBhbmRlZCBmb3IgaHVnZXRsYiBwbWQgc2hhcmluZy5cbjIzMTM6XHRcdCAqL1xuMjMxNDpcdFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xuMjMxNTpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbjIzMTY6XHRcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkge1xuMjMxNzpcdFx0XHQvKlxuMjMxODpcdFx0XHQgKiBmbHVzaCB0bGIgYW5kIGZyZWUgcmVzb3VyY2VzIGJlZm9yZSBodWdldGxiX3phcF9lbmQoKSwgdG9cbjIzMTk6XHRcdFx0ICogYXZvaWQgY29uY3VycmVudCBwYWdlIGZhdWx0cyYjMzk7IGFsbG9jYXRpb24gZmFpbHVyZS5cbjIzMjA6XHRcdFx0ICovXG4yMzIxOlx0XHRcdHRsYl9maW5pc2hfbW11KHRsYik7XG4yMzIyOlx0XHRcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xuMjMyMzpcdFx0XHR0bGJfZ2F0aGVyX21tdSh0bGIsIHZtYS1cdTAwM2V2bV9tbSk7XG4yMzI0Olx0XHR9XG4yMzI1Olx0fVxuMjMyNjpcdFxuMjMyNzpcdC8qKlxuMjMyODpcdCAqIHphcF92bWFfcmFuZ2UgLSB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcyBpbiBhIHZtYSByYW5nZVxuMjMyOTpcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEh1Z2VUTEIgSGVhZGVyKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBIdWdlVExCIGludGVybmFscywgc3BlY2lmaWNhbGx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlbGV2YW50IG1hY3Jvcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYXJlYSBhcm91bmQgbGluZXMgMjQwLTI3MCBhbmQgdGhlbiBjaXJjbGluZyBiYWNrIHRvIGxpbmVzIDMxMC0zMzUuIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MgYXJlIGxvY2F0ZWQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZWxlbWVudHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgc3BlY2lmaWMgdGFzay4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCk7XG4gMjQxOlx0aW50IGh1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQyOlx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuIDI0MzpcdHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjQ0Olx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQ1Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcbiAyNDY6XHRcbiAyNDc6XHRleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDI0ODpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG4gMjQ5Olx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUwOlx0XHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbiAyNTE6XHRcbiAyNTI6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUzOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMjU0Olx0e1xuIDI1NTpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI1NjpcdFx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG4gMjU3Olx0fVxuIDI1ODpcdFxuIDI1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjYwOlx0XHRcdFx0XHQgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gMjYxOlx0e1xuIDI2MjpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI2MzpcdFx0XHRfX2h1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xuIDI2NDpcdH1cbiAyNjU6XHRcbiAyNjY6XHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY3Olx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY4Olx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAyNjk6XHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcwOlx0aW50IGh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3MTpcdHZvaWQgaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcyOlx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xuIDI3MzpcdGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAyNzQ6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCxcbiAyNzU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcF9mbGFncyk7XG4gMjc2Olx0dm9pZCBodWdldGxiX3Vuc2hhcmVfYWxsX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3NzpcdHZvaWQgZml4dXBfaHVnZXRsYl9yZXNlcnZhdGlvbnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3ODpcdHZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbiAyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBEaXNjcmVwYW5jeSBpbiBgaHVnZXRsYl96YXBfYmVnaW5gJiMzOTtzIEFyZ3VtZW50IExpc3QqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBmdW5jdGlvbiBkZWZpbml0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBJdCBsb29rcyBsaWtlIGl0IHRha2VzIGEgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAgcG9pbnRlciBhbmQgdHdvIGB1bnNpZ25lZCBsb25nYCBwb2ludGVycywgYHN0YXJ0YCBhbmQgYGVuZGAuIFRoZSBkZWZpbml0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgZXhwZWN0ZWQuCgpCdXQgdGhlbiwgd2hlbiBJIGxvb2tlZCBhdCB0aGUgY2FsbCBpbiBgbW0vbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAyMzA3LCB0aGUgY2FsbCBzaXRlIHNlZW1zIHRvIGJlIHVzaW5nICp0aHJlZSogYXJndW1lbnRzLCB3aXRoIHRoZSBpbmNsdXNpb24gb2YgYGRldGFpbHNgOiBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCwgZGV0YWlscyk7YC4KClRoaXMgaXMgYSByZWQgZmxhZy4gRG9lcyBgaHVnZXRsYl96YXBfYmVnaW5gIHRha2UgdGhyZWUgb3IgZm91ciBhcmd1bWVudHM/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgZXhwbGFpbiB0aGlzIGRpdmVyZ2VuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHJpZ2h0LCBvciBpZiBpdCYjMzk7cyBhIGJ1Zy4gU2luY2UgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGBnaXQgbG9nYCBhdCB0aGUgbW9tZW50LCBJJiMzOTtsbCBuZWVkIHRvIHVzZSB3aGF0IEkgaGF2ZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZnVuY3Rpb24gYWdhaW4gZm9yIHRoZSBmb3VydGggYXJndW1lbnQuIFRoZW4sIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIGRlZmluZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gSSYjMzk7bGwgYWxzbyB0cnkgYSBicm9hZGVyIGdyZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxscyB0byB0aGUgZnVuY3Rpb24gYW5kIGlmIHRoZXkmIzM5O3JlIGNvbnNpc3RlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfemFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ5PWV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU2Olx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTctfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjMyMDpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMjEtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmM9NTI0NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTU0MDQtXG5tbS9odWdldGxiLmM6NTQwNTp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTQwNi1cdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5tbS9tZW1vcnkuYz0yMjU1PXZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXG4tLVxubW0vbWVtb3J5LmMtMjI3MC1cbm1tL21lbW9yeS5jOjIyNzE6XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5tbS9tZW1vcnkuYy0yMjcyLVx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xuLS1cbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0yMzA2LVx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbm1tL21lbW9yeS5jOjIzMDc6XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xubW0vbWVtb3J5LmMtMjMwOC1cdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXHUwMDNldm1fbW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEh1Z2VUTEIgSXNzdWUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcy4uLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIG5hcnJvd2VkIGRvd24gdGhlIGFyZWEgb2YgY29uY2VybiwgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBhIGNsb3NlciBsb29rIGF0IHRoZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGhlYWRlciBmaWxlIGlzIHdhcnJhbnRlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBnYW5kZXIgYXQgbGluZXMgMzE1IHRocm91Z2ggMzMwLiBJdCYjMzk7cyBhIGtleSBzcG90IHdoZXJlIHNvbWUgb2YgdGhlIGNvcmUgSHVnZVRMQiBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcyBhcmUgcHJvYmFibHkgZGVjbGFyZWQsIGFuZCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBxdWljayByZS1jaGVjayB0byBlbnN1cmUgbm90aGluZyByZWxhdGVkIHRvIHRoZSByb290IGNhdXNlIGhhcyBzbGlwcGVkIGJ5LiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIGV2ZW4gaWYgaXQgZmVlbHMgcmVkdW5kYW50LCB3aGVuIGRpYWdub3NpbmcgYSB0cmlja3kgbWVtb3J5IGlzc3VlLiBKdXN0IHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgd2hhdGV2ZXImIzM5O3MgaGFwcGVuaW5nIGlzbiYjMzk7dCBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uIG9yIGEgc3VidGxlIGludGVyYWN0aW9uIHdpdGggdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLiBUaW1lIHRvIHB1bGwgdGhhdCBmaWxlIHVwIGFuZCBoYXZlIGEgbG9vay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDMxNjpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiAzMTc6XHR7XG4gMzE4Olx0fVxuIDMxOTpcdFxuIDMyMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcbiAzMjE6XHRcdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDMyMjpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiAzMjM6XHR7XG4gMzI0Olx0fVxuIDMyNTpcdFxuIDMyNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoXG4gMzI3Olx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAzMjg6XHRcdFx0XHRcdHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscylcbiAzMjk6XHR7XG4gMzMwOlx0fVxuIDMzMTpcdFxuIDMzMjpcdHN0YXRpYyBpbmxpbmUgaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCxcbiAzMzM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4gMzM0Olx0XHRcdFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuIDMzNTpcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSlcbiAzMzY6XHR7XG4gMzM3Olx0XHRCVUcoKTtcbiAzMzg6XHRcdHJldHVybiAwO1xuIDMzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQwNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29tcGlsYXRpb24gRXJyb3IgRGV0ZWN0ZWQ6IEEgRGVlcCBEaXZlIGludG8gYSBQb3RlbnRpYWwgQnVnKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgZGlmZi4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyBhIHJlZCBmbGFnIHdhdmluZyBpbiB0aGUgd2luZC4gVGhlIGNoYW5nZSB0byBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcuIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGNhbGwgdG9vayB0aHJlZSBhcmd1bWVudHMgYW5kIG5vdyB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIGFkZCBhIGZvdXJ0aDogYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQsIGRldGFpbHMpO2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIEMgY29tcGlsZS10aW1lIGVycm9yIHdhaXRpbmcgdG8gaGFwcGVuLiAmIzM0O1RvbyBtYW55IGFyZ3VtZW50cyB0byBmdW5jdGlvbiYjMzQ7IQoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIEkgZ28gc3RyYWlnaHQgdG8gdGhlIGRlY2xhcmF0aW9uIG9mIGBodWdldGxiX3phcF9iZWdpbmAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgaW5jbHVkZSBwYXRoLCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gQW5kIHRoZXJlIGl0IGlzLCB0d2ljZSBldmVuLiBJdCB0YWtlcyB0aGUgZmFtaWxpYXIgdGhyZWUgYXJndW1lbnRzLCBhcyBJIGV4cGVjdGVkLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLCByZWdhcmRsZXNzIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYCwgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgY29uc2lzdGVudDogdGhyZWUgYXJndW1lbnRzLgoKU28sIHRoZSBwYXRjaCAqd2lsbCogY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvci4gVGhpcyByYWlzZXMgc29tZSBzZXJpb3VzIHF1ZXN0aW9ucy4gSXMgdGhpcyBhIGJyb2tlbiBwYXRjaD8gRGlkIHNvbWVvbmUgbWlzcyBzb21ldGhpbmc/IEl0JiMzOTtzIGRlZmluaXRlbHkgYSBidWcgaW4gdGhlIHBhdGNoIHVuZGVyIHJldmlldy4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGxhcmdlciBwaWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBBY2NvcmRpbmcgdG8gdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBJdCYjMzk7cyBpbiBgbW0vbWVtb3J5LmNgLCB3aGljaCBzY3JlYW1zICYjMzQ7Y29yZSBtZW1vcnkgbWFuYWdlbWVudCYjMzQ7LiBUaGVyZWZvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgcGFydCBvZiBhIGNvcmUgc3Vic3lzdGVtLCBhbmQgYXMgcGVyIHRoZSBpbnN0cnVjdGlvbnMsIGFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlIHRoaXMsIHNob3VsZCBiZSBmdXp6ZWQuIEFuZCB0aGlzICppcyogYSBtb2RpZmljYXRpb24gdG8gdGhlIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIHNob3VsZCBub3cgYmUgZmxhZ2dlZC4KCkJ1dCwgYmVmb3JlIEkgY2FuIG1ha2UgYSBmaW5hbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIGNhc2Ugb2YgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTU5Mj1zdHJ1Y3QgemFwX2RldGFpbHM7XG5tbS9pbnRlcm5hbC5oOjU5Mzp2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vaW50ZXJuYWwuaC01OTQtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jPTg2Mz1zdGF0aWMgbG9uZyBtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWEoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTg3MC1cbm1tL21hZHZpc2UuYzo4NzE6XHR6YXBfdm1hX3JhbmdlX2JhdGNoZWQobWFkdl9iZWhhdmlvci1cdTAwM2V0bGIsIG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hLFxubW0vbWFkdmlzZS5jLTg3Mi1cdFx0XHQgICAgICByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQsIFx1MDAyNmRldGFpbHMpO1xuLS1cbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcbi0tXG5tbS9tZW1vcnkuYy0yMjc5LS8qKlxubW0vbWVtb3J5LmM6MjI4MDogKiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQgLSB6YXAgcGFnZSB0YWJsZSBlbnRyaWVzIGluIGEgdm1hIHJhbmdlXG5tbS9tZW1vcnkuYy0yMjgxLSAqIEB0bGI6IHBvaW50ZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdHJ1Y3QgbW11X2dhdGhlclxuLS1cbm1tL21lbW9yeS5jLTIyOTItICovXG5tbS9tZW1vcnkuYzoyMjkzOnZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tZW1vcnkuYy0yMjk0LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbm1tL21lbW9yeS5jPTIzMzU9dm9pZCB6YXBfdm1hX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vbWVtb3J5LmMtMjM0MC1cdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbm1tL21lbW9yeS5jOjIzNDE6XHR6YXBfdm1hX3JhbmdlX2JhdGNoZWQoXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHNpemUsIE5VTEwpO1xubW0vbWVtb3J5LmMtMjM0Mi1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWVtb3J5LmM9NDQzOD1zdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfbWFwcGluZ19yYW5nZV90cmVlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21lbW9yeS5jLTQ0NTQtXHRcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbm1tL21lbW9yeS5jOjQ0NTU6XHRcdHphcF92bWFfcmFuZ2VfYmF0Y2hlZChcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIHNpemUsIGRldGFpbHMpO1xubW0vbWVtb3J5LmMtNDQ1Ni1cdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgY29yZSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBjcnVjaWFsIHBvaW50czogYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgKGhhbmRsaW5nIGBNQURWX0RPTlRORUVEYCBhbmQgc2ltaWxhciBtYWR2aXNlIGNhbGxzKSwgYHphcF92bWFfcmFuZ2VgIGl0c2VsZiwgYW5kIGB1bm1hcF9tYXBwaW5nX3JhbmdlX3RyZWVgICh3aGljaCBjb3ZlcnMgdHJ1bmNhdGlvbiBhbmQgYHVubWFwX21hcHBpbmdfcmFuZ2VgKS4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7aGlnaCB1c2VyLXNwYWNlIHJlYWNoYWJpbGl0eS4mIzM0OyBTcGVjaWZpY2FsbHksIHRoaW5rIGBtYWR2aXNlYCwgZXNwZWNpYWxseSBgTUFEVl9ET05UTkVFRGAsIGFsc28gYHRydW5jYXRlYCwgYGZhbGxvY2F0ZWAgYW5kIHRoZSBldmVyLXByZXNlbnQgYG11bm1hcGAsIGFuZCB0aGF0JiMzOTtzICpiZWZvcmUqIGNvbnNpZGVyaW5nIHRoZSBlZmZlY3RzIG9uIGh1Z2V0bGIgcGFnZXMgb3IgZXZlbiBzdGFuZGFyZCBwYWdlcy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBwcmV0dHkgYmlnLgoKSG1tLCB0aGlzIGBkZXRhaWxzYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBodWdldGxiX3phcF9iZWdpbmAgaXMgbWFraW5nIG1lIHBhdXNlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgZ2V0cyB1c2VkLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB0aGVyZSBpdCBpcywgYGh1Z2V0bGJfemFwX2VuZGAgb24gbGluZSAyMzIyLiBJdCBsb29rcyBsaWtlIGl0IGlzIGFsc28gcGFzc2VkIHRvIGBfX3phcF92bWFfcmFuZ2VgIGxpa2Ugc286CgpgYGBjCmh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtzdGFydCwgJmFtcDtlbmQpOwpfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsICZhbXA7ZGV0YWlscyk7CmBgYAoKSSBzdXNwZWN0IHRoZSBhdXRob3IgKm1lYW50KiB0byBwYXNzIGBkZXRhaWxzYCBoZXJlLCBvciB0aGVyZSYjMzk7cyBhIHR5cG8sIGJ1dCBlaXRoZXIgd2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZCgpYCBpbiBgbW0vbWVtb3J5LmNgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyBwYXRjaCBgV29ydGhGdXp6aW5nYD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjcml0ZXJpYS4gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOiBDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiYjMzQ7CgpCaW5nby4gVGhpcyB0b3VjaGVzIGBtbS9tZW1vcnkuY2Agd2l0aGluIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKWAuIEl0JiMzOTtzIGEgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIEl0JiMzOTtzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgdmlhIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYCwgYGZ0cnVuY2F0ZWAsIGBmYWxsb2NhdGVgLCBgbXVubWFwYCwgZXRjLiBTbywgdGhlIGFuc3dlciBpcyAmIzM0O3llcywmIzM0OyB0aGlzIGlzIHdvcnRoIGZ1enppbmcuCgpOb3csIG9uIHRvIHRoZSBjb25maWd1cmF0aW9ucy4gYG1tL21lbW9yeS5jYCBpcyBhbHdheXMgY29tcGlsZWQuIFRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgb3IgYENPTkZJR19NTVVgIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgYF9femFwX3ZtYV9yYW5nZWAgd2lsbCBiZSBydW4sIHdoaWNoIHNlZW1zIHN0YW5kYXJkIGVub3VnaC4gSSBzaG91bGQgY2hlY2sgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCB0byBzZWUgd2hldGhlciBgaHVnZXRsYl96YXBfYmVnaW5gIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcy4KCk5leHQgc3RlcDogZGVmaW5lIHdoYXQgZm9jdXMgc3ltYm9scyB3aWxsIGJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IVUdFVExCX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yMz12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI2LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI4MD11bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI4MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI4MjojZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjgzLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQ2Mz1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKSB7fVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDY0LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDY1OiNlbmRpZiAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDY2LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU4Mj1lbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTk2LSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTk3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01OTgtI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY0OT1IUEFHRUZMQUcoQ21hLCBjbWEpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02NTAtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2NTE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY1Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMDgyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDg2LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTA4NzojZWxzZVx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTA4OC1zdHJ1Y3QgaHN0YXRlIHt9O1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEzMDQ9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfYm9vdG1lbV9zdHJ1Y3RfcGFnZV9pbml0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwNi19XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA3OiNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwOC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEzMDk9c3RhdGljIGlubGluZSBzcGlubG9ja190ICpodWdlX3B0ZV9sb2NrKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxOC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMTk6I2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NNQSlcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMjAtZXh0ZXJuIHZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjI0CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYEhVR0VUTEJfUEFHRWAgU3VwcG9ydCBhbmQgU3ltYm9sIEluY2x1c2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgaW50ZWdyYXRlIGZ1enppbmcgZm9yIHRoZSBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgYEZvY3VzU3ltYm9sc2Agc2V0LiBUaGlzIGlzIGtleSBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGlzIGNlbnRyYWwgdG8gdGhpcyBsb2dpYy4KCk5vdywgd2hhdCAqc2hvdWxkKiBiZSBpbiBgRm9jdXNTeW1ib2xzYD8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LiBPYnZpb3VzbHksIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgbXVzdC4gVGhlbiwgdGhlIGRpcmVjdCBjYWxsZXIgYHphcF92bWFfcmFuZ2VgLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhpcyByYW5nZSwgc3VjaCBhcyBgX19odWdldGxiX3phcF9iZWdpbmAgYXJlIGRlZmluaXRlbHkgY29udGVuZGVycy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBzaW5jZSBpdCBjYWxscyBvbiB0aGlzIHNlcXVlbmNlLgoKQWxyaWdodCwgYSBxdWljayBjaGVjayBvbiB0aGUgdWJpcXVpdHkgb2YgdGhlc2Ugc3ltYm9scyBpcyBpbiBvcmRlci4gSXQgbG9va3MgbGlrZSBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpcyBpbmRlZWQgbm9uLXViaXF1aXRvdXMsIHNwZWNpZmljIHRvIGJhdGNoZWQgemFwcGluZyBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gYG1hZHZpc2UgRE9OVE5FRURgLCB0cnVuY2F0ZSwgYW5kIGh1Z2V0bGIgdW5tYXAuIFNpbWlsYXJseSwgYF9faHVnZXRsYl96YXBfYmVnaW5gIGlzIGh1Z2V0bGItc3BlY2lmaWMuIGBtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFgIGFuZCB0aGUgcmFuZ2UgY2FsbGVyIGB6YXBfdm1hX3JhbmdlYCBhcmUgYWxzbyBub24tdWJpcXVpdG91cy4gR29vZCwgdGhhdCBtYWtlcyB0aGUgZGVjaXNpb24gZWFzaWVyLgoKTm93LCBsZXQmIzM5O3MgdHJpcGxlLWNoZWNrIGFsbCB0aGUgcmVxdWlyZW1lbnRzOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCB0byBgWyYjMzQ7SFVHRVRMQl9QQUdFJiMzNDtdYC4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBgWyYjMzQ7emFwX3ZtYV9yYW5nZV9iYXRjaGVkJiMzNDssICYjMzQ7X19odWdldGxiX3phcF9iZWdpbiYjMzQ7XWAsIGJ1dCBJIG1heSBhbHNvIGluY2x1ZGUgYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgYXMgd2VsbC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlc2Ugc3ltYm9scyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGZ1bmN0aW9uYWxpdHkgYWZmZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24uCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiBjb25maWdzIGFuZCBzeW1ib2wgbmFtZXMsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kLiBMb2NhdGlvbiBzZWVtcyBjb3JyZWN0OiBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpbiBgbW0vbWVtb3J5LmNgLCBgX19odWdldGxiX3phcF9iZWdpbmAgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBpbiBgbW0vbWFkdmlzZS5jYC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3phcF92bWFfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6YXBfdm1hX3JhbmdlX2JhdGNoZWQmIzM0OywKICAgICYjMzQ7X19odWdldGxiX3phcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAmIzM5O2RldGFpbHMmIzM5OyB0byBodWdldGxiX3phcF9iZWdpbiBpbiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQpLiBUaGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC8gaHVnZXRsYiB1bm1hcHBpbmcgbG9naWMgYW5kIGRvZXMgbm90IGludm9sdmUgY29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciBhbHRlcmluZyBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIG92ZXIgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIE1NIG9wZXJhdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjb25maWdzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBlYzYzZGQ2MjEyYWM1Li5iMWIzODJkNTUyYzM5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMjMwNCw3ICYjNDM7MjMwNCw3IEBAIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAKIAltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmYW1wO3JhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtJmd0O3ZtX21tLAogCQkJCWFkZHJlc3MsIGVuZCk7Ci0JaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCk7CiYjNDM7CWh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQsIGRldGFpbHMpOwogCXVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtJmd0O3ZtX21tKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUaW55IE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHRoaXMgaXMgYSBzbWFsbCBvbmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl04oCZcyBmb2N1c2VkIG9uIGEgdmVyeSBzcGVjaWZpYyBhcmVhLCBqdWRnaW5nIGJ5IHRoZSBjb250ZXh0LiBJdCBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoIEh1Z2VUTEIgcGFnZXMuIFRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgYSBtaW5vciBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgbW0vbWVtb3J5LmNgIGZpbGUuIEkgc2VlIHRoZSBkaWZmIHNob3dzIHRoYXQgdGhlIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24gaXMgcmVjZWl2aW5nIGEgbmV3IGFyZ3VtZW50LCBgZGV0YWlsc2AuIExldCYjMzk7cyBhc3N1bWUgdGhhdCBgZGV0YWlsc2AgY29udGFpbnMgdXNlZnVsIGluZm87IGl0JiMzOTtzIGEgZ29vZCBhc3N1bXB0aW9uLgoKR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLCBgaHVnZXRsYl96YXBfYmVnaW5gIHByb2JhYmx5IGhhbmRsZXMgdGhlIHN0YXJ0IG9mIGEgJiMzNDt6YXAmIzM0OyBvcGVyYXRpb24sIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcywgYW5kIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgYmF0Y2hlZCB2ZXJzaW9uIG9mIGEgJiMzNDt6YXAgcmFuZ2UmIzM0OyBvcGVyYXRpb24sIGxpa2VseSBpbnZvbHZpbmcgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpLiBUaGUgY2hhbmdlIGluIHRoZSBhcmd1bWVudCBsaXN0IGZvciBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIHdoYXQgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgdGhlICYjMzQ7YmVnaW4mIzM0OyBvcGVyYXRpb24gbm93IG5lZWRzIGFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBvciBwYXJhbWV0ZXJzLiBQZXJoYXBzIHRoaXMgYGRldGFpbHNgIHN0cnVjdCBpcyBhIG5ldyB3YXkgdG8gY29udmV5IGZsYWdzLCBvciBhIHN0cnVjdHVyZSBjb250YWluaW5nIHJlbGV2YW50IG1ldGFkYXRhIGFib3V0IHRoZSBWTUEgYmVpbmcgemFwcGVkLCBvciB0aGUgcmVhc29uIGJlaGluZCB0aGUgb3BlcmF0aW9uLiAKCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZSB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiBib3RoIGBodWdldGxiX3phcF9iZWdpbmAgYW5kIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgLCBhbG9uZyB3aXRoIHRoZSBgZGV0YWlsc2AgYXJndW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUga2V5LiBJJiMzOTtsbCBjaGVjayBob3cgYGRldGFpbHNgIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LCBhIGJ1ZyBmaXgsIG9yIGV2ZW4gYSBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZSBtYW5hZ2VtZW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGRlZmluaXRpb24gb2YgYGh1Z2V0bGJfemFwX2JlZ2luYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl96YXBfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ni1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0NzpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ4LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDk9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjUxLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1My1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTUtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XHRcdF9faHVnZXRsYl96YXBfYmVnaW4odm1hLCBzdGFydCwgZW5kKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzE5LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MzIwOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMS1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQwNC1cbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy01NDA2LVx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuLS1cbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcbi0tXG5tbS9tZW1vcnkuYy0yMjcwLVxubW0vbWVtb3J5LmM6MjI3MTpcdFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKTtcbm1tL21lbW9yeS5jLTIyNzItXHRcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2ZGV0YWlscyk7XG4tLVxubW0vbWVtb3J5LmM9MjI5Mz12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIzMDYtXHRcdFx0XHRhZGRyZXNzLCBlbmQpO1xubW0vbWVtb3J5LmM6MjMwNzpcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCwgZGV0YWlscyk7XG5tbS9tZW1vcnkuYy0yMzA4LVx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGFzaywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaXZpbmcgaW50byBIdWdlVExCIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IEh1Z2VUTEJzIGFyZSBtYW5hZ2VkIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9tZW1vcnkuY2AgYW5kIHplcm8gaW4gb24gbGluZXMgMjI1MCB0aHJvdWdoIDIzMjAuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdmlldyBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMsIGxpa2VseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZnJlZWluZywgb3IgZmF1bHQgaGFuZGxpbmcgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHBvdGVudGlhbGx5IHNvbWUgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGNydWNpYWwgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBwaHlzaWNhbC10by12aXJ0dWFsIG1hcHBpbmdzLgoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCBjcmFjayBvcGVuIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGNoZWNraW5nIGxpbmVzIDI0MC0zMzAuIFRoaXMgaXMgdGhlIGhlYWRlciBmaWxlLCBzbyBpdCYjMzk7bGwgZXhwb3NlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgcmVsZXZhbnQgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgdGhlIEh1Z2VUTEIgYmVoYXZpb3IuIFRoaXMgaXMgdGhlIGJsdWVwcmludDsgdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBzZWUgdGhlIGxheW91dCBvZiB0aGUgYGh1Z2V0bGJfY2dyb3VwYCwgdGhlIGBoc3RhdGVgIHN0cnVjdCwgb3IgcmVsZXZhbnQgZGVmaW5pdGlvbnMgb2YgaG93IEh1Z2VUTEIgcGFnZSBzaXplIGlzIG1hbmFnZWQuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5IHJlcHJlc2VudCB0aGUgaHVnZSBwYWdlIHNpemVzLCBhbnkgYXNzb2NpYXRlZCBmbGFncywgYW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyB0aGUgYXZhaWxhYmxlIEh1Z2VUTEIgcmVzb3VyY2VzLiBUaGlzIHdpbGwgbGlrZWx5IGlsbHVtaW5hdGUgdGhlIGRldGFpbHMgYmVoaW5kIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIHNlZSBpbiBgbW0vbWVtb3J5LmNgLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJuIGhvdyBIdWdlVExCIHBhZ2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyNTA6XHQgKiB1bm1hcF92bWFzKCkgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgd2lsbCBmbHVzaCB0aGUgd2hvbGUgdW5tYXBwZWQgYWRkcmVzc1xuMjI1MTpcdCAqIHJhbmdlIGFmdGVyIHVubWFwX3ZtYXMoKSByZXR1cm5zLiAgU28gdGhlIG9ubHkgcmVzcG9uc2liaWxpdHkgaGVyZSBpcyB0b1xuMjI1MjpcdCAqIGVuc3VyZSB0aGF0IGFueSB0aHVzLWZhciB1bm1hcHBlZCBwYWdlcyBhcmUgZmx1c2hlZCBiZWZvcmUgdW5tYXBfdm1hcygpXG4yMjUzOlx0ICogZHJvcHMgdGhlIGxvY2sgYW5kIHNjaGVkdWxlcy5cbjIyNTQ6XHQgKi9cbjIyNTU6XHR2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuMjI1NjpcdHtcbjIyNTc6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuMjI1ODpcdFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbjIyNTk6XHRcdHN0cnVjdCB6YXBfZGV0YWlscyBkZXRhaWxzID0ge1xuMjI2MDpcdFx0XHQuemFwX2ZsYWdzID0gWkFQX0ZMQUdfRFJPUF9NQVJLRVIgfCBaQVBfRkxBR19VTk1BUCxcbjIyNjE6XHRcdH07XG4yMjYyOlx0XG4yMjYzOlx0XHR2bWEgPSB1bm1hcC1cdTAwM2VmaXJzdDtcbjIyNjQ6XHRcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX1VOTUFQLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4yMjY1Olx0XHRcdFx0XHR1bm1hcC1cdTAwM2V2bWFfc3RhcnQsIHVubWFwLVx1MDAzZXZtYV9lbmQpO1xuMjI2NjpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMjI2NzpcdFx0ZG8ge1xuMjI2ODpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWF4KHZtYS1cdTAwM2V2bV9zdGFydCwgdW5tYXAtXHUwMDNldm1hX3N0YXJ0KTtcbjIyNjk6XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBtaW4odm1hLVx1MDAzZXZtX2VuZCwgdW5tYXAtXHUwMDNldm1hX2VuZCk7XG4yMjcwOlx0XG4yMjcxOlx0XHRcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG4yMjcyOlx0XHRcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2ZGV0YWlscyk7XG4yMjczOlx0XHRcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIFx1MDAyNmRldGFpbHMpO1xuMjI3NDpcdFx0XHR2bWEgPSBtYXNfZmluZCh1bm1hcC1cdTAwM2VtYXMsIHVubWFwLVx1MDAzZXRyZWVfZW5kIC0gMSk7XG4yMjc1Olx0XHR9IHdoaWxlICh2bWEpO1xuMjI3NjpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbjIyNzc6XHR9XG4yMjc4Olx0XG4yMjc5Olx0LyoqXG4yMjgwOlx0ICogemFwX3ZtYV9yYW5nZV9iYXRjaGVkIC0gemFwIHBhZ2UgdGFibGUgZW50cmllcyBpbiBhIHZtYSByYW5nZVxuMjI4MTpcdCAqIEB0bGI6IHBvaW50ZXIgdG8gdGhlIGNhbGxlciYjMzk7cyBzdHJ1Y3QgbW11X2dhdGhlclxuMjI4MjpcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxuMjI4MzpcdCAqIEBhZGRyZXNzOiBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSByYW5nZSB0byB6YXBcbjIyODQ6XHQgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHphcFxuMjI4NTpcdCAqIEBkZXRhaWxzOiBkZXRhaWxzIHNwZWNpZnlpbmcgemFwcGluZyBiZWhhdmlvclxuMjI4NjpcdCAqXG4yMjg3Olx0ICogQHRsYiBtdXN0IG5vdCBiZSBOVUxMLiBUaGUgcHJvdmlkZWQgYWRkcmVzcyByYW5nZSBtdXN0IGJlIGZ1bGx5XG4yMjg4Olx0ICogY29udGFpbmVkIHdpdGhpbiBAdm1hLiBJZiBAdm1hIGlzIGZvciBodWdldGxiLCBAdGxiIGlzIGZsdXNoZWQgYW5kXG4yMjg5Olx0ICogcmUtaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbi5cbjIyOTA6XHQgKlxuMjI5MTpcdCAqIElmIEBkZXRhaWxzIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gd2lsbCB6YXAgYWxsIHBhZ2UgdGFibGUgZW50cmllcy5cbjIyOTI6XHQgKi9cbjIyOTM6XHR2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuMjI5NDpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuMjI5NTpcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB6YXBfZGV0YWlscyAqZGV0YWlscylcbjIyOTY6XHR7XG4yMjk3Olx0XHRjb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgJiM0Mzsgc2l6ZTtcbjIyOTg6XHRcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4yMjk5Olx0XG4yMzAwOlx0XHRWTV9XQVJOX09OX09OQ0UoIXRsYiB8fCB0bGItXHUwMDNlbW0gIT0gdm1hLVx1MDAzZXZtX21tKTtcbjIzMDE6XHRcbjIzMDI6XHRcdGlmICh1bmxpa2VseSghc2l6ZSkpXG4yMzAzOlx0XHRcdHJldHVybjtcbjIzMDQ6XHRcbjIzMDU6XHRcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4yMzA2Olx0XHRcdFx0XHRhZGRyZXNzLCBlbmQpO1xuMjMwNzpcdFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcbjIzMDg6XHRcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXHUwMDNldm1fbW0pO1xuMjMwOTpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuMjMxMDpcdFx0LypcbjIzMTE6XHRcdCAqIHVubWFwICYjMzk7YWRkcmVzcy1lbmQmIzM5OyBub3QgJiMzOTtyYW5nZS5zdGFydC1yYW5nZS5lbmQmIzM5OyBhcyByYW5nZVxuMjMxMjpcdFx0ICogY291bGQgaGF2ZSBiZWVuIGV4cGFuZGVkIGZvciBodWdldGxiIHBtZCBzaGFyaW5nLlxuMjMxMzpcdFx0ICovXG4yMzE0Olx0XHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIGFkZHJlc3MsIGVuZCwgZGV0YWlscyk7XG4yMzE1Olx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuMjMxNjpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7XG4yMzE3Olx0XHRcdC8qXG4yMzE4Olx0XHRcdCAqIGZsdXNoIHRsYiBhbmQgZnJlZSByZXNvdXJjZXMgYmVmb3JlIGh1Z2V0bGJfemFwX2VuZCgpLCB0b1xuMjMxOTpcdFx0XHQgKiBhdm9pZCBjb25jdXJyZW50IHBhZ2UgZmF1bHRzJiMzOTsgYWxsb2NhdGlvbiBmYWlsdXJlLlxuMjMyMDpcdFx0XHQgKi9cbjIzMjE6XHRcdFx0dGxiX2ZpbmlzaF9tbXUodGxiKTtcbjIzMjI6XHRcdFx0aHVnZXRsYl96YXBfZW5kKHZtYSwgZGV0YWlscyk7XG4yMzIzOlx0XHRcdHRsYl9nYXRoZXJfbW11KHRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbjIzMjQ6XHRcdH1cbjIzMjU6XHR9XG4yMzI2Olx0XG4yMzI3Olx0LyoqXG4yMzI4Olx0ICogemFwX3ZtYV9yYW5nZSAtIHphcCBhbGwgcGFnZSB0YWJsZSBlbnRyaWVzIGluIGEgdm1hIHJhbmdlXG4yMzI5Olx0ICogQHZtYTogdGhlIHZtYSBjb3ZlcmluZyB0aGUgcmFuZ2UgdG8gemFwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEh1Z2VUTEIgSGVhZGVyIEZpbGVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IEh1Z2VUTEIsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXQgYSBwcmV0dHkgZnVuZGFtZW50YWwgbGV2ZWwuIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgdGhlIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgZm9jdXMgb24gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgbG9va2luZyBhcm91bmQgbGluZXMgMjQwIGFuZCAzMTQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIHBlcmhhcHMgc29tZSBjcml0aWNhbCBtYWNybyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGZvdW5kLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGxpbmVzIHJldmVhbC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGV5JiMzOTtsbCBiZSB1c2VmdWwgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCk7XG4gMjQxOlx0aW50IGh1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQyOlx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuIDI0MzpcdHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjQ0Olx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjQ1Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcbiAyNDY6XHRcbiAyNDc6XHRleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDI0ODpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG4gMjQ5Olx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUwOlx0XHRcdFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcbiAyNTE6XHRcbiAyNTI6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjUzOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMjU0Olx0e1xuIDI1NTpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI1NjpcdFx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG4gMjU3Olx0fVxuIDI1ODpcdFxuIDI1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMjYwOlx0XHRcdFx0XHQgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gMjYxOlx0e1xuIDI2MjpcdFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuIDI2MzpcdFx0XHRfX2h1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xuIDI2NDpcdH1cbiAyNjU6XHRcbiAyNjY6XHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY3Olx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjY4Olx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAyNjk6XHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcwOlx0aW50IGh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3MTpcdHZvaWQgaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gMjcyOlx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xuIDI3MzpcdGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAyNzQ6XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCxcbiAyNzU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcF9mbGFncyk7XG4gMjc2Olx0dm9pZCBodWdldGxiX3Vuc2hhcmVfYWxsX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3NzpcdHZvaWQgZml4dXBfaHVnZXRsYl9yZXNlcnZhdGlvbnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIDI3ODpcdHZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbiAyNzk6XHRcbiAyODA6XHR1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcbiAyODE6XHRcbiAyODI6XHQjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuIDI4MzpcdFxuIDI4NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2R1cF92bWFfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAyODU6XHR7XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDI4OTpcdHtcbiAyOTA6XHR9XG4gMjkxOlx0XG4gMjkyOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiAyOTM6XHR7XG4gMjk0Olx0XHRyZXR1cm4gMDtcbiAyOTU6XHR9XG4gMjk2Olx0XG4gMjk3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXG4gMjk4Olx0XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDI5OTpcdHtcbiAzMDA6XHRcdHJldHVybiBOVUxMO1xuIDMwMTpcdH1cbiAzMDI6XHRcbiAzMDM6XHRzdGF0aWMgaW5saW5lIGludCBodWdlX3BtZF91bnNoYXJlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gMzA0Olx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuIDMwNTpcdHtcbiAzMDY6XHRcdHJldHVybiAwO1xuIDMwNzpcdH1cbiAzMDg6XHRcbiAzMDk6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuIDMxMDpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAzMTE6XHR7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXG4gMzE1Olx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAzMTY6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMzE3Olx0e1xuIDMxODpcdH1cbiAzMTk6XHRcbiAzMjA6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXG4gMzIxOlx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiAzMjI6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4gMzIzOlx0e1xuIDMyNDpcdH1cbiAzMjU6XHRcbiAzMjY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfZW5kKFxuIDMyNzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gMzI4Olx0XHRcdFx0XHRzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG4gMzI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGlzY3JlcGFuY2llcyBpbiBIdWdlVExCIFVubWFwcGluZyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24uLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgbGluZTogYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQsIGRldGFpbHMpO2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBhcmd1bWVudCBjb3VudC4gSXMgYGh1Z2V0bGJfemFwX2JlZ2luYCBzdXBwb3NlZCB0byB0YWtlIGZvdXIgYXJndW1lbnRzLCBhcyBpdCBhcHBlYXJzIGhlcmU/IE9yIGlzIHRoZXJlIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uPwoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoeSBpcyBpdCB0aGF0IGB1bm1hcF92bWFzYCBpcyBjYWxsaW5nIGBodWdldGxiX3phcF9iZWdpbmAgd2l0aCBvbmx5IHRocmVlIGFyZ3VtZW50cywgbGlrZSBzbzogYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgJmFtcDtzdGFydCwgJmFtcDtlbmQpO2A/IFlldCwgaGVyZSwgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAgc2VlbXMgdG8gYmUgdXNpbmcgdGhlIGZvdXItYXJndW1lbnQgdmVyc2lvbi4gVGhpcyBpbmNvbnNpc3RlbmN5IGlzIGEgcmVkIGZsYWcuIEl0IGZlZWxzIGxpa2UgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIG9yIGEgcmVjZW50IGNoYW5nZS4KClRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHJldmlldyByZWNlbnQgY29tbWl0cyBhbmQgYW55IG90aGVyIGluc3RhbmNlcyB3aGVyZSBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIHVzZWQuIFRoaXMgaXMgbGlrZWx5IGFuIG92ZXJzaWdodCB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMgYW5kIGl0IGlzIGltcG9ydGFudCB0byBmaW5kIGl0LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGhpc3Rvcnkgb2YgdGhpcyBmdW5jdGlvbiBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI1Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU2Olx0XHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTctfVxuLS1cbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQwNC1cbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy01NDA2LVx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggaW4gaHVnZXRsYi5jKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19odWdldGxiX3phcF9iZWdpbmAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgcGxhY2UgZm9yIGFsbCB0aG9zZSBIdWdlVExCLXJlbGF0ZWQgZnVuY3Rpb25zLiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZSA1NDA1IGluIGBtbS9odWdldGxiLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBjYWxsLCB3aGF0JiMzOTtzIGJlaW5nIHNldCB1cCwgYW5kIHdoYXQgc3RhdGUgdGhlIHN5c3RlbSBpcyBpbiB3aGVuIGBfX2h1Z2V0bGJfemFwX2JlZ2luYCBpcyBpbnZva2VkLiBLbm93aW5nIHRoZSBsb2NhbCBjb250ZXh0IHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHByb2JsZW0gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgZXhwZWN0IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHBhZ2UgdW5tYXBwaW5nIHByb2Nlc3MsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDAwOlx0XHR0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7XG41NDAxOlx0XG41NDAyOlx0XHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbjU0MDM6XHR9XG41NDA0Olx0XG41NDA1Olx0dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTQwNjpcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuNTQwNzpcdHtcbjU0MDg6XHRcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG41NDA5Olx0XHRcdHJldHVybjtcbjU0MTA6XHRcbjU0MTE6XHRcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpO1xuNTQxMjpcdFx0aHVnZXRsYl92bWFfbG9ja193cml0ZSh2bWEpO1xuNTQxMzpcdFx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuNTQxNDpcdFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuNTQxNTpcdH1cbjU0MTY6XHRcbjU0MTc6XHR2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTQxODpcdFx0XHQgICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxuNTQxOTpcdHtcbjU0MjA6XHRcdHphcF9mbGFnc190IHphcF9mbGFncyA9IGRldGFpbHMgPyBkZXRhaWxzLVx1MDAzZXphcF9mbGFncyA6IDA7XG41NDIxOlx0XG41NDIyOlx0XHRpZiAoIXZtYS1cdTAwM2V2bV9maWxlKVx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xuNTQyMzpcdFx0XHRyZXR1cm47XG41NDI0Olx0XG41NDI1Olx0XHRpZiAoemFwX2ZsYWdzIFx1MDAyNiBaQVBfRkxBR19VTk1BUCkge1x0LyogZmluYWwgdW5tYXAgKi9cbjU0MjY6XHRcdFx0LypcbjU0Mjc6XHRcdFx0ICogVW5sb2NrIGFuZCBmcmVlIHRoZSB2bWEgbG9jayBiZWZvcmUgcmVsZWFzaW5nIGlfbW1hcF9yd3NlbS5cbjU0Mjg6XHRcdFx0ICogV2hlbiB0aGUgdm1hX2xvY2sgaXMgZnJlZWQsIHRoaXMgbWFrZXMgdGhlIHZtYSBpbmVsaWdpYmxlXG41NDI5Olx0XHRcdCAqIGZvciBwbWQgc2hhcmluZy4gIEFuZCwgaV9tbWFwX3J3c2VtIGlzIHJlcXVpcmVkIHRvIHNldCB1cFxuNTQzMDpcdFx0XHQgKiBwbWQgc2hhcmluZy4gIFRoaXMgaXMgaW1wb3J0YW50IGFzIHBhZ2UgdGFibGVzIGZvciB0aGlzXG41NDMxOlx0XHRcdCAqIHVubWFwcGVkIHJhbmdlIHdpbGwgYmUgYXN5bmNocm91c2x5IGRlbGV0ZWQuICBJZiB0aGUgcGFnZVxuNTQzMjpcdFx0XHQgKiB0YWJsZXMgYXJlIHNoYXJlZCwgdGhlcmUgd2lsbCBiZSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieVxuNTQzMzpcdFx0XHQgKiBzb21lb25lIGVsc2UuXG41NDM0Olx0XHRcdCAqL1xuNTQzNTpcdFx0XHRfX2h1Z2V0bGJfdm1hX3VubG9ja193cml0ZV9mcmVlKHZtYSk7XG41NDM2Olx0XHR9IGVsc2Uge1xuNTQzNzpcdFx0XHRodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUodm1hKTtcbjU0Mzg6XHRcdH1cbjU0Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5NgoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAxMDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gV2hhdCBkb2VzIGBnaXQgZGlmZiBIRUFEfjFgIHRlbGwgbWU/IENhbiBJIGV2ZW4gY2hlY2sgdGhlIGdpdCBsb2c/IEkgb25seSBoYXZlIGEgbGltaXRlZCBzZXQgb2YgdG9vbHMgaGVyZSwgc28gSSYjMzk7bGwgd29yayB3aXRoIHdoYXQgSSYjMzk7dmUgZ290LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbW0vbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgbGluZSAyMzA3LiBBaCwgSSBzZWUgdGhlIGNoYW5nZTogYGh1Z2V0bGJfemFwX2JlZ2luYCBpcyBpbnZvbHZlZC4KCkxvb2tpbmcgY2xvc2VyLCB0aGUgY29tbWl0IGNoYW5nZWQgdGhlIGZ1bmN0aW9uIGNhbGwgZnJvbSBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZClgIHRvIGBodWdldGxiX3phcF9iZWdpbih2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kLCBkZXRhaWxzKWAuICBUaGUgY29ycmVzcG9uZGluZyBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgc2hvd3MgdGhhdCBgaHVnZXRsYl96YXBfYmVnaW5gIG9yaWdpbmFsbHkgdG9vayBvbmx5IHR3byBhcmd1bWVudHMuICBTbywgdGhpcyAqbXVzdCogYmUgYW4gYWRkaXRpb24gb2YgYW4gYXJndW1lbnQuIERvZXMgaXQgZXZlbiBjb21waWxlIHdpdGggdGhlIG5ldyAzLWFyZ3VtZW50IHZlcnNpb24gb3IgaXMgdGhlcmUgYW4gaW50ZXJ2ZW5pbmcgY29tbWl0IGluIGEgc2VyaWVzLCBvciBpcyBpdCBhIGJ1ZyBmaXggb3IgdGVzdD8KCldoeSBkb2VzIHRoaXMgbWF0dGVyIGZvciBLTVNBTiB2cy4gS0FTQU4/IEkgbmVlZCB0byBhcHBseSB0aGUgbG9naWMuIFJlbWVtYmVyLCBLQVNBTiBhbHJlYWR5IGNvdmVycyBhIHdpZGUgYXJyYXkgb2YgbWVtb3J5IGlzc3Vlczogb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcywgZXRjLiBMT0NLREVQIGNhdGNoZXMgbG9ja2luZyBidWdzLCBVQi1zYW5pdGl6ZXJzIGRvIHRoZWlyIHdvcmssIGFuZCB3ZSBoYXZlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuCgpUaGUgcnVsZSBpcyBjbGVhcjogKklmIEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2VycyBjYW4gY2F0Y2ggdGhlIGJ1ZywgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIHdhc3RlIHJlc291cmNlcyBvbiBLTVNBTi4qIEtNU0FOIGlzIGV4cGVuc2l2ZSwgc28gb25seSB1c2UgaXQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIGV4Y2x1c2l2ZWx5IGRldGVjdHMuCgpTbywgd2hlbiBkbyBJIHNldCBgTmVlZHNLTVNBTj10cnVlYD8gV2VsbCwgdGhlIHBhdGNoIG5lZWRzIHRvIGludHJvZHVjZSBvciBtb2RpZnk6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuCjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBleHBvc2Ugc3Vycm91bmRpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuCgpXaGVuIGRvIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYD8KLSBDb2RlIHByaW1hcmlseSByaXNrcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4KLSBTdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZC9pbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCkxldCYjMzk7cyBhcHBseSB0aGlzIHRvIHRoZSBwYXRjaC4gSXQgbW9kaWZpZXMgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAgaW4gYG1tL21lbW9yeS5jYCBieSBwYXNzaW5nIGBkZXRhaWxzYCB0byBgaHVnZXRsYl96YXBfYmVnaW5gLiBEb2VzIHRoaXMgdG91Y2ggYW55IGBjb3B5X3RvX3VzZXJgIGNhbGxzPyBJcyB0aGVyZSBhbiBpbmZvIGxlYWs/IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMgZnJvbSBzdGFjay9oZWFwPyBOby4gYHJhbmdlYCBpcyBpbml0aWFsaXplZCwgYW5kIGBkZXRhaWxzYCBpcyBwYXNzZWQgYXMgYSBwb2ludGVyLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBhbmQgbm8gZXhwb3N1cmVzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLgoKVGhlcmVmb3JlLCAqdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzKi4gVGhlIGNvcnJlY3Qgc2V0dGluZyBoZXJlIGlzIGBOZWVkc0tNU0FOPWZhbHNlYC4KCkJlZm9yZSBJIGNvbW1pdCB0byB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOgoqICAgQXJlIHRoZXJlIGFueSBpbmZvIGxlYWtzPyBOby4KKiAgIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25zPyBOby4KKiAgIERvZXMgaXQgYWxsb2NhdGUvaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHJlYWQgbGF0ZXI/IE5vLgoqICAgRG9lcyBpdCBtb2RpZnkgYm91bmRzL2xlbmd0aHMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIEkmIzM5O2xsIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcgY2xlYXJseSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGZ1bmN0aW9uIGNhbGwgaW4gbW0vbWVtb3J5LmMgKHBhc3NpbmcgJiMzOTtkZXRhaWxzJiMzOTsgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIGZ1bmN0aW9uIGNhbGwgaW4gbW0vbWVtb3J5LmMgKHBhc3NpbmcgJiMzOTtkZXRhaWxzJiMzOTsgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjMzOjA3LjQ0Nzk2NzE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwODQ3MzI5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCIsXG4gICAgXCJtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAnZGV0YWlscycgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MDcuNDQ3OTg1MzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ2Mjk1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMjk3NDZhZTBmZTMwM2NhYmEzNTE1MjNkNGE1NjMzMzZhZjY4NDc4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDg6MzM6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGVjNjNkZDYyMTJhYzUuLmIxYjM4MmQ1NTJjMzkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC0yMzA0LDcgKzIzMDQsNyBAQCB2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiBcXG4gXFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbiBcXHRcXHRcXHRcXHRhZGRyZXNzLCBlbmQpO1xcbi1cXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuK1xcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG4gXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cXHUwMDNldm1fbW0pO1xcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzowNy44MzMyNzU2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQ1NzU1MDg4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCIsXG4gICAgXCJtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZWM2M2RkNjIxMmFjNS4uYjFiMzgyZDU1MmMzOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIzMDQsNyArMjMwNCw3IEBAIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbi1cdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCk7XG4rXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xuIFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MDcuODMzMjc3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MjQ5NjIyNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkaWZmYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjaGFuZ2luZyBzb21ldGhpbmcgd2l0aGluIHRoZSBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIG5ldyBhcmd1bWVudCwgbGlrZWx5IG5hbWVkIGBkZXRhaWxzYCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24gY2FsbC4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuTXkgcHJpbWFyeSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIGFyZ3VtZW50IHdhcyBhZGRlZC4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBzb21lIG5ldyBmZWF0dXJlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBvciB2aXJ0dWFsIG1lbW9yeSBhcmVhcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhcmd1bWVudCB1c2VkIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb3IgcGVyZm9ybWFuY2UgY291bnRlcnM/IEkgbmVlZCB0byBzZWUgd2hhdCBgZGV0YWlsc2AgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQgY29tZXMgZnJvbS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlLlxuXG5UbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCBjb250ZXh0LiBUaGlzIHNpbmdsZSBsaW5lIGRpZmZlcmVuY2UgaXNuJ3QgZW5vdWdoLiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29tbWl0IG1lc3NhZ2UsIGFuZCBpZGVhbGx5LCB0aGUgcmVsYXRlZCBpc3N1ZXMgb3IgZGlzY3Vzc2lvbnMuIEknbGwgbmVlZCB0byB1c2UgYGdpdCBzaG93YCB0byB2aWV3IHRoZSBjb21taXQgaW4gaXRzIGVudGlyZXR5LCBvciBpZiB0aGVyZSdzIGEgd2lkZXIgaW1wYWN0IEknbGwgaGF2ZSB0byB1c2UgZ3JlcHBlciB0byBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhbmQgcHJvamVjdC4gVGhlbiBJJ2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoaXMgY2hhbmdlIG1lYW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MjQuMDgyOTAzMTgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI0MTIyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ2LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0NzpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDk9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTQ9c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMjA6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDA0LVxcbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNTQwNi1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4tLVxcbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG4tLVxcbm1tL21lbW9yeS5jLTIyNzAtXFxubW0vbWVtb3J5LmM6MjI3MTpcXHRcXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxubW0vbWVtb3J5LmMtMjI3Mi1cXHRcXHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTIzMDYtXFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG5tbS9tZW1vcnkuYzoyMzA3OlxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMzA4LVxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MjUuNzA1MzIzODU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM1OTE0MDg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYG1tL21lbW9yeS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjMwNC4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZSBhbGxvY2F0aW9uLCB3aGljaCBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgYmV0dGVyLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIGhvdyB0aGUga2VybmVsIHJlcXVlc3RzLCBtYXBzLCBhbmQgbWFuYWdlcyB0aGVzZSBsYXJnZSBtZW1vcnkgcmVnaW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZnJhZ21lbnRhdGlvbiwgYW5kIG1heWJlIGV2ZW4gc29tZSBkZXRhaWxzIG9uIGVycm9yIGhhbmRsaW5nLlxuXG5UbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUsIEknbGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZm9jdXMgb24gbGluZXMgMjQ0LTI2MCBhbmQgMzE0LTMyNS4gVGhlc2UgbGluZXMgbGlrZWx5IGNvbnRhaW4gdGhlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBhc3NvY2lhdGVkIHdpdGggSHVnZVRMQiBvcGVyYXRpb25zLiBUaGlzIHdpbGwgaW5jbHVkZSBpbXBvcnRhbnQgc3R1ZmYsIGxpa2UgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgaHVnZSBwYWdlcyB0aGVtc2VsdmVzLCByZWxldmFudCBmbGFncywgYW5kIHBlcmhhcHMgc29tZSBpbnRlcm5hbCBkYXRhIHR5cGVzIHVzZWQgdG8gbWFuYWdlIHRoZW0uIE15IGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZGluZyBibG9ja3MgYW5kIGRhdGEgbW9kZWxzIGludm9sdmVkIGluIGhhbmRsaW5nIGh1Z2UgcGFnZXMgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byBrbm93IHRoZSBiYXNpYyBpbnRlcmZhY2Ugb2YgdGhlIGtlcm5lbC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjMzOjI4LjA2NDQ2Njc5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjkwOlxcdCAqXFxuMjI5MTpcXHQgKiBJZiBAZGV0YWlscyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMuXFxuMjI5MjpcXHQgKi9cXG4yMjkzOlxcdHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuMjI5NDpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbjIyOTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuMjI5NjpcXHR7XFxuMjI5NzpcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBzaXplO1xcbjIyOTg6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yMjk5OlxcdFxcbjIzMDA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCF0bGIgfHwgdGxiLVxcdTAwM2VtbSAhPSB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzAxOlxcdFxcbjIzMDI6XFx0XFx0aWYgKHVubGlrZWx5KCFzaXplKSlcXG4yMzAzOlxcdFxcdFxcdHJldHVybjtcXG4yMzA0OlxcdFxcbjIzMDU6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIzMDY6XFx0XFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG4yMzA3OlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG4yMzA4OlxcdFxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzA5OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuMjMxMDpcXHRcXHQvKlxcbjIzMTE6XFx0XFx0ICogdW5tYXAgJ2FkZHJlc3MtZW5kJyBub3QgJ3JhbmdlLnN0YXJ0LXJhbmdlLmVuZCcgYXMgcmFuZ2VcXG4yMzEyOlxcdFxcdCAqIGNvdWxkIGhhdmUgYmVlbiBleHBhbmRlZCBmb3IgaHVnZXRsYiBwbWQgc2hhcmluZy5cXG4yMzEzOlxcdFxcdCAqL1xcbjIzMTQ6XFx0XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xcbjIzMTU6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuMjMxNjpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHtcXG4yMzE3OlxcdFxcdFxcdC8qXFxuMjMxODpcXHRcXHRcXHQgKiBmbHVzaCB0bGIgYW5kIGZyZWUgcmVzb3VyY2VzIGJlZm9yZSBodWdldGxiX3phcF9lbmQoKSwgdG9cXG4yMzE5OlxcdFxcdFxcdCAqIGF2b2lkIGNvbmN1cnJlbnQgcGFnZSBmYXVsdHMnIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4yMzIwOlxcdFxcdFxcdCAqL1xcbjIzMjE6XFx0XFx0XFx0dGxiX2ZpbmlzaF9tbXUodGxiKTtcXG4yMzIyOlxcdFxcdFxcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xcbjIzMjM6XFx0XFx0XFx0dGxiX2dhdGhlcl9tbXUodGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzI0OlxcdFxcdH1cXG4yMzI1OlxcdH1cXG4yMzI2OlxcdFxcbjIzMjc6XFx0LyoqXFxuMjMyODpcXHQgKiB6YXBfdm1hX3JhbmdlIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gYSB2bWEgcmFuZ2VcXG4yMzI5OlxcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzoyOC4wNjQ3MjQ1NTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjQyMzExMTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2VUTEIgSGVhZGVyKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSHVnZVRMQiBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxldmFudCBtYWNyb3MuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyAyNDAtMjcwIGFuZCB0aGVuIGNpcmNsaW5nIGJhY2sgdG8gbGluZXMgMzEwLTMzNS4gSSdtIHByZXR0eSBzdXJlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MgYXJlIGxvY2F0ZWQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBlbGVtZW50cyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLi4uIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6MzQuNzA3MDM4MjM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHR1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCk7XFxuIDI0MTpcXHRpbnQgaHVnZV9wbWRfdW5zaGFyZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMjQyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbiAyNDM6XFx0dm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjQ0OlxcdHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNDU6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCk7XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI0ODpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG4gMjQ5OlxcdGV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNTA6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNTM6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbiAyNTY6XFx0XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbiAyNTc6XFx0fVxcbiAyNTg6XFx0XFxuIDI1OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNjA6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiAyNjE6XFx0e1xcbiAyNjI6XFx0XFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbiAyNjM6XFx0XFx0XFx0X19odWdldGxiX3phcF9lbmQodm1hLCBkZXRhaWxzKTtcXG4gMjY0OlxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNjc6XFx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI2ODpcXHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNjk6XFx0dm9pZCBodWdldGxiX3ZtYV91bmxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzA6XFx0aW50IGh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzE6XFx0dm9pZCBodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjcyOlxcdHZvaWQgaHVnZXRsYl92bWFfbG9ja19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTtcXG4gMjczOlxcdGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMjc0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IG5ld3Byb3QsXFxuIDI3NTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNwX2ZsYWdzKTtcXG4gMjc2OlxcdHZvaWQgaHVnZXRsYl91bnNoYXJlX2FsbF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjc3OlxcdHZvaWQgZml4dXBfaHVnZXRsYl9yZXNlcnZhdGlvbnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzg6XFx0dm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjMzOjM0LjcwNzE0MjE4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NzUyOTIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBhIERpc2NyZXBhbmN5IGluIGBodWdldGxiX3phcF9iZWdpbmAncyBBcmd1bWVudCBMaXN0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBmdW5jdGlvbiBkZWZpbml0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBJdCBsb29rcyBsaWtlIGl0IHRha2VzIGEgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAgcG9pbnRlciBhbmQgdHdvIGB1bnNpZ25lZCBsb25nYCBwb2ludGVycywgYHN0YXJ0YCBhbmQgYGVuZGAuIFRoZSBkZWZpbml0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgZXhwZWN0ZWQuXG5cbkJ1dCB0aGVuLCB3aGVuIEkgbG9va2VkIGF0IHRoZSBjYWxsIGluIGBtbS9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBhdCBsaW5lIDIzMDcsIHRoZSBjYWxsIHNpdGUgc2VlbXMgdG8gYmUgdXNpbmcgKnRocmVlKiBhcmd1bWVudHMsIHdpdGggdGhlIGluY2x1c2lvbiBvZiBgZGV0YWlsc2A6IGBodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO2AuXG5cblRoaXMgaXMgYSByZWQgZmxhZy4gRG9lcyBgaHVnZXRsYl96YXBfYmVnaW5gIHRha2UgdGhyZWUgb3IgZm91ciBhcmd1bWVudHM/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgZXhwbGFpbiB0aGlzIGRpdmVyZ2VuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHJpZ2h0LCBvciBpZiBpdCdzIGEgYnVnLiBTaW5jZSBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBgZ2l0IGxvZ2AgYXQgdGhlIG1vbWVudCwgSSdsbCBuZWVkIHRvIHVzZSB3aGF0IEkgaGF2ZS4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiBhZ2FpbiBmb3IgdGhlIGZvdXJ0aCBhcmd1bWVudC4gVGhlbiwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBodWdldGxiX3phcF9iZWdpbmAgaXMgZGVmaW5lZCB0byBzZWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZ1bmN0aW9uIGRlZmluaXRpb25zLiBJJ2xsIGFsc28gdHJ5IGEgYnJvYWRlciBncmVwIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uIGFuZCBpZiB0aGV5J3JlIGNvbnNpc3RlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo0MC4xODI0Mzg4MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzIyMjA2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ2LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0NzpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDk9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUyOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTQ9c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxOS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMjA6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MjQ1PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDA0LVxcbm1tL2h1Z2V0bGIuYzo1NDA1OnZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtNTQwNi1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4tLVxcbm1tL21lbW9yeS5jPTIyNTU9dm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB1bm1hcF9kZXNjICp1bm1hcClcXG4tLVxcbm1tL21lbW9yeS5jLTIyNzAtXFxubW0vbWVtb3J5LmM6MjI3MTpcXHRcXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxubW0vbWVtb3J5LmMtMjI3Mi1cXHRcXHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIyOTM9dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTIzMDYtXFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG5tbS9tZW1vcnkuYzoyMzA3OlxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG5tbS9tZW1vcnkuYy0yMzA4LVxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6NDIuMDU0NjY5OTY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Njg5OTA1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBIdWdlVExCIElzc3VlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzLi4uIEknbSBwcmV0dHkgc3VyZSBJJ3ZlIG5hcnJvd2VkIGRvd24gdGhlIGFyZWEgb2YgY29uY2VybiwgYnV0IGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBoZWFkZXIgZmlsZSBpcyB3YXJyYW50ZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBnYW5kZXIgYXQgbGluZXMgMzE1IHRocm91Z2ggMzMwLiBJdCdzIGEga2V5IHNwb3Qgd2hlcmUgc29tZSBvZiB0aGUgY29yZSBIdWdlVExCIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGFyZSBwcm9iYWJseSBkZWNsYXJlZCwgYW5kIGl0J3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgcmUtY2hlY2sgdG8gZW5zdXJlIG5vdGhpbmcgcmVsYXRlZCB0byB0aGUgcm9vdCBjYXVzZSBoYXMgc2xpcHBlZCBieS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBldmVuIGlmIGl0IGZlZWxzIHJlZHVuZGFudCwgd2hlbiBkaWFnbm9zaW5nIGEgdHJpY2t5IG1lbW9yeSBpc3N1ZS4gSnVzdCB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHdoYXRldmVyJ3MgaGFwcGVuaW5nIGlzbid0IGEgc2ltcGxlIG1pc2NvbmZpZ3VyYXRpb24gb3IgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuIFRpbWUgdG8gcHVsbCB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo0NS4wMjM2NjQzNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdH1cXG4gMzI1OlxcdFxcbiAzMjY6XFx0c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2VuZChcXG4gMzI3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiAzMjk6XFx0e1xcbiAzMzA6XFx0fVxcbiAzMzE6XFx0XFxuIDMzMjpcXHRzdGF0aWMgaW5saW5lIGludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsXFxuIDMzMzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcXG4gMzM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbiAzMzU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpXFxuIDMzNjpcXHR7XFxuIDMzNzpcXHRcXHRCVUcoKTtcXG4gMzM4OlxcdFxcdHJldHVybiAwO1xcbiAzMzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo0NS4wMjM3ODE3NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcxNDI1NzgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb21waWxhdGlvbiBFcnJvciBEZXRlY3RlZDogQSBEZWVwIERpdmUgaW50byBhIFBvdGVudGlhbCBCdWcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGlzIGRpZmYuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSByZWQgZmxhZyB3YXZpbmcgaW4gdGhlIHdpbmQuIFRoZSBjaGFuZ2UgdG8gYGh1Z2V0bGJfemFwX2JlZ2luYCBpcyBpbW1lZGlhdGVseSBjb25jZXJuaW5nLiBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBjYWxsIHRvb2sgdGhyZWUgYXJndW1lbnRzIGFuZCBub3cgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhZGQgYSBmb3VydGg6IGBodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO2AuIFRoYXQncyBhIGNsYXNzaWMgQyBjb21waWxlLXRpbWUgZXJyb3Igd2FpdGluZyB0byBoYXBwZW4uIFwiVG9vIG1hbnkgYXJndW1lbnRzIHRvIGZ1bmN0aW9uXCIhXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBJIGdvIHN0cmFpZ2h0IHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBgaHVnZXRsYl96YXBfYmVnaW5gLCB3aGljaCwgYmFzZWQgb24gdGhlIGluY2x1ZGUgcGF0aCwgc2hvdWxkIGJlIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIEFuZCB0aGVyZSBpdCBpcywgdHdpY2UgZXZlbi4gSXQgdGFrZXMgdGhlIGZhbWlsaWFyIHRocmVlIGFyZ3VtZW50cywgYXMgSSBleHBlY3RlZC4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZSwgcmVnYXJkbGVzcyBvZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGNvbnNpc3RlbnQ6IHRocmVlIGFyZ3VtZW50cy5cblxuU28sIHRoZSBwYXRjaCAqd2lsbCogY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvci4gVGhpcyByYWlzZXMgc29tZSBzZXJpb3VzIHF1ZXN0aW9ucy4gSXMgdGhpcyBhIGJyb2tlbiBwYXRjaD8gRGlkIHNvbWVvbmUgbWlzcyBzb21ldGhpbmc/IEl0J3MgZGVmaW5pdGVseSBhIGJ1ZyBpbiB0aGUgcGF0Y2ggdW5kZXIgcmV2aWV3LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGxhcmdlciBwaWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBBY2NvcmRpbmcgdG8gdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBJdCdzIGluIGBtbS9tZW1vcnkuY2AsIHdoaWNoIHNjcmVhbXMgXCJjb3JlIG1lbW9yeSBtYW5hZ2VtZW50XCIuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHBhcnQgb2YgYSBjb3JlIHN1YnN5c3RlbSwgYW5kIGFzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLCBhbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZSB0aGlzLCBzaG91bGQgYmUgZnV6emVkLiBBbmQgdGhpcyAqaXMqIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBmdW5jdGlvbiBjYWxsLCB3aGljaCBzaG91bGQgbm93IGJlIGZsYWdnZWQuXG5cbkJ1dCwgYmVmb3JlIEkgY2FuIG1ha2UgYSBmaW5hbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIGNhc2Ugb2YgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6NTAuNzM4MDQyMDQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MzA3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInphcF92bWFfcmFuZ2VfYmF0Y2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTU5Mj1zdHJ1Y3QgemFwX2RldGFpbHM7XFxubW0vaW50ZXJuYWwuaDo1OTM6dm9pZCB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9pbnRlcm5hbC5oLTU5NC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWFkdmlzZS5jPTg2Mz1zdGF0aWMgbG9uZyBtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWEoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtODcwLVxcbm1tL21hZHZpc2UuYzo4NzE6XFx0emFwX3ZtYV9yYW5nZV9iYXRjaGVkKG1hZHZfYmVoYXZpb3ItXFx1MDAzZXRsYiwgbWFkdl9iZWhhdmlvci1cXHUwMDNldm1hLFxcbm1tL21hZHZpc2UuYy04NzItXFx0XFx0XFx0ICAgICAgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kIC0gcmFuZ2UtXFx1MDAzZXN0YXJ0LCBcXHUwMDI2ZGV0YWlscyk7XFxuLS1cXG5tbS9tZW1vcnkuYz0yMjU1PXZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjc5LS8qKlxcbm1tL21lbW9yeS5jOjIyODA6ICogemFwX3ZtYV9yYW5nZV9iYXRjaGVkIC0gemFwIHBhZ2UgdGFibGUgZW50cmllcyBpbiBhIHZtYSByYW5nZVxcbm1tL21lbW9yeS5jLTIyODEtICogQHRsYjogcG9pbnRlciB0byB0aGUgY2FsbGVyJ3Mgc3RydWN0IG1tdV9nYXRoZXJcXG4tLVxcbm1tL21lbW9yeS5jLTIyOTItICovXFxubW0vbWVtb3J5LmM6MjI5Mzp2b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbm1tL21lbW9yeS5jLTIyOTQtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL21lbW9yeS5jPTIzMzU9dm9pZCB6YXBfdm1hX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS9tZW1vcnkuYy0yMzQwLVxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIHZtYS1cXHUwMDNldm1fbW0pO1xcbm1tL21lbW9yeS5jOjIzNDE6XFx0emFwX3ZtYV9yYW5nZV9iYXRjaGVkKFxcdTAwMjZ0bGIsIHZtYSwgYWRkcmVzcywgc2l6ZSwgTlVMTCk7XFxubW0vbWVtb3J5LmMtMjM0Mi1cXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ0Mzg9c3RhdGljIGlubGluZSB2b2lkIHVubWFwX21hcHBpbmdfcmFuZ2VfdHJlZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21lbW9yeS5jLTQ0NTQtXFx0XFx0dGxiX2dhdGhlcl9tbXUoXFx1MDAyNnRsYiwgdm1hLVxcdTAwM2V2bV9tbSk7XFxubW0vbWVtb3J5LmM6NDQ1NTpcXHRcXHR6YXBfdm1hX3JhbmdlX2JhdGNoZWQoXFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgc2l6ZSwgZGV0YWlscyk7XFxubW0vbWVtb3J5LmMtNDQ1Ni1cXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzM6NTIuMzQ0MzU2ODc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NTQxOTU1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgY29yZSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBjcnVjaWFsIHBvaW50czogYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgKGhhbmRsaW5nIGBNQURWX0RPTlRORUVEYCBhbmQgc2ltaWxhciBtYWR2aXNlIGNhbGxzKSwgYHphcF92bWFfcmFuZ2VgIGl0c2VsZiwgYW5kIGB1bm1hcF9tYXBwaW5nX3JhbmdlX3RyZWVgICh3aGljaCBjb3ZlcnMgdHJ1bmNhdGlvbiBhbmQgYHVubWFwX21hcHBpbmdfcmFuZ2VgKS4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiaGlnaCB1c2VyLXNwYWNlIHJlYWNoYWJpbGl0eS5cIiBTcGVjaWZpY2FsbHksIHRoaW5rIGBtYWR2aXNlYCwgZXNwZWNpYWxseSBgTUFEVl9ET05UTkVFRGAsIGFsc28gYHRydW5jYXRlYCwgYGZhbGxvY2F0ZWAgYW5kIHRoZSBldmVyLXByZXNlbnQgYG11bm1hcGAsIGFuZCB0aGF0J3MgKmJlZm9yZSogY29uc2lkZXJpbmcgdGhlIGVmZmVjdHMgb24gaHVnZXRsYiBwYWdlcyBvciBldmVuIHN0YW5kYXJkIHBhZ2VzLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHByZXR0eSBiaWcuXG5cbkhtbSwgdGhpcyBgZGV0YWlsc2AgcGFyYW1ldGVyIHBhc3NlZCB0byBgaHVnZXRsYl96YXBfYmVnaW5gIGlzIG1ha2luZyBtZSBwYXVzZS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGdldHMgdXNlZC4gTGV0J3Mgc2VlLi4uIEFoLCB0aGVyZSBpdCBpcywgYGh1Z2V0bGJfemFwX2VuZGAgb24gbGluZSAyMzIyLiBJdCBsb29rcyBsaWtlIGl0IGlzIGFsc28gcGFzc2VkIHRvIGBfX3phcF92bWFfcmFuZ2VgIGxpa2Ugc286XG5cbmBgYGNcbmh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCk7XG5fX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFx1MDAyNmRldGFpbHMpO1xuYGBgXG5cbkkgc3VzcGVjdCB0aGUgYXV0aG9yICptZWFudCogdG8gcGFzcyBgZGV0YWlsc2AgaGVyZSwgb3IgdGhlcmUncyBhIHR5cG8sIGJ1dCBlaXRoZXIgd2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHphcF92bWFfcmFuZ2VfYmF0Y2hlZCgpYCBpbiBgbW0vbWVtb3J5LmNgLiBUaGF0J3MgdGhlIGtleS5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggYFdvcnRoRnV6emluZ2A/IExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOiBDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlwiXG5cbkJpbmdvLiBUaGlzIHRvdWNoZXMgYG1tL21lbW9yeS5jYCB3aXRoaW4gYHphcF92bWFfcmFuZ2VfYmF0Y2hlZCgpYC4gSXQncyBhIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBJdCdzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgdmlhIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYCwgYGZ0cnVuY2F0ZWAsIGBmYWxsb2NhdGVgLCBgbXVubWFwYCwgZXRjLiBTbywgdGhlIGFuc3dlciBpcyBcInllcyxcIiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuXG5cbk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBvciBgQ09ORklHX01NVWAgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBgX196YXBfdm1hX3JhbmdlYCB3aWxsIGJlIHJ1biwgd2hpY2ggc2VlbXMgc3RhbmRhcmQgZW5vdWdoLiBJIHNob3VsZCBjaGVjayBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIHRvIHNlZSB3aGV0aGVyIGBodWdldGxiX3phcF9iZWdpbmAgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzLlxuXG5OZXh0IHN0ZXA6IGRlZmluZSB3aGF0IGZvY3VzIHN5bWJvbHMgd2lsbCBiZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo1Ny44OTg1NTU5ODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjkwODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19IVUdFVExCX1BBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjM9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI4MD11bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yODEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjgyOiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjgzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDYzPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpIHt9XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDY0LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ2NTojZW5kaWYgLyogIUNPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00NjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01ODI9ZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTk2LSAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjU5NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU5OC0jZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02NDk9SFBBR0VGTEFHKENtYSwgY21hKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY1MC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2NTE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02NTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMDgyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEwODYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTA4NzojZWxzZVxcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDg4LXN0cnVjdCBoc3RhdGUge307XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMzA0PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2Jvb3RtZW1fc3RydWN0X3BhZ2VfaW5pdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwNi19XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMwNzojZW5kaWZcXHQvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMwOC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMzA5PXN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqaHVnZV9wdGVfbG9jayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxOC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzE5OiNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NNQSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzIwLWV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozMzo1Ny45NDgyNDk1NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM4NjQyMjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYEhVR0VUTEJfUEFHRWAgU3VwcG9ydCBhbmQgU3ltYm9sIEluY2x1c2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGludGVncmF0ZSBmdXp6aW5nIGZvciB0aGUgYEhVR0VUTEJfUEFHRWAgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpcyBpbmNsdWRlZCB3aXRoaW4gdGhlIGBGb2N1c1N5bWJvbHNgIHNldC4gVGhpcyBpcyBrZXkgYmVjYXVzZSB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgaXMgY2VudHJhbCB0byB0aGlzIGxvZ2ljLlxuXG5Ob3csIHdoYXQgKnNob3VsZCogYmUgaW4gYEZvY3VzU3ltYm9sc2A/IExldCdzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LiBPYnZpb3VzbHksIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGEgbXVzdC4gVGhlbiwgdGhlIGRpcmVjdCBjYWxsZXIgYHphcF92bWFfcmFuZ2VgLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhpcyByYW5nZSwgc3VjaCBhcyBgX19odWdldGxiX3phcF9iZWdpbmAgYXJlIGRlZmluaXRlbHkgY29udGVuZGVycy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBzaW5jZSBpdCBjYWxscyBvbiB0aGlzIHNlcXVlbmNlLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSB1YmlxdWl0eSBvZiB0aGVzZSBzeW1ib2xzIGlzIGluIG9yZGVyLiBJdCBsb29rcyBsaWtlIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGlzIGluZGVlZCBub24tdWJpcXVpdG91cywgc3BlY2lmaWMgdG8gYmF0Y2hlZCB6YXBwaW5nIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBgbWFkdmlzZSBET05UTkVFRGAsIHRydW5jYXRlLCBhbmQgaHVnZXRsYiB1bm1hcC4gU2ltaWxhcmx5LCBgX19odWdldGxiX3phcF9iZWdpbmAgaXMgaHVnZXRsYi1zcGVjaWZpYy4gYG1hZHZpc2VfZG9udG5lZWRfc2luZ2xlX3ZtYWAgYW5kIHRoZSByYW5nZSBjYWxsZXIgYHphcF92bWFfcmFuZ2VgIGFyZSBhbHNvIG5vbi11YmlxdWl0b3VzLiBHb29kLCB0aGF0IG1ha2VzIHRoZSBkZWNpc2lvbiBlYXNpZXIuXG5cbk5vdywgbGV0J3MgdHJpcGxlLWNoZWNrIGFsbCB0aGUgcmVxdWlyZW1lbnRzOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCB0byBgW1wiSFVHRVRMQl9QQUdFXCJdYC4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJJ20gbGVhbmluZyB0b3dhcmRzIGBbXCJ6YXBfdm1hX3JhbmdlX2JhdGNoZWRcIiwgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCJdYCwgYnV0IEkgbWF5IGFsc28gaW5jbHVkZSBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBhcyB3ZWxsLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGVzZSBzeW1ib2xzIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZnVuY3Rpb25hbGl0eSBhZmZlY3RlZCBieSB0aGUgY29uZmlndXJhdGlvbi5cblxuRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgY29uZmlncyBhbmQgc3ltYm9sIG5hbWVzLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gb24gc29saWQgZ3JvdW5kLiBMb2NhdGlvbiBzZWVtcyBjb3JyZWN0OiBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpbiBgbW0vbWVtb3J5LmNgLCBgX19odWdldGxiX3phcF9iZWdpbmAgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hYCBpbiBgbW0vbWFkdmlzZS5jYC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjI0LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDowMi4zMzQ2NzQ0OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDEwNjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemFwX3ZtYV9yYW5nZV9iYXRjaGVkXCIsXG4gICAgXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCIsXG4gICAgXCJtYWR2aXNlX2RvbnRuZWVkX3NpbmdsZV92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB6YXBfdm1hX3JhbmdlX2JhdGNoZWQoKSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tL21lbW9yeS5jKSBkdXJpbmcgaHVnZXRsYiB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGlvbiBzZXR1cC4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVyYXRpb25zIGxpa2UgbWFkdmlzZShNQURWX0RPTlRORUVEKSBhbmQgdW5tYXBfbWFwcGluZ19yYW5nZS90cnVuY2F0ZSBvbiBodWdldGxiZnMvaHVnZXRsYiBWTUFzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInphcF92bWFfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwiX19odWdldGxiX3phcF9iZWdpblwiLFxuICAgIFwibWFkdmlzZV9kb250bmVlZF9zaW5nbGVfdm1hXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKCkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtbS9tZW1vcnkuYykgZHVyaW5nIGh1Z2V0bGIgdW5tYXBwaW5nIGFuZCBpbnZhbGlkYXRpb24gc2V0dXAuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3BlcmF0aW9ucyBsaWtlIG1hZHZpc2UoTUFEVl9ET05UTkVFRCkgYW5kIHVubWFwX21hcHBpbmdfcmFuZ2UvdHJ1bmNhdGUgb24gaHVnZXRsYmZzL2h1Z2V0bGIgVk1Bcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzQ6MDIuNDA4Nzg4NzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEyMzkwMTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjAyLjQwOTIxNTcwMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MTIzNDcwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIGZ1bmN0aW9uIGNhbGwgaW4gbW0vbWVtb3J5LmMgKHBhc3NpbmcgJ2RldGFpbHMnIHRvIGh1Z2V0bGJfemFwX2JlZ2luIGluIHphcF92bWFfcmFuZ2VfYmF0Y2hlZCkuIFRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgLyBodWdldGxiIHVubWFwcGluZyBsb2dpYyBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb3B5aW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBoYW5kbGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIGFsdGVyaW5nIGRhdGEgbGVuZ3Rocy9ib3VuZHMgY2hlY2tpbmcgb3ZlciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gTU0gb3BlcmF0aW9ucyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMsIGxvY2tpbmcgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGNvbmZpZ3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyOTc0NmFlMGZlMzAzY2FiYTM1MTUyM2Q0YTU2MzMzNmFmNjg0NzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjMzOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZWM2M2RkNjIxMmFjNS4uYjFiMzgyZDU1MmMzOSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTIzMDQsNyArMjMwNCw3IEBAIHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0YWRkcmVzcywgZW5kKTtcbi1cdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCk7XG4rXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xuIFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cdTAwM2V2bV9tbSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcdTAwMjZyYW5nZSk7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MzQ6MDIuNDA5MjE2NjAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjU3NzIxODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRpbnkgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIGlzIGEgc21hbGwgb25lLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdOKAmXMgZm9jdXNlZCBvbiBhIHZlcnkgc3BlY2lmaWMgYXJlYSwganVkZ2luZyBieSB0aGUgY29udGV4dC4gSXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBIdWdlVExCIHBhZ2VzLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGEgbWlub3IgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG1tL21lbW9yeS5jYCBmaWxlLiBJIHNlZSB0aGUgZGlmZiBzaG93cyB0aGF0IHRoZSBgaHVnZXRsYl96YXBfYmVnaW5gIGZ1bmN0aW9uIGlzIHJlY2VpdmluZyBhIG5ldyBhcmd1bWVudCwgYGRldGFpbHNgLiBMZXQncyBhc3N1bWUgdGhhdCBgZGV0YWlsc2AgY29udGFpbnMgdXNlZnVsIGluZm87IGl0J3MgYSBnb29kIGFzc3VtcHRpb24uXG5cbkdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcywgYGh1Z2V0bGJfemFwX2JlZ2luYCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzdGFydCBvZiBhIFwiemFwXCIgb3BlcmF0aW9uLCByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMsIGFuZCBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCBpcyBhIGJhdGNoZWQgdmVyc2lvbiBvZiBhIFwiemFwIHJhbmdlXCIgb3BlcmF0aW9uLCBsaWtlbHkgaW52b2x2aW5nIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKS4gVGhlIGNoYW5nZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBmb3IgYGh1Z2V0bGJfemFwX2JlZ2luYCBpcyB3aGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGF0IHRoZSBcImJlZ2luXCIgb3BlcmF0aW9uIG5vdyBuZWVkcyBhZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gb3IgcGFyYW1ldGVycy4gUGVyaGFwcyB0aGlzIGBkZXRhaWxzYCBzdHJ1Y3QgaXMgYSBuZXcgd2F5IHRvIGNvbnZleSBmbGFncywgb3IgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyByZWxldmFudCBtZXRhZGF0YSBhYm91dCB0aGUgVk1BIGJlaW5nIHphcHBlZCwgb3IgdGhlIHJlYXNvbiBiZWhpbmQgdGhlIG9wZXJhdGlvbi4gXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBjaGFuZ2UuIEknbGwgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYm90aCBgaHVnZXRsYl96YXBfYmVnaW5gIGFuZCBgemFwX3ZtYV9yYW5nZV9iYXRjaGVkYCwgYWxvbmcgd2l0aCB0aGUgYGRldGFpbHNgIGFyZ3VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleS4gSSdsbCBjaGVjayBob3cgYGRldGFpbHNgIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LCBhIGJ1ZyBmaXgsIG9yIGV2ZW4gYSBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZSBtYW5hZ2VtZW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGRlZmluaXRpb24gb2YgYGh1Z2V0bGJfemFwX2JlZ2luYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjE1LjA2Njk0MjM1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyOTQ2NzAwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX3phcF9iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDQ9dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjQ3OmV4dGVybiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ4LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0OT1leHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1MS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTI6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1My1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTUtXFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1NjpcXHRcXHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzE5LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjMyMDpzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzIxLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTUyNDU9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0MDQtXFxubW0vaHVnZXRsYi5jOjU0MDU6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01NDA2LVxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxubW0vbWVtb3J5LmM9MjI1NT12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxcbi0tXFxubW0vbWVtb3J5LmMtMjI3MC1cXG5tbS9tZW1vcnkuYzoyMjcxOlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKTtcXG5tbS9tZW1vcnkuYy0yMjcyLVxcdFxcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNmRldGFpbHMpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjI5Mz12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjMwNi1cXHRcXHRcXHRcXHRhZGRyZXNzLCBlbmQpO1xcbm1tL21lbW9yeS5jOjIzMDc6XFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQsIGRldGFpbHMpO1xcbm1tL21lbW9yeS5jLTIzMDgtXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cXHUwMDNldm1fbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoxNi41OTY0MTg4MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1MDUwNTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0YXNrLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSByZWxldmFudCBmaWVsZDpcblxuKipEaXZpbmcgaW50byBIdWdlVExCIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHVnZVRMQnMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtb3J5LmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDIyNTAgdGhyb3VnaCAyMzIwLiBUaGF0IHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpZXcgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLCBsaWtlbHkgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24sIGZyZWVpbmcsIG9yIGZhdWx0IGhhbmRsaW5nIHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHBvdGVudGlhbGx5IHNvbWUgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGNydWNpYWwgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBwaHlzaWNhbC10by12aXJ0dWFsIG1hcHBpbmdzLlxuXG5UaGVuLCBJJ2xsIHN3aXRjaCBnZWFycyBhbmQgY3JhY2sgb3BlbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBjaGVja2luZyBsaW5lcyAyNDAtMzMwLiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSwgc28gaXQnbGwgZXhwb3NlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgcmVsZXZhbnQgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgdGhlIEh1Z2VUTEIgYmVoYXZpb3IuIFRoaXMgaXMgdGhlIGJsdWVwcmludDsgdGhpcyBpcyB3aGVyZSBJJ2xsIHNlZSB0aGUgbGF5b3V0IG9mIHRoZSBgaHVnZXRsYl9jZ3JvdXBgLCB0aGUgYGhzdGF0ZWAgc3RydWN0LCBvciByZWxldmFudCBkZWZpbml0aW9ucyBvZiBob3cgSHVnZVRMQiBwYWdlIHNpemUgaXMgbWFuYWdlZC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSByZXByZXNlbnQgdGhlIGh1Z2UgcGFnZSBzaXplcywgYW55IGFzc29jaWF0ZWQgZmxhZ3MsIGFuZCBob3cgdGhlIGtlcm5lbCB0cmFja3MgdGhlIGF2YWlsYWJsZSBIdWdlVExCIHJlc291cmNlcy4gVGhpcyB3aWxsIGxpa2VseSBpbGx1bWluYXRlIHRoZSBkZXRhaWxzIGJlaGluZCB0aGUgY29yZSBmdW5jdGlvbnMgSSBzZWUgaW4gYG1tL21lbW9yeS5jYC4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93IHRoYXQgZ292ZXJuIGhvdyBIdWdlVExCIHBhZ2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoxOS42NDY5MzIwMTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNTA6XFx0ICogdW5tYXBfdm1hcygpIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgZmx1c2ggdGhlIHdob2xlIHVubWFwcGVkIGFkZHJlc3NcXG4yMjUxOlxcdCAqIHJhbmdlIGFmdGVyIHVubWFwX3ZtYXMoKSByZXR1cm5zLiAgU28gdGhlIG9ubHkgcmVzcG9uc2liaWxpdHkgaGVyZSBpcyB0b1xcbjIyNTI6XFx0ICogZW5zdXJlIHRoYXQgYW55IHRodXMtZmFyIHVubWFwcGVkIHBhZ2VzIGFyZSBmbHVzaGVkIGJlZm9yZSB1bm1hcF92bWFzKClcXG4yMjUzOlxcdCAqIGRyb3BzIHRoZSBsb2NrIGFuZCBzY2hlZHVsZXMuXFxuMjI1NDpcXHQgKi9cXG4yMjU1OlxcdHZvaWQgdW5tYXBfdm1hcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApXFxuMjI1NjpcXHR7XFxuMjI1NzpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4yMjU4OlxcdFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuMjI1OTpcXHRcXHRzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHtcXG4yMjYwOlxcdFxcdFxcdC56YXBfZmxhZ3MgPSBaQVBfRkxBR19EUk9QX01BUktFUiB8IFpBUF9GTEFHX1VOTUFQLFxcbjIyNjE6XFx0XFx0fTtcXG4yMjYyOlxcdFxcbjIyNjM6XFx0XFx0dm1hID0gdW5tYXAtXFx1MDAzZWZpcnN0O1xcbjIyNjQ6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX1VOTUFQLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIyNjU6XFx0XFx0XFx0XFx0XFx0dW5tYXAtXFx1MDAzZXZtYV9zdGFydCwgdW5tYXAtXFx1MDAzZXZtYV9lbmQpO1xcbjIyNjY6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFx1MDAyNnJhbmdlKTtcXG4yMjY3OlxcdFxcdGRvIHtcXG4yMjY4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtYXgodm1hLVxcdTAwM2V2bV9zdGFydCwgdW5tYXAtXFx1MDAzZXZtYV9zdGFydCk7XFxuMjI2OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IG1pbih2bWEtXFx1MDAzZXZtX2VuZCwgdW5tYXAtXFx1MDAzZXZtYV9lbmQpO1xcbjIyNzA6XFx0XFxuMjI3MTpcXHRcXHRcXHRodWdldGxiX3phcF9iZWdpbih2bWEsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCk7XFxuMjI3MjpcXHRcXHRcXHRfX3phcF92bWFfcmFuZ2UodGxiLCB2bWEsIHN0YXJ0LCBlbmQsIFxcdTAwMjZkZXRhaWxzKTtcXG4yMjczOlxcdFxcdFxcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIFxcdTAwMjZkZXRhaWxzKTtcXG4yMjc0OlxcdFxcdFxcdHZtYSA9IG1hc19maW5kKHVubWFwLVxcdTAwM2VtYXMsIHVubWFwLVxcdTAwM2V0cmVlX2VuZCAtIDEpO1xcbjIyNzU6XFx0XFx0fSB3aGlsZSAodm1hKTtcXG4yMjc2OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChcXHUwMDI2cmFuZ2UpO1xcbjIyNzc6XFx0fVxcbjIyNzg6XFx0XFxuMjI3OTpcXHQvKipcXG4yMjgwOlxcdCAqIHphcF92bWFfcmFuZ2VfYmF0Y2hlZCAtIHphcCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gYSB2bWEgcmFuZ2VcXG4yMjgxOlxcdCAqIEB0bGI6IHBvaW50ZXIgdG8gdGhlIGNhbGxlcidzIHN0cnVjdCBtbXVfZ2F0aGVyXFxuMjI4MjpcXHQgKiBAdm1hOiB0aGUgdm1hIGNvdmVyaW5nIHRoZSByYW5nZSB0byB6YXBcXG4yMjgzOlxcdCAqIEBhZGRyZXNzOiBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSByYW5nZSB0byB6YXBcXG4yMjg0OlxcdCAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gemFwXFxuMjI4NTpcXHQgKiBAZGV0YWlsczogZGV0YWlscyBzcGVjaWZ5aW5nIHphcHBpbmcgYmVoYXZpb3JcXG4yMjg2OlxcdCAqXFxuMjI4NzpcXHQgKiBAdGxiIG11c3Qgbm90IGJlIE5VTEwuIFRoZSBwcm92aWRlZCBhZGRyZXNzIHJhbmdlIG11c3QgYmUgZnVsbHlcXG4yMjg4OlxcdCAqIGNvbnRhaW5lZCB3aXRoaW4gQHZtYS4gSWYgQHZtYSBpcyBmb3IgaHVnZXRsYiwgQHRsYiBpcyBmbHVzaGVkIGFuZFxcbjIyODk6XFx0ICogcmUtaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbi5cXG4yMjkwOlxcdCAqXFxuMjI5MTpcXHQgKiBJZiBAZGV0YWlscyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMuXFxuMjI5MjpcXHQgKi9cXG4yMjkzOlxcdHZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuMjI5NDpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbjIyOTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuMjI5NjpcXHR7XFxuMjI5NzpcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBzaXplO1xcbjIyOTg6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yMjk5OlxcdFxcbjIzMDA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCF0bGIgfHwgdGxiLVxcdTAwM2VtbSAhPSB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzAxOlxcdFxcbjIzMDI6XFx0XFx0aWYgKHVubGlrZWx5KCFzaXplKSlcXG4yMzAzOlxcdFxcdFxcdHJldHVybjtcXG4yMzA0OlxcdFxcbjIzMDU6XFx0XFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXFx1MDAzZXZtX21tLFxcbjIzMDY6XFx0XFx0XFx0XFx0XFx0YWRkcmVzcywgZW5kKTtcXG4yMzA3OlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtcXG4yMzA4OlxcdFxcdHVwZGF0ZV9oaXdhdGVyX3Jzcyh2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzA5OlxcdFxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuMjMxMDpcXHRcXHQvKlxcbjIzMTE6XFx0XFx0ICogdW5tYXAgJ2FkZHJlc3MtZW5kJyBub3QgJ3JhbmdlLnN0YXJ0LXJhbmdlLmVuZCcgYXMgcmFuZ2VcXG4yMzEyOlxcdFxcdCAqIGNvdWxkIGhhdmUgYmVlbiBleHBhbmRlZCBmb3IgaHVnZXRsYiBwbWQgc2hhcmluZy5cXG4yMzEzOlxcdFxcdCAqL1xcbjIzMTQ6XFx0XFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBhZGRyZXNzLCBlbmQsIGRldGFpbHMpO1xcbjIzMTU6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuMjMxNjpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHtcXG4yMzE3OlxcdFxcdFxcdC8qXFxuMjMxODpcXHRcXHRcXHQgKiBmbHVzaCB0bGIgYW5kIGZyZWUgcmVzb3VyY2VzIGJlZm9yZSBodWdldGxiX3phcF9lbmQoKSwgdG9cXG4yMzE5OlxcdFxcdFxcdCAqIGF2b2lkIGNvbmN1cnJlbnQgcGFnZSBmYXVsdHMnIGFsbG9jYXRpb24gZmFpbHVyZS5cXG4yMzIwOlxcdFxcdFxcdCAqL1xcbjIzMjE6XFx0XFx0XFx0dGxiX2ZpbmlzaF9tbXUodGxiKTtcXG4yMzIyOlxcdFxcdFxcdGh1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xcbjIzMjM6XFx0XFx0XFx0dGxiX2dhdGhlcl9tbXUodGxiLCB2bWEtXFx1MDAzZXZtX21tKTtcXG4yMzI0OlxcdFxcdH1cXG4yMzI1OlxcdH1cXG4yMzI2OlxcdFxcbjIzMjc6XFx0LyoqXFxuMjMyODpcXHQgKiB6YXBfdm1hX3JhbmdlIC0gemFwIGFsbCBwYWdlIHRhYmxlIGVudHJpZXMgaW4gYSB2bWEgcmFuZ2VcXG4yMzI5OlxcdCAqIEB2bWE6IHRoZSB2bWEgY292ZXJpbmcgdGhlIHJhbmdlIHRvIHphcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoxOS42NDczNzIxNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1MjMxNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBIdWdlVExCIEhlYWRlciBGaWxlcyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgSHVnZVRMQiwgd2hpY2ggbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGF0IGEgcHJldHR5IGZ1bmRhbWVudGFsIGxldmVsLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hhdCdzIGdvaW5nIG9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgdGhlIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBmb2N1cyBvbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBsb29raW5nIGFyb3VuZCBsaW5lcyAyNDAgYW5kIDMxNCBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgbWFjcm8gZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5pdGlhbCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBmb3VuZC4gTGV0J3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHRob3NlIGxpbmVzIHJldmVhbC4gSSBoYXZlIGEgaHVuY2ggdGhhdCB0aGV5J2xsIGJlIHVzZWZ1bCBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjIyLjQ5OTY5MTExOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKTtcXG4gMjQxOlxcdGludCBodWdlX3BtZF91bnNoYXJlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNDI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuIDI0MzpcXHR2b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNDQ6XFx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI0NTpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMjQ4OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmJlZ2luLCB1bnNpZ25lZCBsb25nICplbmQpO1xcbiAyNDk6XFx0ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI1MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI1MzpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXFxuIDI1NjpcXHRcXHRcXHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XFxuIDI1NzpcXHR9XFxuIDI1ODpcXHRcXG4gMjU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI2MDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXFxuIDI2MTpcXHR7XFxuIDI2MjpcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXFxuIDI2MzpcXHRcXHRcXHRfX2h1Z2V0bGJfemFwX2VuZCh2bWEsIGRldGFpbHMpO1xcbiAyNjQ6XFx0fVxcbiAyNjU6XFx0XFxuIDI2NjpcXHR2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI2NzpcXHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gMjY4OlxcdHZvaWQgaHVnZXRsYl92bWFfbG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI2OTpcXHR2b2lkIGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI3MDpcXHRpbnQgaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI3MTpcXHR2b2lkIGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzI6XFx0dm9pZCBodWdldGxiX3ZtYV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpO1xcbiAyNzM6XFx0bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAyNzQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCxcXG4gMjc1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3BfZmxhZ3MpO1xcbiAyNzY6XFx0dm9pZCBodWdldGxiX3Vuc2hhcmVfYWxsX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiAyNzc6XFx0dm9pZCBmaXh1cF9odWdldGxiX3Jlc2VydmF0aW9ucyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIDI3ODpcXHR2b2lkIGh1Z2V0bGJfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuIDI3OTpcXHRcXG4gMjgwOlxcdHVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbiAyODE6XFx0XFxuIDI4MjpcXHQjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbiAyODM6XFx0XFxuIDI4NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9kdXBfdm1hX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIDI4NTpcXHR7XFxuIDI4NjpcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl92bWFfcmVzdl9odWdlX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyODk6XFx0e1xcbiAyOTA6XFx0fVxcbiAyOTE6XFx0XFxuIDI5MjpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbiAyOTM6XFx0e1xcbiAyOTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI5NTpcXHR9XFxuIDI5NjpcXHRcXG4gMjk3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4gMjk5OlxcdHtcXG4gMzAwOlxcdFxcdHJldHVybiBOVUxMO1xcbiAzMDE6XFx0fVxcbiAzMDI6XFx0XFxuIDMwMzpcXHRzdGF0aWMgaW5saW5lIGludCBodWdlX3BtZF91bnNoYXJlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuIDMwNDpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4gMzA1OlxcdHtcXG4gMzA2OlxcdFxcdHJldHVybiAwO1xcbiAzMDc6XFx0fVxcbiAzMDg6XFx0XFxuIDMwOTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiAzMTA6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIDMxMTpcXHR7XFxuIDMxMjpcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXFxuIDMxNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4gMzIzOlxcdHtcXG4gMzI0OlxcdH1cXG4gMzI1OlxcdFxcbiAzMjY6XFx0c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2VuZChcXG4gMzI3OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbiAzMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoyMi40OTk4NDEyODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0NTE4NTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERpc2NyZXBhbmNpZXMgaW4gSHVnZVRMQiBVbm1hcHBpbmcqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIGBodWdldGxiX3phcF9iZWdpbmAgZnVuY3Rpb24uLi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGRpZmYuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhpcyBsaW5lOiBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kLCBkZXRhaWxzKTtgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYXJndW1lbnQgY291bnQuIElzIGBodWdldGxiX3phcF9iZWdpbmAgc3VwcG9zZWQgdG8gdGFrZSBmb3VyIGFyZ3VtZW50cywgYXMgaXQgYXBwZWFycyBoZXJlPyBPciBpcyB0aGVyZSBzb21ldGhpbmcgZWxzZSBnb2luZyBvbj9cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2h5IGlzIGl0IHRoYXQgYHVubWFwX3ZtYXNgIGlzIGNhbGxpbmcgYGh1Z2V0bGJfemFwX2JlZ2luYCB3aXRoIG9ubHkgdGhyZWUgYXJndW1lbnRzLCBsaWtlIHNvOiBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKTtgPyBZZXQsIGhlcmUsIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIHNlZW1zIHRvIGJlIHVzaW5nIHRoZSBmb3VyLWFyZ3VtZW50IHZlcnNpb24uIFRoaXMgaW5jb25zaXN0ZW5jeSBpcyBhIHJlZCBmbGFnLiBJdCBmZWVscyBsaWtlIEknbSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIG9yIGEgcmVjZW50IGNoYW5nZS5cblxuVG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmV2aWV3IHJlY2VudCBjb21taXRzIGFuZCBhbnkgb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGBodWdldGxiX3phcF9iZWdpbmAgaXMgdXNlZC4gVGhpcyBpcyBsaWtlbHkgYW4gb3ZlcnNpZ2h0IHRoYXQgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcyBhbmQgaXQgaXMgaW1wb3J0YW50IHRvIGZpbmQgaXQuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBoaXN0b3J5IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjI1Ljc0NTAyOTYwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTc4MTk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h1Z2V0bGJfemFwX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI0ND12b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ni1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDc6ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDgtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNTI9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU1LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTY6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1Ny19XFxuLS1cXG5tbS9odWdldGxiLmM9NTI0NT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTQwNC1cXG5tbS9odWdldGxiLmM6NTQwNTp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTU0MDYtXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjI3LjI5NDgyMjM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTg1MTI5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIGluIGh1Z2V0bGIuYyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBfX2h1Z2V0bGJfemFwX2JlZ2luYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3MgbmVzdGxlZCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHBsYWNlIGZvciBhbGwgdGhvc2UgSHVnZVRMQi1yZWxhdGVkIGZ1bmN0aW9ucy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTQwNSBpbiBgbW0vaHVnZXRsYi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBjYWxsLCB3aGF0J3MgYmVpbmcgc2V0IHVwLCBhbmQgd2hhdCBzdGF0ZSB0aGUgc3lzdGVtIGlzIGluIHdoZW4gYF9faHVnZXRsYl96YXBfYmVnaW5gIGlzIGludm9rZWQuIEtub3dpbmcgdGhlIGxvY2FsIGNvbnRleHQgd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgcHJvYmxlbSBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIEknbSBpbnZlc3RpZ2F0aW5nLiBJIGV4cGVjdCBpdCdzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHBhZ2UgdW5tYXBwaW5nIHByb2Nlc3MsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDoyOS4yNTMzMzg3NDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDAwOlxcdFxcdHRsYl9lbmRfdm1hKHRsYiwgdm1hKTtcXG41NDAxOlxcdFxcbjU0MDI6XFx0XFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaCh0bGIsIHZtYSk7XFxuNTQwMzpcXHR9XFxuNTQwNDpcXHRcXG41NDA1OlxcdHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG41NDA2OlxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjU0MDc6XFx0e1xcbjU0MDg6XFx0XFx0aWYgKCF2bWEtXFx1MDAzZXZtX2ZpbGUpXFx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xcbjU0MDk6XFx0XFx0XFx0cmV0dXJuO1xcbjU0MTA6XFx0XFxuNTQxMTpcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBzdGFydCwgZW5kKTtcXG41NDEyOlxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcXG41NDEzOlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZpbGUpXFxuNTQxNDpcXHRcXHRcXHRpX21tYXBfbG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNTQxNTpcXHR9XFxuNTQxNjpcXHRcXG41NDE3OlxcdHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuNTQxODpcXHRcXHRcXHQgICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbjU0MTk6XFx0e1xcbjU0MjA6XFx0XFx0emFwX2ZsYWdzX3QgemFwX2ZsYWdzID0gZGV0YWlscyA/IGRldGFpbHMtXFx1MDAzZXphcF9mbGFncyA6IDA7XFxuNTQyMTpcXHRcXG41NDIyOlxcdFxcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKVxcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cXG41NDIzOlxcdFxcdFxcdHJldHVybjtcXG41NDI0OlxcdFxcbjU0MjU6XFx0XFx0aWYgKHphcF9mbGFncyBcXHUwMDI2IFpBUF9GTEFHX1VOTUFQKSB7XFx0LyogZmluYWwgdW5tYXAgKi9cXG41NDI2OlxcdFxcdFxcdC8qXFxuNTQyNzpcXHRcXHRcXHQgKiBVbmxvY2sgYW5kIGZyZWUgdGhlIHZtYSBsb2NrIGJlZm9yZSByZWxlYXNpbmcgaV9tbWFwX3J3c2VtLlxcbjU0Mjg6XFx0XFx0XFx0ICogV2hlbiB0aGUgdm1hX2xvY2sgaXMgZnJlZWQsIHRoaXMgbWFrZXMgdGhlIHZtYSBpbmVsaWdpYmxlXFxuNTQyOTpcXHRcXHRcXHQgKiBmb3IgcG1kIHNoYXJpbmcuICBBbmQsIGlfbW1hcF9yd3NlbSBpcyByZXF1aXJlZCB0byBzZXQgdXBcXG41NDMwOlxcdFxcdFxcdCAqIHBtZCBzaGFyaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgYXMgcGFnZSB0YWJsZXMgZm9yIHRoaXNcXG41NDMxOlxcdFxcdFxcdCAqIHVubWFwcGVkIHJhbmdlIHdpbGwgYmUgYXN5bmNocm91c2x5IGRlbGV0ZWQuICBJZiB0aGUgcGFnZVxcbjU0MzI6XFx0XFx0XFx0ICogdGFibGVzIGFyZSBzaGFyZWQsIHRoZXJlIHdpbGwgYmUgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnlcXG41NDMzOlxcdFxcdFxcdCAqIHNvbWVvbmUgZWxzZS5cXG41NDM0OlxcdFxcdFxcdCAqL1xcbjU0MzU6XFx0XFx0XFx0X19odWdldGxiX3ZtYV91bmxvY2tfd3JpdGVfZnJlZSh2bWEpO1xcbjU0MzY6XFx0XFx0fSBlbHNlIHtcXG41NDM3OlxcdFxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xcbjU0Mzg6XFx0XFx0fVxcbjU0Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjM0OjI5LjI1MzgyNDg0MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjc4ODQwNzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFdoYXQgZG9lcyBgZ2l0IGRpZmYgSEVBRH4xYCB0ZWxsIG1lPyBDYW4gSSBldmVuIGNoZWNrIHRoZSBnaXQgbG9nPyBJIG9ubHkgaGF2ZSBhIGxpbWl0ZWQgc2V0IG9mIHRvb2xzIGhlcmUsIHNvIEknbGwgd29yayB3aXRoIHdoYXQgSSd2ZSBnb3QuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGxpbmUgMjMwNy4gQWgsIEkgc2VlIHRoZSBjaGFuZ2U6IGBodWdldGxiX3phcF9iZWdpbmAgaXMgaW52b2x2ZWQuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgY29tbWl0IGNoYW5nZWQgdGhlIGZ1bmN0aW9uIGNhbGwgZnJvbSBgaHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKWAgdG8gYGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCwgZGV0YWlscylgLiAgVGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIHNob3dzIHRoYXQgYGh1Z2V0bGJfemFwX2JlZ2luYCBvcmlnaW5hbGx5IHRvb2sgb25seSB0d28gYXJndW1lbnRzLiAgU28sIHRoaXMgKm11c3QqIGJlIGFuIGFkZGl0aW9uIG9mIGFuIGFyZ3VtZW50LiBEb2VzIGl0IGV2ZW4gY29tcGlsZSB3aXRoIHRoZSBuZXcgMy1hcmd1bWVudCB2ZXJzaW9uIG9yIGlzIHRoZXJlIGFuIGludGVydmVuaW5nIGNvbW1pdCBpbiBhIHNlcmllcywgb3IgaXMgaXQgYSBidWcgZml4IG9yIHRlc3Q/XG5cbldoeSBkb2VzIHRoaXMgbWF0dGVyIGZvciBLTVNBTiB2cy4gS0FTQU4/IEkgbmVlZCB0byBhcHBseSB0aGUgbG9naWMuIFJlbWVtYmVyLCBLQVNBTiBhbHJlYWR5IGNvdmVycyBhIHdpZGUgYXJyYXkgb2YgbWVtb3J5IGlzc3Vlczogb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcywgZXRjLiBMT0NLREVQIGNhdGNoZXMgbG9ja2luZyBidWdzLCBVQi1zYW5pdGl6ZXJzIGRvIHRoZWlyIHdvcmssIGFuZCB3ZSBoYXZlIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuXG5cblRoZSBydWxlIGlzIGNsZWFyOiAqSWYgS0FTQU4gb3Igc3RhbmRhcmQgZGVidWdnZXJzIGNhbiBjYXRjaCB0aGUgYnVnLCB0aGVyZSdzIG5vIHJlYXNvbiB0byB3YXN0ZSByZXNvdXJjZXMgb24gS01TQU4uKiBLTVNBTiBpcyBleHBlbnNpdmUsIHNvIG9ubHkgdXNlIGl0IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBleGNsdXNpdmVseSBkZXRlY3RzLlxuXG5Tbywgd2hlbiBkbyBJIHNldCBgTmVlZHNLTVNBTj10cnVlYD8gV2VsbCwgdGhlIHBhdGNoIG5lZWRzIHRvIGludHJvZHVjZSBvciBtb2RpZnk6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgZXhwb3NlIHN1cnJvdW5kaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzLlxuXG5XaGVuIGRvIEkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYD9cbi0gQ29kZSBwcmltYXJpbHkgcmlza3Mgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXG4tIFN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkL2luaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuTGV0J3MgYXBwbHkgdGhpcyB0byB0aGUgcGF0Y2guIEl0IG1vZGlmaWVzIGB6YXBfdm1hX3JhbmdlX2JhdGNoZWRgIGluIGBtbS9tZW1vcnkuY2AgYnkgcGFzc2luZyBgZGV0YWlsc2AgdG8gYGh1Z2V0bGJfemFwX2JlZ2luYC4gRG9lcyB0aGlzIHRvdWNoIGFueSBgY29weV90b191c2VyYCBjYWxscz8gSXMgdGhlcmUgYW4gaW5mbyBsZWFrPyBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkLCBvciB1bmluaXRpYWxpemVkIHJlYWRzIGZyb20gc3RhY2svaGVhcD8gTm8uIGByYW5nZWAgaXMgaW5pdGlhbGl6ZWQsIGFuZCBgZGV0YWlsc2AgaXMgcGFzc2VkIGFzIGEgcG9pbnRlci4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgYW5kIG5vIGV4cG9zdXJlcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCAqdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzKi4gVGhlIGNvcnJlY3Qgc2V0dGluZyBoZXJlIGlzIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2s6XG4qICAgQXJlIHRoZXJlIGFueSBpbmZvIGxlYWtzPyBOby5cbiogICBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9ucz8gTm8uXG4qICAgRG9lcyBpdCBhbGxvY2F0ZS9pbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8gTm8uXG4qICAgRG9lcyBpdCBtb2RpZnkgYm91bmRzL2xlbmd0aHMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBJJ2xsIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcgY2xlYXJseSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk2LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODozNDozNi41MzI2Njc2NTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgZnVuY3Rpb24gY2FsbCBpbiBtbS9tZW1vcnkuYyAocGFzc2luZyAnZGV0YWlscycgdG8gaHVnZXRsYl96YXBfYmVnaW4gaW4gemFwX3ZtYV9yYW5nZV9iYXRjaGVkKS4gVGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAvIGh1Z2V0bGIgdW5tYXBwaW5nIGxvZ2ljIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGhhbmRsaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgYWx0ZXJpbmcgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyBvdmVyIHVuaW5pdGlhbGl6ZWQgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBNTSBvcGVyYXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcywgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgY29uZmlncy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBmdW5jdGlvbiBjYWxsIGluIG1tL21lbW9yeS5jIChwYXNzaW5nICdkZXRhaWxzJyB0byBodWdldGxiX3phcF9iZWdpbiBpbiB6YXBfdm1hX3JhbmdlX2JhdGNoZWQpLiBUaGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IC8gaHVnZXRsYiB1bm1hcHBpbmcgbG9naWMgYW5kIGRvZXMgbm90IGludm9sdmUgY29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgaGFuZGxpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciBhbHRlcmluZyBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIG92ZXIgdW5pbml0aWFsaXplZCBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIE1NIG9wZXJhdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjb25maWdzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow8tr52[1] Phase: Succeeded StartedAt: 2026-09-05 08:34:48 +0000 UTC FinishedAt: 2026-09-05 08:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 08:34:48 +0000 UTC FinishedAt: 2026-09-05 08:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2] Phase: Succeeded StartedAt: 2026-09-05 08:34:48 +0000 UTC FinishedAt: 2026-09-05 09:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-05 08:34:48 +0000 UTC FinishedAt: 2026-09-05 09:04:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 08:34:48 +0000 UTC FinishedAt: 2026-09-05 08:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 08:34:48 +0000 UTC FinishedAt: 2026-09-05 08:34:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8tr52/series-workflow8tr52-convert-artifact-1207589193/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 08:34:58 +0000 UTC FinishedAt: 2026-09-05 08:50:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 08:34:58 +0000 UTC FinishedAt: 2026-09-05 08:50:50 +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:*8a911529-6880-4ee3-8781-eedb2fd873a4,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-workflow8tr52/series-workflow8tr52-convert-artifact-1207589193/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": "464f947b-682c-4699-846c-0b051d0439c4", "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-workflow8tr52/series-workflow8tr52-build-action-2801522727/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 08:34:58 +0000 UTC FinishedAt: 2026-09-05 08:50:40 +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:*8a911529-6880-4ee3-8781-eedb2fd873a4,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-workflow8tr52/series-workflow8tr52-convert-artifact-1207589193/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": "464f947b-682c-4699-846c-0b051d0439c4", "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-workflow8tr52/series-workflow8tr52-build-action-2801522727/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 08:50:50 +0000 UTC FinishedAt: 2026-09-05 08:50:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 08:50:50 +0000 UTC FinishedAt: 2026-09-05 08:50:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 08:50:50 +0000 UTC FinishedAt: 2026-09-05 08:51:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 08:50:50 +0000 UTC FinishedAt: 2026-09-05 08:50:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8tr52/series-workflow8tr52-convert-artifact-1620782940/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 08:51:00 +0000 UTC FinishedAt: 2026-09-05 08:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 08:51:00 +0000 UTC FinishedAt: 2026-09-05 08:52:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*464f947b-682c-4699-846c-0b051d0439c4,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-workflow8tr52/series-workflow8tr52-build-action-2801522727/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-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 08:52:54 +0000 UTC FinishedAt: 2026-09-05 08:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 08:52:54 +0000 UTC FinishedAt: 2026-09-05 08:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 08:52:54 +0000 UTC FinishedAt: 2026-09-05 09:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 08:52:54 +0000 UTC FinishedAt: 2026-09-05 09:04:14 +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:*8a911529-6880-4ee3-8781-eedb2fd873a4,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-workflow8tr52/series-workflow8tr52-convert-artifact-1620782940/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": "44bbebee-2095-4bcb-be13-5072c427460b", "success": false },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-workflow8tr52/series-workflow8tr52-build-action-1933702072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 08:52:54 +0000 UTC FinishedAt: 2026-09-05 09:04:04 +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:*8a911529-6880-4ee3-8781-eedb2fd873a4,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-workflow8tr52/series-workflow8tr52-convert-artifact-1620782940/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": "44bbebee-2095-4bcb-be13-5072c427460b", "success": false },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-workflow8tr52/series-workflow8tr52-build-action-1933702072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-09-05 09:04:14 +0000 UTC FinishedAt: 2026-09-05 09:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8tr52[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zap_vma_range_batched","__hugetlb_zap_begin","madvise_dontneed_single_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE"],"series_id":"62239cdd-0901-45e4-ba20-e2ae8e212ee8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-09-05 09:04:14 +0000 UTC FinishedAt: 2026-09-05 09:04:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}