Name: series-workflow5ck9r Phase: Succeeded StartedAt: 2026-09-09 10:42:47 +0000 UTC FinishedAt: 2026-09-09 15:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[0] Phase: Succeeded StartedAt: 2026-09-09 10:42:47 +0000 UTC FinishedAt: 2026-09-09 11:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 10:42:47 +0000 UTC FinishedAt: 2026-09-09 11:33:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "6c846d11-fb8f-46fb-b296-948661e26485" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "loopback_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BiYWNrX3htaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYCBpbiBgbG9vcGJhY2tfeG1pdCgpYCBiZWZvcmUgYHNrYl9vcnBoYW4oc2tiKWAgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdpdGggemVyb2NvcHkgZnJhZ3MgKGUuZy4gQUZfUEFDS0VUIFRYIHJpbmcpIGJlaW5nIG1vZGlmaWVkIGJ5IHVzZXJzcGFjZSBiZWZvcmUgdGhlIHBhY2tldCBpcyByZWNlaXZlZC5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvb3BiYWNrX3htaXRgIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBvcnBoYW4gemVyb2NvcHkgc2tiIGZyYWdtZW50cyAoYHNrYl9vcnBoYW5fZnJhZ3NfcnhgKSBiZWZvcmUgaW52b2tpbmcgYHNrYl9vcnBoYW4oKWAsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi9yYWNlIGNvbmRpdGlvbnMgd2hlbiB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGUuZy4sIHdpdGggQUZfUEFDS0VUIFRYIHJpbmdzKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MzE6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmNcbmluZGV4IDFmYjZjZTY4NDNhZGUuLjMxYWUxMGE5ZDc5MTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jXG5AQCAtNzIsNiAmIzQzOzcyLDIzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4ge1xuIFx0aW50IGxlbjtcbiBcbiYjNDM7XHQvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2ImIzM5O3MgZGVzdHJ1Y3Rvciwgd2hpY2hcbiYjNDM7XHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXG4mIzQzO1x0ICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0XG4mIzQzO1x0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJiMzOTtzXG4mIzQzO1x0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG4mIzQzO1x0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xuJiM0MztcdCAqIGEgcmFjZSB3aGVyZSB1c2Vyc3BhY2UgbWF5IGZpbGwgaW4gbmV3IGRhdGEgaW50byB0aGUgZnJhZyBiZWZvcmUgdGhlXG4mIzQzO1x0ICogb2xkIGRhdGEgZ2V0cyBjb3BpZWQgb3V0LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGFrZSBhIGtlcm5lbC1wcml2YXRlIGNvcHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbiYjNDM7XHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4mIzQzO1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XG4mIzQzO1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4gXG4gXHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9vcGJhY2tfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9vcGJhY2tfeG1pdGAgaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgIHRvIG9ycGhhbiB6ZXJvY29weSBza2IgZnJhZ21lbnRzIChgc2tiX29ycGhhbl9mcmFnc19yeGApIGJlZm9yZSBpbnZva2luZyBgc2tiX29ycGhhbigpYCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uL3JhY2UgY29uZGl0aW9ucyB3aGVuIHRyYW5zbWl0dGluZyBwYWNrZXRzIG92ZXIgdGhlIGxvb3BiYWNrIGludGVyZmFjZSAoZS5nLiwgd2l0aCBBRl9QQUNLRVQgVFggcmluZ3MpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTYxZTU0MjhlY2U3YzRhN2FmMGIwMzMxNGI5N2NiM2RlMTdhZjQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMTozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IDFmYjZjZTY4NDNhZGUuLjMxYWUxMGE5ZDc5MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtNzIsNiAmIzQzOzcyLDIzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJaW50IGxlbjsKIAomIzQzOwkvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2ImIzM5O3MgZGVzdHJ1Y3Rvciwgd2hpY2gKJiM0MzsJICogZm9yIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMgbWFya3MgdGhlIHNsb3QgYXMgVFBfU1RBVFVTX0FWQUlMQUJMRQomIzQzOwkgKiBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc3RpbGwgaGFzIHplcm9jb3B5IGZyYWdzIHBvaW50aW5nIHRvIGl0IHRoYXQKJiM0MzsJICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJiMzOTtzCiYjNDM7CSAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLAomIzQzOwkgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzCiYjNDM7CSAqIGEgcmFjZSB3aGVyZSB1c2Vyc3BhY2UgbWF5IGZpbGwgaW4gbmV3IGRhdGEgaW50byB0aGUgZnJhZyBiZWZvcmUgdGhlCiYjNDM7CSAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC4KJiM0MzsJICoKJiM0MzsJICogVGFrZSBhIGtlcm5lbC1wcml2YXRlIGNvcHkuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkgewomIzQzOwkJZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUKTsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KJiM0MzsKIAlza2JfdHhfdGltZXN0YW1wKHNrYik7CiAKIAkvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb29wYmFjayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCByZXZpZXcgcmVxdWVzdC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgZGlmZi4gQWgsIGl0IGxvb2tzIGxpa2UgYSBuZXcgY29uZGl0aW9uYWwgYmxvY2sgaGFzIGJlZW4gYWRkZWQgd2l0aGluIHRoZSBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFyaXNpbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgcGFydGljdWxhcmx5IHdpdGggYEFGX1BBQ0tFVGAgYW5kIHplcm8tY29weSBmcmFncy4gSSBzZWUgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhlIGlzc3VlOiBgc2tiX29ycGhhbigpYCBpcyBiZWluZyBjYWxsZWQgb24gdGhlIHRyYW5zbWl0IHBhdGggYmVmb3JlIGFsbCB0aGUgZGF0YSBoYXMgYmVlbiBjb3BpZWQgb3ZlciB0byB0aGUgcmVjZWl2ZSBwYXRoLiBUaGlzIGNvdWxkIGFsbG93IHVzZXJzcGFjZSB0byBvdmVyd3JpdGUgZGF0YSBpbiB0aGUgc2hhcmVkIG1lbW9yeS4gVGhlIGNvZGUgdXNlcyBgc2tiX29ycGhhbl9mcmFnc19yeCgpYCB0byBhZGRyZXNzIHRoaXMuCgpFc3NlbnRpYWxseSwgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIHRha2VuIHVzaW5nIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIHRvIGF2b2lkIHRoZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWUuIElmIHRoZSBjb3B5IGZhaWxzICh3aGljaCBJIHNlZSBpcyB1bmxpa2VseSksIHRoZW4gdGhlIHBhY2tldCBpcyBkcm9wcGVkLCBpbmRpY2F0ZWQgYnkgdGhlIGBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUYCByZWFzb24uIFRoaXMgYXBwcm9hY2ggc2VlbXMgcmVhc29uYWJsZTsgZHJvcHBpbmcgdGhlIHBhY2tldCBpcyBiZXR0ZXIgdGhhbiBjb3JydXB0aW5nIGRhdGEuCgpOb3csIGxldCBtZSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBzZWUgdGhlIGNvbnRleHQuIEkmIzM5O2xsIHVzZSB0aGUgcmVhZC1maWxlIHRvb2wgdG8gZ3JhYiB0aGUgY29kZSBhcm91bmQgbGluZSA3Mi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcmVncmVzc2lvbnMgb3IgdW5mb3Jlc2VlbiBzaWRlIGVmZmVjdHMuIFRoZSBwYXRjaCBzZWVtcyB0YXJnZXRlZCBhbmQgd2VsbC1leHBsYWluZWQsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gdmVyaWZ5IGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGxvb3BiYWNrIGRyaXZlci4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgYnVnIHJlcG9ydHMgb3IgZGlzY3Vzc2lvbnMgYWJvdXQgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVx0LyogRm9yIHRoZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4gKi9cbiAgNTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVx0LyogRm9yIEFSUEhSRF9FVEhFUiAqL1xuICA1MjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAgNTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICA1NDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gIDU1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0X3RzdGFtcC5oXHUwMDNlXG4gIDU2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICA1NzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gIDU4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICA1OTpcdFxuICA2MDpcdC8qIGJsYWNraG9sZV9uZXRkZXYgLSBhIGRldmljZSB1c2VkIGZvciBkc3RzIHRoYXQgYXJlIG1hcmtlZCBleHBpcmVkIVxuICA2MTpcdCAqIFRoaXMgaXMgZ2xvYmFsIGRldmljZSAoaW5zdGVhZCBvZiBwZXItbmV0LW5zKSBzaW5jZSBpdCYjMzk7cyBub3QgbmVlZGVkXG4gIDYyOlx0ICogdG8gYmUgcGVyLW5zIGFuZCBnZXRzIGluaXRpYWxpemVkIGF0IGJvb3QgdGltZS5cbiAgNjM6XHQgKi9cbiAgNjQ6XHRzdHJ1Y3QgbmV0X2RldmljZSAqYmxhY2tob2xlX25ldGRldjtcbiAgNjU6XHRFWFBPUlRfU1lNQk9MKGJsYWNraG9sZV9uZXRkZXYpO1xuICA2NjpcdFxuICA2NzpcdC8qIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCYjMzk7c1xuICA2ODpcdCAqIGNhbGxlZCB3aXRoIGJoJiMzOTtzIGRpc2FibGVkKS5cbiAgNjk6XHQgKi9cbiAgNzA6XHRzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA3MTpcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDcyOlx0e1xuICA3MzpcdFx0aW50IGxlbjtcbiAgNzQ6XHRcbiAgNzU6XHRcdC8qIFRoZSBza2Jfb3JwaGFuKCkgYmVsb3cgd2lsbCBydW4gdGhlIHNrYiYjMzk7cyBkZXN0cnVjdG9yLCB3aGljaFxuICA3NjpcdFx0ICogZm9yIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMgbWFya3MgdGhlIHNsb3QgYXMgVFBfU1RBVFVTX0FWQUlMQUJMRVxuICA3NzpcdFx0ICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0XG4gIDc4Olx0XHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgmIzM5O3NcbiAgNzk6XHRcdCAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLFxuICA4MDpcdFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xuICA4MTpcdFx0ICogYSByYWNlIHdoZXJlIHVzZXJzcGFjZSBtYXkgZmlsbCBpbiBuZXcgZGF0YSBpbnRvIHRoZSBmcmFnIGJlZm9yZSB0aGVcbiAgODI6XHRcdCAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC5cbiAgODM6XHRcdCAqXG4gIDg0Olx0XHQgKiBUYWtlIGEga2VybmVsLXByaXZhdGUgY29weS5cbiAgODU6XHRcdCAqL1xuICA4NjpcdFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbiAgODc6XHRcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiAgODg6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQpO1xuICA4OTpcdFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuICA5MDpcdFx0fVxuICA5MTpcdFxuICA5MjpcdFx0c2tiX3R4X3RpbWVzdGFtcChza2IpO1xuICA5MzpcdFxuICA5NDpcdFx0LyogZG8gbm90IGZvb2wgbmV0X3RpbWVzdGFtcF9jaGVjaygpIHdpdGggdmFyaW91cyBjbG9jayBiYXNlcyAqL1xuICA5NTpcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuICA5NjpcdFxuICA5NzpcdFx0c2tiX29ycGhhbihza2IpO1xuICA5ODpcdFxuICA5OTpcdFx0LyogQmVmb3JlIHF1ZXVlaW5nIHRoaXMgcGFja2V0IHRvIF9fbmV0aWZfcngoKSxcbiAxMDA6XHRcdCAqIG1ha2Ugc3VyZSBkc3QgaXMgcmVmY291bnRlZC5cbiAxMDE6XHRcdCAqL1xuIDEwMjpcdFx0c2tiX2RzdF9mb3JjZShza2IpO1xuIDEwMzpcdFxuIDEwNDpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xuIDEwNTpcdFxuIDEwNjpcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiAxMDc6XHRcdGlmIChsaWtlbHkoX19uZXRpZl9yeChza2IpID09IE5FVF9SWF9TVUNDRVNTKSlcbiAxMDg6XHRcdFx0ZGV2X2xzdGF0c19hZGQoZGV2LCBsZW4pO1xuIDEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIHJlbmRlcmVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIExvb3BiYWNrIERldmljZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgbG9vcGJhY2sgZGV2aWNlIHNpdHVhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQmIzM5O3MganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aGluZyBpcyBjb25maWd1cmVkLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbCBmb3IgaXQsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludC4gUHJvYmFibHkgYmVzdCB0byBzZWFyY2ggdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgZm9yICYjMzQ7bG9vcGJhY2smIzM0OyB0byBmaW5kIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpUaGVuLCBvbmNlIEkmIzM5O3ZlIGdvdCB0aGUgY29uZmlndXJhdGlvbiBzb3J0ZWQsIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBhY3R1YWwgc291cmNlIGNvZGUuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzbyBJJiMzOTtsbCBzdGFydCBieSBncmVwcGluZyB0aHJvdWdoIHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIGFuZCB0aGUgYG5ldC9NYWtlZmlsZWAgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0eXBlcyBvZiBkZXZpY2UgZHJpdmVycyBhcmUgZGVjbGFyZWQuIEdyZXAgZm9yICYjMzQ7bG9vcGJhY2suYyYjMzQ7IChvciBzb21ldGhpbmcgc2ltaWxhcjsgbWlnaHQgYmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb24sIGJ1dCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCkgdG8gcGlucG9pbnQgdGhlIHNvdXJjZSBmaWxlLiBPbmNlIEkgaGF2ZSB0aGUgZmlsZSBuYW1lIEkgY2FuIHN0YXJ0IGxvb2tpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wYmFjay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX01ESU8pICYjNDM7PSBtZGlvLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVQpICYjNDM7PSBsb29wYmFjay5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfTkVUQ09OU09MRSkgJiM0Mzs9IG5ldGNvbnNvbGUub1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0xMjU2PXN0YXRpYyB2b2lkIGFkX3J4X21hY2hpbmUoc3RydWN0IGxhY3BkdSAqbGFjcGR1LCBzdHJ1Y3QgcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMTM3OS1cdFx0XHRcdFx0ICAgICAgXHUwMDI2KHBvcnQtXHUwMDNlYWN0b3Jfc3lzdGVtKSkpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoxMzgwOlx0XHRcdFx0c2xhdmVfZXJyKHBvcnQtXHUwMDNlc2xhdmUtXHUwMDNlYm9uZC1cdTAwM2VkZXYsIHBvcnQtXHUwMDNlc2xhdmUtXHUwMDNlZGV2LCBcJiMzNDtBbiBpbGxlZ2FsIGxvb3BiYWNrIG9jY3VycmVkIG9uIHNsYXZlXFxuXCYjMzQ7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMTM4MS1cdFx0XHRcdFx0ICBcJiMzNDtDaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byB2ZXJpZnkgdGhhdCBhbGwgYWRhcHRlcnMgYXJlIGNvbm5lY3RlZCB0byA4MDIuM2FkIGNvbXBsaWFudCBzd2l0Y2ggcG9ydHNcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQ5LVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNTA6XHRcdC8qIHBlcmZvcm0gcHJvcGVyIGxvb3BiYWNrIG9uIGNhcGFibGUgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zNTEtXHRcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9FQ0hPKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM9MTMxMz1zdGF0aWMgaW50IGUxMDAwX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5My1cdFx0ZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzc2LCAxOCksIHBoeV9yZWcgfCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM6MTM5NDpcdFx0LyogRW5hYmxlIGxvb3BiYWNrIG9uIHRoZSBQSFkgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5NS1cdFx0ZTFlX3dwaHkoaHcsIEk4MjU3N19QSFlfTEJLX0NUUkwsIDB4ODAwMSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jPTEzODg9aW50IGk0MGVfYXFfc2V0X3BoeV9pbnRfbWFzayhzdHJ1Y3QgaTQwZV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jLTE0MTItICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9jb21tb24uYzoxNDEzOiAqIEVuYWJsZS9kaXNhYmxlIGxvb3BiYWNrIG9uIGEgZ2l2ZW4gcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jLTE0MTQtICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz00MTYzPWljZV9hcV9zZXRfZXZlbnRfbWFzayhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydF9udW0sIHUxNiBtYXNrLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtNDE4NC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo0MTg1OiAqIEVuYWJsZS9kaXNhYmxlIGxvb3BiYWNrIG9uIGEgZ2l2ZW4gcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy00MTg2LSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jPTE2ODE9c3RhdGljIGludCBpZ2Jfc2V0dXBfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTcyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jOjE3MjY6XHRcdC8qIFVuc2V0IHNpZ2RldGVjdCBmb3IgU0VSREVTIGxvb3BiYWNrIG9uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0xNzI3LVx0XHQgKiA4MjU4MCBhbmQgbmV3ZXIgZGV2aWNlcy5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYz0xNzUxPXN0YXRpYyB2b2lkIGlnYl9sb29wYmFja19jbGVhbnVwKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0xNzYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmM6MTc2NDpcdFx0LyogRGlzYWJsZSBuZWFyIGVuZCBsb29wYmFjayBvbiBESDg5eHhDQyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTc2NS1cdFx0cmVnID0gcmQzMihFMTAwMF9NUEhZX0FERFJfQ1RMKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM9MTA2MzI9c3RhdGljIGludCBpeGdiZV9jb25maWd1cmVfYnJpZGdlX21vZGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTEwNjc2LVx0XHQvKiBkaXNhYmxlIFJ4IHNvdXJjZSBhZGRyZXNzIHBydW5pbmcsIHNpbmNlIHdlIGRvbiYjMzk7dCBleHBlY3QgdG9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYzoxMDY3NzpcdFx0ICogYmUgcmVjZWl2aW5nIGV4dGVybmFsIGxvb3BiYWNrIG9mIG91ciB0cmFuc21pdHRlZCBmcmFtZXMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTA2NzgtXHRcdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcnguYz01MDU9c3RhdGljIHZvaWQgdmFsaWRhdGVfbG9vcGJhY2soc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdm9pZCAqdmEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jLTUxNC1cdC8qIExvb3BiYWNrIGZvdW5kICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmM6NTE1Olx0cHJpdi1cdTAwM2Vsb29wYmFja19vayA9IDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmMtNTE2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM9ODA9c3RhdGljIGludCBtbHg0X2VuX3Rlc3RfbG9vcGJhY2soc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6ODI6XHR1MzIgbG9vcGJhY2tfb2sgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTgzLVx0aW50IGk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmMtODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6ODU6ICAgICAgICBwcml2LVx1MDAzZWxvb3BiYWNrX29rID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04Ni1cdHByaXYtXHUwMDNldmFsaWRhdGVfbG9vcGJhY2sgPSAxO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy05OC1cdFx0bXNsZWVwKE1MWDRfRU5fTE9PUEJBQ0tfVElNRU9VVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6OTk6XHRcdGlmIChwcml2LVx1MDAzZWxvb3BiYWNrX29rKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6MTAwOlx0XHRcdGxvb3BiYWNrX29rID0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy0xMDEtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTEwMy1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYzoxMDQ6XHRpZiAoIWxvb3BiYWNrX29rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTEwNS1cdFx0ZW5fZXJyKHByaXYsIFwmIzM0O0xvb3BiYWNrIHBhY2tldCBkaWRuJiMzOTt0IGFycml2ZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTExMS1cdG1seDRfZW5fdXBkYXRlX2xvb3BiYWNrX3N0YXRlKHByaXYtXHUwMDNlZGV2LCBwcml2LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6MTEyOlx0cmV0dXJuICFsb29wYmFja19vaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy0xMTMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oPTUyOT1zdHJ1Y3QgbWx4NF9lbl9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaC01NTUtXHR1MzIgbXNnX2VuYWJsZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oOjU1NjpcdHUzMiBsb29wYmFja19vaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oLTU1Ny1cdHUzMiB2YWxpZGF0ZV9sb29wYmFjaztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9MjAwPXN0YXRpYyBNTFg1RV9ERUNMQVJFX1NUQVRTX0dSUF9PUF9VUERBVEVfU1RBVFModnBvcnRfcmVwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYy0yNzEtXHRcdHJlcF9zdGF0cy1cdTAwM2V2cG9ydF9sb29wYmFja19ieXRlcyA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6MjcyOlx0XHRcdE1MWDVfR0VUX0NUUihvdXQsIGxvY2FsX2xvb3BiYWNrLm9jdGV0cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtMjczLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jPTE1MD1zdHJ1Y3QgbWx4NWVfbGJ0X3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE1Mi1cdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoxNTM6XHRib29sIGxvb3BiYWNrX29rO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTU0LVx0Ym9vbCBsb2NhbF9sYjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0xNTg9bWx4NWVfdGVzdF9sb29wYmFja192YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE5My1cdC8qIGJpbmdvICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoxOTQ6XHRsYnRwLVx1MDAzZWxvb3BiYWNrX29rID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE5NS1cdGNvbXBsZXRlKFx1MDAyNmxidHAtXHUwMDNlY29tcCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9MjAxPXN0YXRpYyBpbnQgbWx4NWVfdGVzdF9sb29wYmFja19zZXR1cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yMjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoyMjE6XHRsYnRwLVx1MDAzZWxvb3BiYWNrX29rID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yMjItXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bGJ0cC1cdTAwM2Vjb21wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0yNjE9c3RhdGljIGludCBtbHg1ZV90ZXN0X2xvb3BiYWNrKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI3NS1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoyNzY6XHRsYnRwLVx1MDAzZWxvb3BiYWNrX29rID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yNzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMjk3LVx0d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmxidHAtXHUwMDNlY29tcCwgTUxYNUVfTEJfVkVSSUZZX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM6Mjk4Olx0ZXJyID0gIWxidHAtXHUwMDNlbG9vcGJhY2tfb2s7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yOTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmM9NzczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY291bnRlcl9kZXNjIHZwb3J0X2xvb3BiYWNrX3N0YXRzX2Rlc2NbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy03NzYtXHR7IFwmIzM0O3Zwb3J0X2xvb3BiYWNrX2J5dGVzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmM6Nzc3Olx0XHRWUE9SVF9DT1VOVEVSX09GRihsb2NhbF9sb29wYmFjay5vY3RldHMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy03NzgtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDc3MD1tbHhzd19zcDFfcmlmX2lwaXBfbGJfY29uZmlndXJlKHN0cnVjdCBtbHhzd19zcF9yaWYgKnJpZixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc4NS1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDc4NjpcdFx0Z290byBlcnJfbG9vcGJhY2tfb3A7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc4Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjEwNzkzOmVycl9sb29wYmFja19vcDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwNzk0LVx0bWx4c3dfc3BfdnJfcHV0KG1seHN3X3NwLCB1bF92cik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA5NzM9bWx4c3dfc3AyX3JpZl9pcGlwX2xiX2NvbmZpZ3VyZShzdHJ1Y3QgbWx4c3dfc3BfcmlmICpyaWYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5ODgtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA5ODk6XHRcdGdvdG8gZXJyX2xvb3BiYWNrX29wO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDk5NjplcnJfbG9vcGJhY2tfb3A6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDk5Ny1cdG1seHN3X3NwX3VsX3JpZl9wdXQodWxfcmlmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmM9NzAwPWludCBlZjRfc2VsZnRlc3Qoc3RydWN0IGVmNF9uaWMgKmVmeCwgc3RydWN0IGVmNF9zZWxmX3Rlc3RzICp0ZXN0cyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmMtNzM0LVx0LyogT2ZmbGluZSAoaS5lLiBkaXNydXB0aXZlKSB0ZXN0aW5nXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmM6NzM1Olx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jLTczNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYz02OTM9aW50IGVmeF9zZWxmdGVzdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jLTcyNy1cdC8qIE9mZmxpbmUgKGkuZS4gZGlzcnVwdGl2ZSkgdGVzdGluZ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmM6NzI4Olx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNzI5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jPTY5OD1pbnQgZWZ4X3NpZW5hX3NlbGZ0ZXN0KHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmMtNzMyLVx0LyogT2ZmbGluZSAoaS5lLiBkaXNydXB0aXZlKSB0ZXN0aW5nXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYzo3MzM6XHQgKiBUaGlzIGNoZWNrcyBNQUMgYW5kIFBIWSBsb29wYmFjayBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYy03MzQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL2Nhc3NpbmkuaC0xOTg5LSNkZWZpbmUgIFJFR19QQ1NfU0VSREVTX0NUUkwgICAgICAgICAgICAgIDB4OTA1NCAvKiBzZXJkZXMgY29udHJvbCByZWcgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9jYXNzaW5pLmg6MTk5MDojZGVmaW5lICAgIFBDU19TRVJERVNfQ1RSTF9MT09QQkFDSyAgICAgICAweDAxICAgLyogZW5hYmxlIGxvb3BiYWNrIG9uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vY2Fzc2luaS5oLTE5OTEtXHRcdFx0XHRcdFx0ICAgIHNlcmRlcyBpbnRlcmZhY2UgKi9cbi0tXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTE2Nj1zdGF0aWMgdm9pZCBsb29wYmFja19kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtMTcwLVxuZHJpdmVycy9uZXQvbG9vcGJhY2suYzoxNzE6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsb29wYmFja19vcHMgPSB7XG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTE3Mi1cdC5uZG9faW5pdCAgICAgICAgPSBsb29wYmFja19kZXZfaW5pdCxcbi0tXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTIxNz1zdGF0aWMgdm9pZCBsb29wYmFja19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtMjE5LVx0Z2VuX2xvX3NldHVwKGRldiwgKDY0ICogMTAyNCksIFx1MDAyNmxvb3BiYWNrX2V0aHRvb2xfb3BzLCBcdTAwMjZldGhfaGVhZGVyX29wcyxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6MjIwOlx0XHQgICAgIFx1MDAyNmxvb3BiYWNrX29wcywgbG9vcGJhY2tfZGV2X2ZyZWUpO1xuZHJpdmVycy9uZXQvbG9vcGJhY2suYy0yMjEtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jPTQ3PWVudW0gaGR4X2xvb3BiYWNrIHtcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjQ4Olx0aGR4X2xvb3BiYWNrX29uID0gMCxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjQ5Olx0aGR4X2xvb3BiYWNrX29mZiA9IDEsXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy01MC19O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jPTE1MD1zdGF0aWMgaW50IG5zX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmMtMTU1LVx0ICovXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYzoxNTY6XHRuc18xMF9iYXNlX3RfaGR4X2xvb3BhY2socGh5ZGV2LCBoZHhfbG9vcGJhY2tfb2ZmKTtcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jLTE1Ny1cdHJldHVybiBuc19hY2tfaW50ZXJydXB0KHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmM9MTE2Nj1zdGF0aWMgaW50IHJ0bDgxODdfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHJhZGlvX2lkeCwgdTMyIGNoYW5nZWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmMtMTE3My1cdHJlZyA9IHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VtYXAtXHUwMDNlVFhfQ09ORik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYzoxMTc0Olx0LyogRW5hYmxlIFRYIGxvb3BiYWNrIG9uIE1BQyBsZXZlbCB0byBhdm9pZCBUWCBkdXJpbmcgY2hhbm5lbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmMtMTE3NS1cdCAqIGNoYW5nZXMsIGFzIHRoaXMgaGFzIGJlIHNlZW4gdG8gY2F1c2VzIHByb2JsZW1zIGFuZCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTG9vcGJhY2sgYW5kIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGxpbmUgaW4gdGhlIGBkcml2ZXJzL25ldC9NYWtlZmlsZWA6IGBvYmotJChDT05GSUdfTkVUKSAmIzQzOz0gbG9vcGJhY2sub2AuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24ga2lja3MgaW4uIEl0JiMzOTtzIGNsZWFyIHRoYXQgaWYgYENPTkZJR19ORVRgIGlzIHNldCwgdGhlIGxvb3BiYWNrIGRyaXZlciwgYGxvb3BiYWNrLmNgLCBnZXRzIGluY2x1ZGVkLiBTaW1wbGUgZW5vdWdoLCB0aGF0JiMzOTtzIHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLiBOb3csIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGNvZGUsIHNvIGxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLgoKTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgc2tiX29ycGhhbl9mcmFnc19yeGAuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGUgY29uY2VwdCBvZiBTS0JzIGFuZCB0aGVpciBmcmFnbWVudHMgaW4gbmV0d29yayBkYXRhLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIGtlcm5lbCBoYW5kbGVzIG9ycGhhbiBmcmFnbWVudHMsIHBhcnRpY3VsYXJseSBvbiByZWNlaXZlLiBJdCYjMzk7cyBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIHF1aWNrIGdyZXAgc2VhcmNoIGZvciBgc2tiX29ycGhhbl9mcmFnc19yeGAuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcGJhY2sgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCByaWdodCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfb3JwaGFuX2ZyYWdzX3J4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0PTI2MT1sb29wYmFjayByZXN0cmljdGlvbiBjYW4gYmUgdGVtcG9yYXJpbHkgcmVsYXhlZCBieSBtYWtpbmdcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjI2Mjpza2Jfb3JwaGFuX2ZyYWdzX3J4IGlkZW50aWNhbCB0byBza2Jfb3JwaGFuX2ZyYWdzLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3QtMjYzLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdD0yMTk9bXNnX3plcm9jb3B5LnNoIOiEmuacrOWcqOi3qOWRveWQjeepuumXtOeahOiZmuaLn+S7peWkque9ke+8iHZldGjvvInlr7nkuYvpl7Tov5DooYzml7bvvIzmtYvor5XlsIbkuI3kvJrmmL7npLrlh7rku7vkvZXmgKfog71cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdDoyMjA65o+Q5Y2H44CC5Li65LqG5L6/5LqO5rWL6K+V77yM5Y+v5Lul6YCa6L+H6K6pIHNrYl9vcnBoYW5fZnJhZ3Nfcngg5LiOIHNrYl9vcnBoYW5fZnJhZ3Mg55u45ZCM77yM5p2l5pqC5pe25pS+5a69XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3QtMjIxLeeOr+WbnumZkOWItuOAglxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM9NzA9c3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTc4LVx0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJiMzOTtzXG5kcml2ZXJzL25ldC9sb29wYmFjay5jOjc5Olx0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTgwLVx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODUtXHQgKi9cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6ODY6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuZHJpdmVycy9uZXQvbG9vcGJhY2suYy04Ny1cdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMDU5PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMTA3LVxuZHJpdmVycy9uZXQvdHVuLmM6MTEwODpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0xMTA5LVx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDM4PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDQ3LS8qIEZyYWdzIG11c3QgYmUgb3JwaGFuZWQsIGV2ZW4gaWYgcmVmY291bnRlZCwgaWYgc2tiIG1pZ2h0IGxvb3AgdG8gcnggcGF0aCAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDQ4OnN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Nfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDkte1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGV2LmM9MjUxMT1zdGF0aWMgaW50IGRlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtMjUxNC17XG5uZXQvY29yZS9kZXYuYzoyNTE1Olx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpXG5uZXQvY29yZS9kZXYuYy0yNTE2LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvY29yZS9kZXYuYz0yNTc0PXZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMjYzMC1cdGlmIChwdF9wcmV2KSB7XG5uZXQvY29yZS9kZXYuYzoyNjMxOlx0XHRpZiAoIXNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiMiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9kZXYuYy0yNjMyLVx0XHRcdHB0X3ByZXYtXHUwMDNlZnVuYyhza2IyLCBza2ItXHUwMDNlZGV2LCBwdF9wcmV2LCBza2ItXHUwMDNlZGV2KTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01NzEzPXZvaWQgX19za2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NzUzLVxubmV0L2NvcmUvc2tidWZmLmM6NTc1NDpcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkge1xubmV0L2NvcmUvc2tidWZmLmMtNTc1NS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTIyOT1zdGF0aWMgaW50IGlwX2xvY2FsX2RlbGl2ZXJfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzAte1xubmV0L2lwdjQvaXBfaW5wdXQuYzoyMzE6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzItXHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7XG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTI0PXN0YXRpYyBpbnQgaXA2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTUyNS17XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MjY6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xubmV0L2lwdjYvaXA2X2lucHV0LmMtNTI3LVx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3BiYWNrIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24gYW5kIGhvdyB0aGUgbG9vcGJhY2sgbWVjaGFuaXNtIGZ1bmN0aW9ucyB1bmRlciB0aGUgaG9vZC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBsb29wYmFjayBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgYGxvYCBpbnRlcmZhY2UsIGlzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5IG5ldHdvcmsgbmFtZXNwYWNlLiBXaGVuIGRhdGEgaXMgdHJhbnNtaXR0ZWQgdmlhIGBsb2AsIHRoZSBmbG93IGdvZXMgcmlnaHQgdGhyb3VnaCBgbG9vcGJhY2tfeG1pdGAsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBmdW5jdGlvbiBib3VuZCB0byBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RhcnRfeG1pdGAuCgpOb3csIHRoYXQgcGF0Y2guLi4gaXQmIzM5O3MgYWRkaW5nIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB3aXRoaW4gYGxvb3BiYWNrX3htaXRgLiBUaGUgcHVycG9zZSBoZXJlIGlzIHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBBRl9QQUNLRVQgVFggcmluZyB6ZXJvY29weSBmcmFnbWVudHMgd2hlbiBwYWNrZXRzIGFyZSwgd2VsbCwgbG9vcGVkIGJhY2suIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcHJldmVudHMgYSByYWNlLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgYGxvb3BiYWNrX3htaXRgLiBJcyBpdCBhIHN0YXRpYyBmdW5jdGlvbiwgb3IgaXMgaXQgZXhwb3J0ZWQgaW4gc29tZSB3YXk/IEFoLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdCguLi4pYC4gU28sIGl0JiMzOTtzIHNjb3BlZCB3aXRoaW4gdGhlIGZpbGUuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaXMgYnVpbHQgaXMgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGluIC5jIGZpbGVzICphcmUqIHN0aWxsIG5vcm1hbCBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBVbmxlc3MgaW5saW5lZCwgd2hpY2ggaXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlLCB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnQgYGxvb3BiYWNrX29wcy5uZG9fc3RhcnRfeG1pdCA9IGxvb3BiYWNrX3htaXRgIHNob3VsZCBiZSBlbm91Z2ggdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBlbGltaW5hdGluZyBpdCBhcyBkZWFkIGNvZGUuCgpGaW5hbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbG9vcGJhY2tfb3BzYCB3aXRoaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgIHRvIGdyYXNwIHRoZSByb2xlIG9mIGBsb29wYmFja194bWl0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9sb29wYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcbiAxNjY6XHRzdGF0aWMgdm9pZCBsb29wYmFja19kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDE2NzpcdHtcbiAxNjg6XHRcdGRldl9uZXQoZGV2KS1cdTAwM2Vsb29wYmFja19kZXYgPSBOVUxMO1xuIDE2OTpcdH1cbiAxNzA6XHRcbiAxNzE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvb3BiYWNrX29wcyA9IHtcbiAxNzI6XHRcdC5uZG9faW5pdCAgICAgICAgPSBsb29wYmFja19kZXZfaW5pdCxcbiAxNzM6XHRcdC5uZG9fc3RhcnRfeG1pdCAgPSBsb29wYmFja194bWl0LFxuIDE3NDpcdFx0Lm5kb19nZXRfc3RhdHM2NCA9IGxvb3BiYWNrX2dldF9zdGF0czY0LFxuIDE3NTpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsXG4gMTc2Olx0fTtcbiAxNzc6XHRcbiAxNzg6XHRzdGF0aWMgdm9pZCBnZW5fbG9fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAxNzk6XHRcdFx0XHQgdW5zaWduZWQgaW50IG10dSxcbiAxODA6XHRcdFx0XHQgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpldGhfb3BzLFxuIDE4MTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyAqaGRyX29wcyxcbiAxODI6XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpkZXZfb3BzLFxuIDE4MzpcdFx0XHRcdCB2b2lkICgqZGV2X2Rlc3RydWN0b3IpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpKVxuIDE4NDpcdHtcbiAxODU6XHRcdGRldi1cdTAwM2VtdHVcdFx0PSBtdHU7XG4gMTg2Olx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuXHQ9IEVUSF9ITEVOO1x0LyogMTRcdCovXG4gMTg3Olx0XHRkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW5cdD0gRVRIX0hMRU47XHQvKiAxNFx0Ki9cbiAxODg6XHRcdGRldi1cdTAwM2VhZGRyX2xlblx0XHQ9IEVUSF9BTEVOO1x0LyogNlx0Ki9cbiAxODk6XHRcdGRldi1cdTAwM2V0eXBlXHRcdD0gQVJQSFJEX0xPT1BCQUNLO1x0LyogMHgwMDAxKi9cbiAxOTA6XHRcdGRldi1cdTAwM2VmbGFnc1x0XHQ9IElGRl9MT09QQkFDSztcbiAxOTE6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzXHRcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFIHwgSUZGX05PX1FVRVVFO1xuIDE5MjpcdFx0ZGV2LVx1MDAzZWxsdHhcdFx0PSB0cnVlO1xuIDE5MzpcdFx0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZVx0PSB0cnVlO1xuIDE5NDpcdFx0bmV0aWZfa2VlcF9kc3QoZGV2KTtcbiAxOTU6XHRcdGRldi1cdTAwM2Vod19mZWF0dXJlc1x0PSBORVRJRl9GX0dTT19TT0ZUV0FSRTtcbiAxOTY6XHRcdGRldi1cdTAwM2VmZWF0dXJlc1x0XHQ9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUXG4gMTk3Olx0XHRcdHwgTkVUSUZfRl9HU09fU09GVFdBUkVcbiAxOTg6XHRcdFx0fCBORVRJRl9GX0hXX0NTVU1cbiAxOTk6XHRcdFx0fCBORVRJRl9GX1JYQ1NVTVxuIDIwMDpcdFx0XHR8IE5FVElGX0ZfU0NUUF9DUkNcbiAyMDE6XHRcdFx0fCBORVRJRl9GX0hJR0hETUFcbiAyMDI6XHRcdFx0fCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxuIDIwMzpcdFx0XHR8IE5FVElGX0ZfTE9PUEJBQ0s7XG4gMjA0Olx0XHRkZXYtXHUwMDNlZXRodG9vbF9vcHNcdD0gZXRoX29wcztcbiAyMDU6XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzXHRcdD0gaGRyX29wcztcbiAyMDY6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHRcdD0gZGV2X29wcztcbiAyMDc6XHRcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldlx0PSB0cnVlO1xuIDIwODpcdFx0ZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlXHQ9IE5FVERFVl9QQ1BVX1NUQVRfTFNUQVRTO1xuIDIwOTpcdFx0ZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3Rvclx0PSBkZXZfZGVzdHJ1Y3RvcjtcbiAyMTA6XHRcbiAyMTE6XHRcdG5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LCBHU09fTUFYX1NJWkUpO1xuIDIxMjpcdH1cbiAyMTM6XHRcbiAyMTQ6XHQvKiBUaGUgbG9vcGJhY2sgZGV2aWNlIGlzIHNwZWNpYWwuIFRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYGxvb3BiYWNrX3htaXRgIGFzIGEgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBsb29wYmFja194bWl0YCBpcyBiZWluZyB1c2VkIGFzIHRoZSBgLm5kb19zdGFydF94bWl0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIGluZm9ybWF0aW9uLCBpdCBsb29rcyBwcm9taXNpbmcuCgoqICAgWWVzLCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIHdpdGhpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0OyBtb2RpZnlpbmcgY29yZSBjb2RlIGlzIGFsd2F5cyBhIGhpZ2gtdmFsdWUgdGFyZ2V0LgoqICAgVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IHdpdGhvdXQgcmVxdWlyaW5nIGFueSBzcGVjaWFsIGhhcmR3YXJlIGlzIGFsc28gZXhjZWxsZW50LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgc2V0dXAgY29uc2lkZXJhYmx5LiBMZXNzIGVmZm9ydCBtZWFucyBtb3JlIGVmZmVjdGl2ZSBmdXp6aW5nIHJ1bnMuCiogICBOb3csIHRoZSBrZXkgcGFydDogaXQgaGFuZGxlcyBvcnBoYW5pbmcgemVyb2NvcHkgZnJhZ3MgaW4gYGxvb3BiYWNrX3htaXRgLiBUaGlzIGFsdGVyYXRpb24gb2YgaG93IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXMgcHJvY2Vzc2VkIGR1cmluZyBsb29wYmFjayB0cmFuc21pc3Npb24gaXMgZXhhY3RseSB0aGUga2luZCBvZiBpbnRyaWNhdGUgZGF0YSBoYW5kbGluZyB0aGF0IG9mdGVuIHJldmVhbHMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbG9naWMgZXJyb3JzIGR1cmluZyBmdXp6aW5nLiBUaGlzIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGNyYXNoZXMuJiMzNDsKKiAgIFRoZSBmb2NhbCBwb2ludCBpcywgb2YgY291cnNlLCBgbG9vcGJhY2tfeG1pdGAgaXRzZWxmLiBUaGF0JiMzOTtzIG91ciB0YXJnZXQuCiogICBGaW5hbGx5LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgdGhlIGBORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBsb29wYmFjay4gSSBzaG91bGQgZG91YmxlIGNoZWNrLCB0aG91Z2gsIGFuZCB2ZXJpZnkgaWYgb3RoZXIgY29uZmlndXJhdGlvbnMsIGxpa2UgYE5FVERFVklDRVNgLCBhcmUgYWxzbyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX01ESU8pICYjNDM7PSBtZGlvLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVQpICYjNDM7PSBsb29wYmFjay5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfTkVUQ09OU09MRSkgJiM0Mzs9IG5ldGNvbnNvbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEcml2ZXIgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbmV0d29yayBkcml2ZXJzIGFyZSBiZWluZyBjb21waWxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgdG9wLWxldmVsIGJ1aWxkIHJ1bGVzIGZvciB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnkgYXJlIHR5cGljYWxseSBkZWZpbmVkLiBUaGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5IHByb2JhYmx5IGhhcyBpdHMgb3duIE1ha2VmaWxlLCBidXQgdGhlIHBhcmVudCBvbmUgc2hvdWxkIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlLCBlc3BlY2lhbGx5IGluIGhvdyBgQ09ORklHX05FVGAgYWZmZWN0cyB0aGluZ3MuCgpJJiMzOTttIGJldHRpbmcgdGhlIG1ha2VmaWxlIHdpbGwgaGF2ZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSBleHBlY3QgdG8gc2VlIHNvbWV0aGluZyBsaWtlIGBvYmotJChDT05GSUdfTkVUKSAmIzQzOz0gbmV0L2Agb3Igc2ltaWxhci4gSWYgaXQgKmlzKiBzZXQgdXAgdGhhdCB3YXksIHRoZSBleGlzdGVuY2UgYW5kIHZhbHVlIG9mIHRoZSBgQ09ORklHX05FVGAga2NvbmZpZyB2YXJpYWJsZSB3aWxsIGRpcmVjdGx5IGNvbnRyb2wgd2hldGhlciB0aGUgYG5ldC9gIHN1YmRpcmVjdG9yeSAoYW5kIGl0cyBjb250ZW50cywgaS5lLiwgdGhlIG5ldHdvcmsgZHJpdmVycykgYXJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzZWN0aW9uIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXQvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19TTElNQlVTKVx0XHQmIzQzOz0gc2xpbWJ1cy9cbmRyaXZlcnMvTWFrZWZpbGU6OTI6b2JqLXlcdFx0XHRcdCYjNDM7PSBuZXQvXG5kcml2ZXJzL01ha2VmaWxlLTkzLW9iai0kKENPTkZJR19BVE0pXHRcdCYjNDM7PSBhdG0vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTG9vcGJhY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIG1ha2VmaWxlcyBhcmUgdGVsbGluZyBtZSB0aGF0IGluY2x1ZGluZyBgbmV0L2AgaW4gYGRyaXZlcnMvTWFrZWZpbGVgIGFsb25nIHdpdGggYG9iai0kKENPTkZJR19ORVQpICYjNDM7PSBsb29wYmFjay5vYCBpbiBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIG1lYW5zIGBORVRgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIHRoZSBsb29wYmFjayBkcml2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIHdob2xlIHBpY3R1cmUuCgpMZXQmIzM5O3Mgc2Vl4oCmIE5vIG90aGVyIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgc2VlbSByZWxldmFudCwgbG9va2luZyBhdCBgc2tiX29ycGhhbl9mcmFnc19yeGAsIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGlzIG5vdCBpbXBvcnRhbnQgaGVyZSwgYW5kIGBsb29wYmFja194bWl0YCBpcyBpbmRlZWQgaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLgoKVGhlcmVmb3JlLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIG9ubHkgYGxvb3BiYWNrX3htaXRgIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgTkVUYCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGluc3RydWN0aW9ucyBpbmRpY2F0ZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAgYmVjYXVzZSB0aGlzIGNvZGUgYWx0ZXJzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBldmVuIHdoZW4gdXNpbmcgemVyb2NvcHkgcGFja2V0cy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdmVyaWZ5IHRoaXMgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lcy4gUmVhY2hhYmlsaXR5IGlzIGNsZWFybHkgdW5pdmVyc2FsIGJlY2F1c2UgbG9vcGJhY2sgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBMaW51eCBuZXR3b3JrIHN0YWNrLiBUaGUgYFdvcnRoRnV6emluZ2AgcHJvcGVydHkgaXMgY29uZmlybWVkLiBgRm9jdXNTeW1ib2xzYCBpcyBjb3JyZWN0LCBwb2ludGluZyB0byB0aGUgZW50cnlwb2ludCBvZiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLiBBbmQgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYE5FVGAsIG5vIHByZWZpeCBpcyBuZWVkZWQuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGNyeXN0YWwgY2xlYXIuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BiYWNrX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvb3BiYWNrX3htaXRgIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBvcnBoYW4gemVyb2NvcHkgc2tiIGZyYWdtZW50cyAoYHNrYl9vcnBoYW5fZnJhZ3NfcnhgKSBiZWZvcmUgaW52b2tpbmcgYHNrYl9vcnBoYW4oKWAsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi9yYWNlIGNvbmRpdGlvbnMgd2hlbiB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGUuZy4sIHdpdGggQUZfUEFDS0VUIFRYIHJpbmdzKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wYmFja194bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb29wYmFja194bWl0YCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gb3JwaGFuIHplcm9jb3B5IHNrYiBmcmFnbWVudHMgKGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCkgYmVmb3JlIGludm9raW5nIGBza2Jfb3JwaGFuKClgLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24vcmFjZSBjb25kaXRpb25zIHdoZW4gdHJhbnNtaXR0aW5nIHBhY2tldHMgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChlLmcuLCB3aXRoIEFGX1BBQ0tFVCBUWCByaW5ncykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGluIGBsb29wYmFja194bWl0KClgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB6ZXJvY29weSBmcmFncyAoZS5nLiBBRl9QQUNLRVQgVFggcmluZykgYmVpbmcgbW9kaWZpZWQgYnkgdXNlcnNwYWNlIGJlZm9yZSB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLlxuXG5ObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGUgYWxsb2NhdGVkIHBhZ2VzIGZvciBmcmFnIGNvcHlpbmcgYXJlIGZ1bGx5IHdyaXR0ZW4gYnkgYG1lbWNweWAgd2l0aGluIGBza2JfY29weV91YnVmcygpYC4gQW55IGZhaWx1cmUgcGF0aHMgc2FmZWx5IGRyb3AgdGhlIHBhY2tldCB2aWEgYGtmcmVlX3NrYl9yZWFzb24oKWAuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdhcnJhbnRpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTE6MzE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwppbmRleCAxZmI2Y2U2ODQzYWRlLi4zMWFlMTBhOWQ3OTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKQEAgLTcyLDYgJiM0Mzs3MiwyMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWludCBsZW47CiAKJiM0MzsJLyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJiMzOTtzIGRlc3RydWN0b3IsIHdoaWNoCiYjNDM7CSAqIGZvciBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzIG1hcmtzIHRoZSBzbG90IGFzIFRQX1NUQVRVU19BVkFJTEFCTEUKJiM0MzsJICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0CiYjNDM7CSAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCYjMzk7cwomIzQzOwkgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCwKJiM0MzsJICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlcwomIzQzOwkgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZQomIzQzOwkgKiBvbGQgZGF0YSBnZXRzIGNvcGllZCBvdXQuCiYjNDM7CSAqCiYjNDM7CSAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHsKJiM0MzsJCWRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7CiYjNDM7CQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7CiYjNDM7CQlyZXR1cm4gTkVUREVWX1RYX09LOwomIzQzOwl9CiYjNDM7CiAJc2tiX3R4X3RpbWVzdGFtcChza2IpOwogCiAJLyogZG8gbm90IGZvb2wgbmV0X3RpbWVzdGFtcF9jaGVjaygpIHdpdGggdmFyaW91cyBjbG9jayBiYXNlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NgoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3BiYWNrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgc2VlIGEgcGF0Y2ggbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWFkIHRoZSBjb2RlIGluIHRoZSBjb250ZXh0IG9mIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBgbG9vcGJhY2suY2AsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgemVyby1jb3B5IGZyYWcgaGFuZGxpbmcgaW4gdGhlIHRyYW5zbWl0IHBhdGggYW5kIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlY2VpdmUgcGF0aCBpcyBkZWZlcnJlZCwgcGVyaGFwcyBkdWUgdG8gUlBTIHN0ZWVyaW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgY29kZSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaCB3aXRoIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvb3BiYWNrIGRldmljZS4gSXQgbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IHRoZSBgc2tiX29ycGhhbigpYCBkZXN0cnVjdG9yIGFuZCBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzLCB3aGljaCBsaWtlbHkgdXNlcyBhIHNoYXJlZCBtZW1vcnkgcmVnaW9uIHdpdGggdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBtaWdodCBiZSBoYXBwZW5pbmc6IHRoZSBkZXN0cnVjdG9yIG1ha2VzIHRoZSBidWZmZXIgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSBhZ2FpbiwgYnV0IHRoZSByZWNlaXZlIHBhdGggbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBkYXRhIGluIHRoZSBmcmFnLgoKVGhlIGZpeCwgaXQgc2VlbXMsIGlzIHRoZSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgLiBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaXQgYXBwZWFycyB0aGVyZSYjMzk7cyBhIHByb2JsZW0gKGxpa2VseSBhIGNvcHkgZmFpbHVyZSksIGFuZCB0aGUgcGFja2V0IGlzIGRyb3BwZWQsIGluZGljYXRlZCBieSB0aGUgaW5jcmVtZW50IG9mIGEgZHJvcHBlZCBzdGF0cyBjb3VudGVyIGFuZCBhIGNhbGwgdG8gYGtmcmVlX3NrYl9yZWFzb25gLiBPdGhlcndpc2UsIHRoZSBjb2RlIHByb2NlZWRzIG5vcm1hbGx5IGFuZCBhZGRzIGEgdGltZXN0YW1wLgoKVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBvcmRlcmluZyBhbmQgd2hhdCBleGFjdGx5IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCBkb2VzLiBJdCYjMzk7cyBsaWtlbHkgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIHRha2VuLCB3aGljaCBpcyB0aGUgZml4LiBUaGUgdXNlIG9mIGBHRlBfQVRPTUlDYCBpcyBpbXBvcnRhbnQgaGVyZSBhcyBpdCBpbmRpY2F0ZXMgdGhlIGFsbG9jYXRpb24gbXVzdCBiZSBub24tYmxvY2tpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIGF0b21pYyBvciBub3QuIFRoaXMgaXMgbGlrZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIHRoZSBjcnV4IG9mIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZC4gSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCByaWdodCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0LyogYmxhY2tob2xlX25ldGRldiAtIGEgZGV2aWNlIHVzZWQgZm9yIGRzdHMgdGhhdCBhcmUgbWFya2VkIGV4cGlyZWQhXG4gIDYxOlx0ICogVGhpcyBpcyBnbG9iYWwgZGV2aWNlIChpbnN0ZWFkIG9mIHBlci1uZXQtbnMpIHNpbmNlIGl0JiMzOTtzIG5vdCBuZWVkZWRcbiAgNjI6XHQgKiB0byBiZSBwZXItbnMgYW5kIGdldHMgaW5pdGlhbGl6ZWQgYXQgYm9vdCB0aW1lLlxuICA2MzpcdCAqL1xuICA2NDpcdHN0cnVjdCBuZXRfZGV2aWNlICpibGFja2hvbGVfbmV0ZGV2O1xuICA2NTpcdEVYUE9SVF9TWU1CT0woYmxhY2tob2xlX25ldGRldik7XG4gIDY2Olx0XG4gIDY3Olx0LyogVGhlIGhpZ2hlciBsZXZlbHMgdGFrZSBjYXJlIG9mIG1ha2luZyB0aGlzIG5vbi1yZWVudHJhbnQgKGl0JiMzOTtzXG4gIDY4Olx0ICogY2FsbGVkIHdpdGggYmgmIzM5O3MgZGlzYWJsZWQpLlxuICA2OTpcdCAqL1xuICA3MDpcdHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gIDcxOlx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNzI6XHR7XG4gIDczOlx0XHRpbnQgbGVuO1xuICA3NDpcdFxuICA3NTpcdFx0LyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJiMzOTtzIGRlc3RydWN0b3IsIHdoaWNoXG4gIDc2Olx0XHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXG4gIDc3Olx0XHQgKiBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc3RpbGwgaGFzIHplcm9jb3B5IGZyYWdzIHBvaW50aW5nIHRvIGl0IHRoYXRcbiAgNzg6XHRcdCAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCYjMzk7c1xuICA3OTpcdFx0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG4gIDgwOlx0XHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXG4gIDgxOlx0XHQgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZVxuICA4MjpcdFx0ICogb2xkIGRhdGEgZ2V0cyBjb3BpZWQgb3V0LlxuICA4MzpcdFx0ICpcbiAgODQ6XHRcdCAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LlxuICA4NTpcdFx0ICovXG4gIDg2Olx0XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuICA4NzpcdFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuICA4ODpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XG4gIDg5Olx0XHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gIDkwOlx0XHR9XG4gIDkxOlx0XG4gIDkyOlx0XHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4gIDkzOlx0XG4gIDk0Olx0XHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXG4gIDk1Olx0XHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gIDk2Olx0XG4gIDk3Olx0XHRza2Jfb3JwaGFuKHNrYik7XG4gIDk4Olx0XG4gIDk5Olx0XHQvKiBCZWZvcmUgcXVldWVpbmcgdGhpcyBwYWNrZXQgdG8gX19uZXRpZl9yeCgpLFxuIDEwMDpcdFx0ICogbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkLlxuIDEwMTpcdFx0ICovXG4gMTAyOlx0XHRza2JfZHN0X2ZvcmNlKHNrYik7XG4gMTAzOlx0XG4gMTA0Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gMTA1Olx0XG4gMTA2Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDEwNzpcdFx0aWYgKGxpa2VseShfX25ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKVxuIDEwODpcdFx0XHRkZXZfbHN0YXRzX2FkZChkZXYsIGxlbik7XG4gMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9vcnBoYW5fZnJhZ3NfcngmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q9MjYxPWxvb3BiYWNrIHJlc3RyaWN0aW9uIGNhbiBiZSB0ZW1wb3JhcmlseSByZWxheGVkIGJ5IG1ha2luZ1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q6MjYyOnNrYl9vcnBoYW5fZnJhZ3NfcnggaWRlbnRpY2FsIHRvIHNrYl9vcnBoYW5fZnJhZ3MuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yNjMtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0PTIxOT1tc2dfemVyb2NvcHkuc2gg6ISa5pys5Zyo6Leo5ZG95ZCN56m66Ze055qE6Jma5ouf5Lul5aSq572R77yIdmV0aO+8ieWvueS5i+mXtOi/kOihjOaXtu+8jOa1i+ivleWwhuS4jeS8muaYvuekuuWHuuS7u+S9leaAp+iDvVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjIyMDrmj5DljYfjgILkuLrkuobkvr/kuo7mtYvor5XvvIzlj6/ku6XpgJrov4forqkgc2tiX29ycGhhbl9mcmFnc19yeCDkuI4gc2tiX29ycGhhbl9mcmFncyDnm7jlkIzvvIzmnaXmmoLml7bmlL7lrr1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yMjEt546v5Zue6ZmQ5Yi244CCXG4tLVxuZHJpdmVycy9uZXQvbG9vcGJhY2suYz03MD1zdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtNzgtXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgmIzM5O3NcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6Nzk6XHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODAtXHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXG4tLVxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy04NS1cdCAqL1xuZHJpdmVycy9uZXQvbG9vcGJhY2suYzo4NjpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTg3LVx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExMDctXG5kcml2ZXJzL25ldC90dW4uYzoxMTA4Olx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDktXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0Mzg9c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDctLyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM0NDg6c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFnc19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ0OS17XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcbi0tXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTItXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDo0MTM6XHQgKiBlLmcuLCB2aWEgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkgb3Igc2tiX29ycGhhbl9mcmFnc19yeCgpXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXHQgKi9cbi0tXG5uZXQvY29yZS9kZXYuYz0yNTExPXN0YXRpYyBpbnQgZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy0yNTE0LXtcbm5ldC9jb3JlL2Rldi5jOjI1MTU6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSlcbm5ldC9jb3JlL2Rldi5jLTI1MTYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI1NzQ9dm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0yNjMwLVx0aWYgKHB0X3ByZXYpIHtcbm5ldC9jb3JlL2Rldi5jOjI2MzE6XHRcdGlmICghc2tiX29ycGhhbl9mcmFnc19yeChza2IyLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL2Rldi5jLTI2MzItXHRcdFx0cHRfcHJldi1cdTAwM2VmdW5jKHNrYjIsIHNrYi1cdTAwM2VkZXYsIHB0X3ByZXYsIHNrYi1cdTAwM2VkZXYpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU3MTM9dm9pZCBfX3NrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTU3NTMtXG5uZXQvY29yZS9za2J1ZmYuYzo1NzU0Olx0XHRpZiAoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSB7XG5uZXQvY29yZS9za2J1ZmYuYy01NzU1LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMC17XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIzMTpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMi1cdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz01MjQ9c3RhdGljIGludCBpcDZfaW5wdXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTI1LXtcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjUyNjpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MjctXHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZGVjbGFyYXRpb24sIHRoZSBjcnVjaWFsIGJ1aWxkaW5nIGJsb2NrIHRoYXQgb3RoZXIgZnVuY3Rpb25zIGRlcGVuZCBvbi4gSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBvcnBoYW4gZnJhZ21lbnRzIGluIHRoZSByZWNlaXZlIHBhdGguIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29yayBzdGFjayYjMzk7cyBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IHByb2Nlc3Nlcy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDM1Olx0ICpcdG93bmVyKSBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgZnJhZyBhbmQgcmVsZWFzZSB0aGUgb3JpZ2luYWxcbjM0MzY6XHQgKlx0cGFnZSBieSBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yLlxuMzQzNzpcdCAqL1xuMzQzODpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4zNDM5Olx0e1xuMzQ0MDpcdFx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxuMzQ0MTpcdFx0XHRyZXR1cm4gMDtcbjM0NDI6XHRcdGlmIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IFNLQkZMX0RPTlRfT1JQSEFOKVxuMzQ0MzpcdFx0XHRyZXR1cm4gMDtcbjM0NDQ6XHRcdHJldHVybiBza2JfY29weV91YnVmcyhza2IsIGdmcF9tYXNrKTtcbjM0NDU6XHR9XG4zNDQ2Olx0XG4zNDQ3Olx0LyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXG4zNDQ4Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFnc19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbjM0NDk6XHR7XG4zNDUwOlx0XHRpZiAobGlrZWx5KCFza2JfemNvcHkoc2tiKSkpXG4zNDUxOlx0XHRcdHJldHVybiAwO1xuMzQ1MjpcdFx0cmV0dXJuIHNrYl9jb3B5X3VidWZzKHNrYiwgZ2ZwX21hc2spO1xuMzQ1MzpcdH1cbjM0NTQ6XHRcbjM0NTU6XHQvKipcbjM0NTY6XHQgKlx0X19za2JfcXVldWVfcHVyZ2VfcmVhc29uIC0gZW1wdHkgYSBsaXN0XG4zNDU3Olx0ICpcdEBsaXN0OiBsaXN0IHRvIGVtcHR5XG4zNDU4Olx0ICpcdEByZWFzb246IGRyb3AgcmVhc29uXG4zNDU5Olx0ICpcbjM0NjA6XHQgKlx0RGVsZXRlIGFsbCBidWZmZXJzIG9uIGFuIFx1MDAyNnNrX2J1ZmYgbGlzdC4gRWFjaCBidWZmZXIgaXMgcmVtb3ZlZCBmcm9tXG4zNDYxOlx0ICpcdHRoZSBsaXN0IGFuZCBvbmUgcmVmZXJlbmNlIGRyb3BwZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0aGVcbjM0NjI6XHQgKlx0bGlzdCBsb2NrIGFuZCB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcmVsZXZhbnQgbG9ja3MgdG8gdXNlIGl0LlxuMzQ2MzpcdCAqL1xuMzQ2NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbjM0NjU6XHRcdFx0XHRcdFx0ICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjM0NjY6XHR7XG4zNDY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMzQ2ODpcdFxuMzQ2OTpcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKVxuMzQ3MDpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbjM0NzE6XHR9XG4zNDcyOlx0XG4zNDczOlx0c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG4zNDc0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc2tiX2NvcHlfdWJ1ZnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYHNrYl9jb3B5X3VidWZzYCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGRldGFpbHMgb2YgaG93IHVzZXItc3BhY2UgYnVmZmVycyBnZXQgY29waWVkIGludG8gU0tCcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGlmIGl0JiMzOTtzIGEgemVyby1jb3B5IG1lY2hhbmlzbSBvciBpbmN1cnMgYSB0cmFkaXRpb25hbCBjb3B5LiBJJiMzOTttIGFsc28gaW50ZXJlc3RlZCBpbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gY29weWluZyBmcm9tIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdXNpbmcgc2NhdHRlci1nYXRoZXIgdG8gaW1wcm92ZSBETUEgZWZmaWNpZW5jeSwgZXNwZWNpYWxseSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgaW52b2x2ZWQgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGludGVycnVwdCBjb250ZXh0cy4gV2hhdCBraW5kIG9mIG1lbW9yeSBiYXJyaWVycyBvciBhdG9taWNzIGFyZSB1c2VkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlcz8gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBwYXJ0aWN1bGFyIG5ldHdvcmsgY2FyZHMgb3IgYnVmZmVyIHNpemVzLiBJbiBteSBoZWFkLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBsaWtlbHkgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgc2tiX2NvcHlfdWJ1ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNDM4PXZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTQzOTppbnQgc2tiX2NvcHlfdWJ1ZnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNDQwLXN0cnVjdCBza19idWZmICpza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpb3JpdHkpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5NjU9c3RhdGljIGludCBza2JfemVyb2NvcHlfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpvcmlnLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5OTktICovXG5uZXQvY29yZS9za2J1ZmYuYzoyMDAwOmludCBza2JfY29weV91YnVmcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbm5ldC9jb3JlL3NrYnVmZi5jLTIwMDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYHNrYl9jb3B5X3VidWZzYCBmdW5jdGlvbjoKCioqRGl2aW5nIGludG8gc2tiX2NvcHlfdWJ1ZnMqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgYHNrYl9jb3B5X3VidWZzYCBmcm9tIGBuZXQvY29yZS9za2J1ZmYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEl0JiMzOTtzIG9idmlvdXNseSBpbnZvbHZlZCBpbiBjb3B5aW5nIFVzZXIgQnVmZmVyIEZyYW1lcyAoVUJ1ZnMpIHdpdGhpbiBhbiBTS0IsIHNvIHRoaXMgaXMgY3JpdGljYWwgZm9yIGVmZmljaWVuY3kgd2hlbiBwYXNzaW5nIGRhdGEgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UsIG9yIHdoZW4gY2xvbmluZyBTS0JzLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBkYXRhIHBvaW50ZXIsIGRhdGEgbGVuZ3RoLCBoZWFkcm9vbSwgYW5kIHRhaWxyb29tIGFkanVzdG1lbnRzLiBBcmUgdGhleSB1c2luZyBETUEtY2FwYWJsZSBidWZmZXJzLCBvciBpcyBpdCBhbHdheXMgQ1BVIGNvcGllcz8gV2hhdCYjMzk7cyB0aGUgc3RyYXRlZ3kgaWYgYSBjb3B5IG9mIHRoZSB1YnVmIGlzIG5lZWRlZD8gSXMgaXQgY29weWluZyB0aGUgdWJ1Ziwgb3IgbWFraW5nIHRoZSBTS0IgcG9pbnQgdG8gdGhlIHNhbWUgVUJ1ZiwgaW5jcmVhc2luZyB0aGUgcmVmZXJlbmNlIGNvdW50LCBvciB1c2luZyB0aGUgZGF0YSBhcyBhIENPVyBidWZmZXI/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgbG9naWMsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbXBsaWNhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCB0b28uIFdlIGRvbiYjMzk7dCB3YW50IGFueSBtZW1vcnkgbGVha3Mgb3IgdW5leHBlY3RlZCBzZWdtZW50YXRpb24gZmF1bHRzIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgbG9ja2luZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW4gZGVwdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMDA6XHRpbnQgc2tiX2NvcHlfdWJ1ZnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4yMDAxOlx0e1xuMjAwMjpcdFx0aW50IG51bV9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbjIwMDM6XHRcdHN0cnVjdCBwYWdlICpwYWdlLCAqaGVhZCA9IE5VTEw7XG4yMDA0Olx0XHRpbnQgaSwgb3JkZXIsIHBzaXplLCBuZXdfZnJhZ3M7XG4yMDA1Olx0XHR1MzIgZF9vZmY7XG4yMDA2Olx0XG4yMDA3Olx0XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuMjAwODpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwMDk6XHRcbjIwMTA6XHRcdGlmIChza2Jfc2hhcmVkKHNrYikgfHwgc2tiX3VuY2xvbmUoc2tiLCBnZnBfbWFzaykpXG4yMDExOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjAxMjpcdFxuMjAxMzpcdFx0aWYgKCFudW1fZnJhZ3MpXG4yMDE0Olx0XHRcdGdvdG8gcmVsZWFzZTtcbjIwMTU6XHRcbjIwMTY6XHRcdC8qIFdlIG1pZ2h0IGhhdmUgdG8gYWxsb2NhdGUgaGlnaCBvcmRlciBwYWdlcywgc28gY29tcHV0ZSB3aGF0IG1pbmltdW1cbjIwMTc6XHRcdCAqIHBhZ2Ugb3JkZXIgaXMgbmVlZGVkLlxuMjAxODpcdFx0ICovXG4yMDE5Olx0XHRvcmRlciA9IDA7XG4yMDIwOlx0XHR3aGlsZSAoKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpICogTUFYX1NLQl9GUkFHUyBcdTAwM2MgX19za2JfcGFnZWxlbihza2IpKVxuMjAyMTpcdFx0XHRvcmRlciYjNDM7JiM0Mzs7XG4yMDIyOlx0XHRwc2l6ZSA9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbjIwMjM6XHRcbjIwMjQ6XHRcdG5ld19mcmFncyA9IChfX3NrYl9wYWdlbGVuKHNrYikgJiM0MzsgcHNpemUgLSAxKSBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuMjAyNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmV3X2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuMjAyNjpcdFx0XHRwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9DT01QLCBvcmRlcik7XG4yMDI3Olx0XHRcdGlmICghcGFnZSkge1xuMjAyODpcdFx0XHRcdHdoaWxlIChoZWFkKSB7XG4yMDI5Olx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqbmV4dCA9IChzdHJ1Y3QgcGFnZSAqKXBhZ2VfcHJpdmF0ZShoZWFkKTtcbjIwMzA6XHRcdFx0XHRcdHB1dF9wYWdlKGhlYWQpO1xuMjAzMTpcdFx0XHRcdFx0aGVhZCA9IG5leHQ7XG4yMDMyOlx0XHRcdFx0fVxuMjAzMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjAzNDpcdFx0XHR9XG4yMDM1Olx0XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgKHVuc2lnbmVkIGxvbmcpaGVhZCk7XG4yMDM2Olx0XHRcdGhlYWQgPSBwYWdlO1xuMjAzNzpcdFx0fVxuMjAzODpcdFxuMjAzOTpcdFx0cGFnZSA9IGhlYWQ7XG4yMDQwOlx0XHRkX29mZiA9IDA7XG4yMDQxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZnJhZ3M7IGkmIzQzOyYjNDM7KSB7XG4yMDQyOlx0XHRcdHNrYl9mcmFnX3QgKmYgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4yMDQzOlx0XHRcdHUzMiBwX29mZiwgcF9sZW4sIGNvcGllZDtcbjIwNDQ6XHRcdFx0c3RydWN0IHBhZ2UgKnA7XG4yMDQ1Olx0XHRcdHU4ICp2YWRkcjtcbjIwNDY6XHRcbjIwNDc6XHRcdFx0c2tiX2ZyYWdfZm9yZWFjaF9wYWdlKGYsIHNrYl9mcmFnX29mZihmKSwgc2tiX2ZyYWdfc2l6ZShmKSxcbjIwNDg6XHRcdFx0XHRcdCAgICAgIHAsIHBfb2ZmLCBwX2xlbiwgY29waWVkKSB7XG4yMDQ5Olx0XHRcdFx0dTMyIGNvcHksIGRvbmUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgc2tiX2NvcHlfdWJ1ZnNgIEZ1cnRoZXIqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSByZXN0IG9mIGBza2JfY29weV91YnVmc2AuIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgc2V0dXAsIGFuZCBub3cgSSBuZWVkIHRvIGZsZXNoIG91dCB0aGUgZnVuY3Rpb24gaW4gbXkgbWluZC4gV2hhdCBhcmUgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGNvcHlpbmcgdXNlci1zcGFjZSBidWZmZXJzIGludG8gYW4gYHNrYmA/IFdlJiMzOTt2ZSBnb3QgdGhlIGRhdGEgcG9pbnRlciwgdGhlIGxlbmd0aCwgYW5kIHRoZSBkZXN0aW5hdGlvbiBgc2tiYCBhbGwgcHJlcHBlZCwgYnV0IHdoYXQgaGFwcGVucyAqd2l0aGluKiB0aGlzIGNydWNpYWwgZnVuY3Rpb24/CgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggaXQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBsaWtlbHkgc29tZSBraW5kIG9mIGxvb3Agb3IgaXRlcmF0aXZlIHByb2Nlc3MgdG8gaGFuZGxlIHBvdGVudGlhbGx5IGZyYWdtZW50ZWQgdXNlci1zcGFjZSBtZW1vcnkuIFdlIGNhbiYjMzk7dCBhc3N1bWUgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgYmxvY2ssIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNsZXZlcm5lc3MgbGllcyBpbiB0aGVzZSBrZXJuZWwgZnVuY3Rpb25zLiBIb3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIG51YW5jZXMgb2YgcGFnZSBmYXVsdHMgYW5kIGFjY2VzcyBwZXJtaXNzaW9ucyB3aGVuIHJlYWRpbmcgZnJvbSB1c2VyIHNwYWNlPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyBmb3IgY29tbW9uIHNpemVzIG9yIGFsaWdubWVudCBzY2VuYXJpb3M/IEFyZSB0aGV5IHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBjb3B5PyBEb2VzIGl0IGdyYWNlZnVsbHkgaGFuZGxlIHBhcnRpYWwgY29waWVzLCBvciBkb2VzIGl0IGJhaWwgb3V0PwoKSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBhdGggaW4gbWFueSBuZXR3b3JraW5nIG9wZXJhdGlvbnMsIHNvIGV2ZXJ5IGluc3RydWN0aW9uIGNvdW50cy4gRG9lcyBpdCBlbXBsb3kgYW55IGNsZXZlciB0cmlja3MgbGlrZSBwcmVmZXRjaGluZywgb3IgcGVyaGFwcyB1c2UgYSBkZWRpY2F0ZWQgRE1BIGVuZ2luZSB0byBieXBhc3MgdGhlIENQVT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnQsIHBlcmhhcHMgdXNpbmcgdmVjdG9yIGluc3RydWN0aW9ucyBvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaWYgYXZhaWxhYmxlPwoKUmlnaHQgbm93IEkmIzM5O20gZm9ybXVsYXRpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYXMgSSBjb25zaWRlciB0aGUgZnVuY3Rpb24gY2FsbC4gV2l0aCBteSBmYW1pbGlhcml0eSBvZiBrZXJuZWwgY29kZSwgSSBhbnRpY2lwYXRlIHRoZSBuZWVkIGZvciBzYWZldHkgY2hlY2tzIHRvIGVuc3VyZSB0aGUgdmFsaWRpdHkgb2YgdGhlIHVzZXItc3BhY2UgcG9pbnRlcnMgYW5kIHRoZSByZXF1ZXN0ZWQgY29weSBzaXplLCBhcyB3ZWxsIGFzIGNvbnNpZGVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcy4gVGltZSB0byBzdGFydCBnb2luZyBkZWVwZXIgYW5kIGFuYWx5emluZyB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA1MDpcdFx0XHRcdHZhZGRyID0ga21hcF9hdG9taWMocCk7XG4yMDUxOlx0XG4yMDUyOlx0XHRcdFx0d2hpbGUgKGRvbmUgXHUwMDNjIHBfbGVuKSB7XG4yMDUzOlx0XHRcdFx0XHRpZiAoZF9vZmYgPT0gcHNpemUpIHtcbjIwNTQ6XHRcdFx0XHRcdFx0ZF9vZmYgPSAwO1xuMjA1NTpcdFx0XHRcdFx0XHRwYWdlID0gKHN0cnVjdCBwYWdlICopcGFnZV9wcml2YXRlKHBhZ2UpO1xuMjA1NjpcdFx0XHRcdFx0fVxuMjA1NzpcdFx0XHRcdFx0Y29weSA9IG1pbl90KHUzMiwgcHNpemUgLSBkX29mZiwgcF9sZW4gLSBkb25lKTtcbjIwNTg6XHRcdFx0XHRcdG1lbWNweShwYWdlX2FkZHJlc3MocGFnZSkgJiM0MzsgZF9vZmYsXG4yMDU5Olx0XHRcdFx0XHQgICAgICAgdmFkZHIgJiM0MzsgcF9vZmYgJiM0MzsgZG9uZSwgY29weSk7XG4yMDYwOlx0XHRcdFx0XHRkb25lICYjNDM7PSBjb3B5O1xuMjA2MTpcdFx0XHRcdFx0ZF9vZmYgJiM0Mzs9IGNvcHk7XG4yMDYyOlx0XHRcdFx0fVxuMjA2MzpcdFx0XHRcdGt1bm1hcF9hdG9taWModmFkZHIpO1xuMjA2NDpcdFx0XHR9XG4yMDY1Olx0XHR9XG4yMDY2Olx0XG4yMDY3Olx0XHQvKiBza2IgZnJhZ3MgcmVsZWFzZSB1c2Vyc3BhY2UgYnVmZmVycyAqL1xuMjA2ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2ZyYWdzOyBpJiM0MzsmIzQzOylcbjIwNjk6XHRcdFx0c2tiX2ZyYWdfdW5yZWYoc2tiLCBpKTtcbjIwNzA6XHRcbjIwNzE6XHRcdC8qIHNrYiBmcmFncyBwb2ludCB0byBrZXJuZWwgYnVmZmVycyAqL1xuMjA3MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmV3X2ZyYWdzIC0gMTsgaSYjNDM7JiM0MzspIHtcbjIwNzM6XHRcdFx0X19za2JfZmlsbF9uZXRtZW1fZGVzYyhza2IsIGksIHBhZ2VfdG9fbmV0bWVtKGhlYWQpLCAwLCBwc2l6ZSk7XG4yMDc0Olx0XHRcdGhlYWQgPSAoc3RydWN0IHBhZ2UgKilwYWdlX3ByaXZhdGUoaGVhZCk7XG4yMDc1Olx0XHR9XG4yMDc2Olx0XHRfX3NrYl9maWxsX25ldG1lbV9kZXNjKHNrYiwgbmV3X2ZyYWdzIC0gMSwgcGFnZV90b19uZXRtZW0oaGVhZCksIDAsXG4yMDc3Olx0XHRcdFx0ICAgICAgIGRfb2ZmKTtcbjIwNzg6XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyA9IG5ld19mcmFncztcbjIwNzk6XHRcbjIwODA6XHRyZWxlYXNlOlxuMjA4MTpcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgZmFsc2UpO1xuMjA4MjpcdFx0cmV0dXJuIDA7XG4yMDgzOlx0fVxuMjA4NDpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3B5X3VidWZzKTtcbjIwODU6XHRcbjIwODY6XHQvKipcbjIwODc6XHQgKlx0c2tiX2Nsb25lXHQtXHRkdXBsaWNhdGUgYW4gc2tfYnVmZlxuMjA4ODpcdCAqXHRAc2tiOiBidWZmZXIgdG8gY2xvbmVcbjIwODk6XHQgKlx0QGdmcF9tYXNrOiBhbGxvY2F0aW9uIHByaW9yaXR5XG4yMDkwOlx0ICpcbjIwOTE6XHQgKlx0RHVwbGljYXRlIGFuIFx1MDAyNnNrX2J1ZmYuIFRoZSBuZXcgb25lIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldC4gQm90aFxuMjA5MjpcdCAqXHRjb3BpZXMgc2hhcmUgdGhlIHNhbWUgcGFja2V0IGRhdGEgYnV0IG5vdCBzdHJ1Y3R1cmUuIFRoZSBuZXdcbjIwOTM6XHQgKlx0YnVmZmVyIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLiBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscyB0aGVcbjIwOTQ6XHQgKlx0ZnVuY3Rpb24gcmV0dXJucyAlTlVMTCBvdGhlcndpc2UgdGhlIG5ldyBidWZmZXIgaXMgcmV0dXJuZWQuXG4yMDk1Olx0ICpcbjIwOTY6XHQgKlx0SWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgZ2ZwX21hc2soKSBtdXN0IGJlXG4yMDk3Olx0ICpcdCVHRlBfQVRPTUlDLlxuMjA5ODpcdCAqL1xuMjA5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ0CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDcxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3BiYWNrIEludGVyZmFjZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZSBrZXkgY2hhbmdlIGlzIGFkZGluZyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZCBhbmQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLgoKVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHByb2JsZW06ICBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIGFuZCB6ZXJvLWNvcHkgZnJhZ3MgZnJvbSB1c2Vyc3BhY2UgKGxpa2UgQUZfUEFDS0VUIFRYIHJpbmdzKSwgYHNrYl9vcnBoYW5gIHdhcyBydW5uaW5nIHRoZSBzb2NrZXQmIzM5O3MgZGVzdHJ1Y3RvciBwcmVtYXR1cmVseS4gVGhpcyBtZWFudCB1c2VyIHNwYWNlIGNvdWxkIG92ZXJ3cml0ZSB0aGUgbWVtb3J5IHRoZSBgc2tiYCYjMzk7cyBmcmFncyB3ZXJlIHBvaW50aW5nIHRvICpiZWZvcmUqIHRoZSBsb29wZWQtYmFjayBwYWNrZXQgd2FzIGFjdHVhbGx5IHByb2Nlc3NlZCwgbGVhZGluZyB0byBkYXRhIGNvcnJ1cHRpb24uIFRoZSBgc2tiX29ycGhhbl9mcmFnc19yeGAgZnVuY3Rpb24gaXMgdGhlcmUgdG8gcHJldmVudCB0aGlzLiBJdCBjb3BpZXMgdGhlIHVzZXItc3BhY2UgZnJhZ3MgaW50byBrZXJuZWwgcGFnZXMgYmVmb3JlIG9ycGhhbmluZyB0aGUgYHNrYmAuIElmIHRoaXMgY29weSBmYWlscyAoYWxsb2NhdGlvbiBvciBmYXVsdCksIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb3VudGVycy4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCBjb21tb24gS01TQU4gc2NlbmFyaW9zOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHb29kLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOby4gYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIG9wZXJhdGVzIG9uICppbml0aWFsaXplZCogYHNrYmAgZmllbGRzIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgdGhhdCB3ZSBoYW5kbGUuIFNvLCBubyByaXNrIHRoZXJlLgozLiAgKipBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogT2theSwgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoaXMgb25lIGNhcmVmdWxseS4gYHNrYl9jb3B5X3VidWZzYCBnZXRzIGNhbGxlZCBpbiBgc2tiX29ycGhhbl9mcmFnc19yeGAuIE5ld2x5IGFsbG9jYXRlZCBwYWdlcyAqYXJlKiBmaWxsZWQgd2l0aCBgbWVtY3B5YCBmcm9tIHVzZXIgZnJhZ3MuIFRoZSBwYXRjaCBleHBsaWNpdGx5IHByZXZlbnRzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIG5vIGlzc3VlIGhlcmUuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgc291bmQuIFdlIGFyZSBub3QgYWNjZXNzaW5nIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuCjUuICAqKkRhdGEgUmFjZXMqKjogWWVzLCB0aGlzIGFjdHVhbGx5ICpmaXhlcyogdGhlIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdXNlciBzcGFjZSBvdmVyd3JpdGluZyBtZW1vcnkuCgpTbywgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0IHNlZW1zIHRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4LCBidXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZXhwbGljaXRseSBjb3B5aW5nIHRoZSByZWxldmFudCB1c2VyLXNwYWNlIGRhdGEgYmVmb3JlIGFueSBvcnBoYW5pbmcgb2NjdXJzLCBwcmV2ZW50aW5nIGFjY2VzcyB0byBwb3RlbnRpYWxseSBmcmVlZCBtZW1vcnkuIEV2ZW4gdGhlIGVycm9yIHBhdGgsIHdoZXJlIHRoZSBjb3B5IGZhaWxzLCBjb3JyZWN0bHkgZHJvcHMgdGhlIHBhY2tldC4KCk9rYXksIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaW4gYGxvb3BiYWNrX3htaXRgOgoKYGBgYwomIzQzOwlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkgewomIzQzOwkJZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUKTsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KYGBgCgpUaGlzIGlzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuIHdlIHNlZSBpbiBwbGFjZXMgc3VjaCBhcyBgdHVuX25ldF94bWl0YC4gVGhlcmUgaXMgYWJzb2x1dGVseSBub3RoaW5nIHRoYXQgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCkluIGNvbmNsdXNpb246ICoqTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuKiogVGhpcyBpcyBhIGZpeCBmb3IgbWVtb3J5IHNhZmV0eSBhbmQgYSByYWNlIGNvbmRpdGlvbiwgYnV0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgY29uY2VybmVkIGFib3V0LiBUaGUgY29kZSBpcyBjbGVhbiBhbmQgcHJvcGVybHkgaGFuZGxlcyBhbGwgY2FzZXMuIFRoaXMgaXMgYSBzb2xpZCBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgaW4gYGxvb3BiYWNrX3htaXQoKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHplcm9jb3B5IGZyYWdzIChlLmcuIEFGX1BBQ0tFVCBUWCByaW5nKSBiZWluZyBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYmVmb3JlIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZSBhbGxvY2F0ZWQgcGFnZXMgZm9yIGZyYWcgY29weWluZyBhcmUgZnVsbHkgd3JpdHRlbiBieSBgbWVtY3B5YCB3aXRoaW4gYHNrYl9jb3B5X3VidWZzKClgLiBBbnkgZmFpbHVyZSBwYXRocyBzYWZlbHkgZHJvcCB0aGUgcGFja2V0IHZpYSBga2ZyZWVfc2tiX3JlYXNvbigpYC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYCBpbiBgbG9vcGJhY2tfeG1pdCgpYCBiZWZvcmUgYHNrYl9vcnBoYW4oc2tiKWAgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdpdGggemVyb2NvcHkgZnJhZ3MgKGUuZy4gQUZfUEFDS0VUIFRYIHJpbmcpIGJlaW5nIG1vZGlmaWVkIGJ5IHVzZXJzcGFjZSBiZWZvcmUgdGhlIHBhY2tldCBpcyByZWNlaXZlZC5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzE6NTQuOTA1MTEwMjU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3MzQ1NjUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcGJhY2tfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgaW4gYGxvb3BiYWNrX3htaXQoKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHplcm9jb3B5IGZyYWdzIChlLmcuIEFGX1BBQ0tFVCBUWCByaW5nKSBiZWluZyBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYmVmb3JlIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9vcGJhY2tfeG1pdGAgaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgIHRvIG9ycGhhbiB6ZXJvY29weSBza2IgZnJhZ21lbnRzIChgc2tiX29ycGhhbl9mcmFnc19yeGApIGJlZm9yZSBpbnZva2luZyBgc2tiX29ycGhhbigpYCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uL3JhY2UgY29uZGl0aW9ucyB3aGVuIHRyYW5zbWl0dGluZyBwYWNrZXRzIG92ZXIgdGhlIGxvb3BiYWNrIGludGVyZmFjZSAoZS5nLiwgd2l0aCBBRl9QQUNLRVQgVFggcmluZ3MpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMxOjU0LjkwNTExNzM0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NzI2OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDExOjMxOjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jXFxuaW5kZXggMWZiNmNlNjg0M2FkZS4uMzFhZTEwYTlkNzkxMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jXFxuKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xcbkBAIC03Miw2ICs3MiwyMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB7XFxuIFxcdGludCBsZW47XFxuIFxcbitcXHQvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2IncyBkZXN0cnVjdG9yLCB3aGljaFxcbitcXHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXFxuK1xcdCAqIGFnYWluLCBldmVuIHRob3VnaCBpdCBzdGlsbCBoYXMgemVyb2NvcHkgZnJhZ3MgcG9pbnRpbmcgdG8gaXQgdGhhdFxcbitcXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgnc1xcbitcXHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcXG4rXFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xcbitcXHQgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZVxcbitcXHQgKiBvbGQgZGF0YSBnZXRzIGNvcGllZCBvdXQuXFxuK1xcdCAqXFxuK1xcdCAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG4rXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4rXFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQpO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbitcXHR9XFxuK1xcbiBcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuIFxcbiBcXHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMxOjU1LjQ4MDUzODgyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM0Mzg3NzI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcGJhY2tfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb29wYmFja194bWl0YCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gb3JwaGFuIHplcm9jb3B5IHNrYiBmcmFnbWVudHMgKGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCkgYmVmb3JlIGludm9raW5nIGBza2Jfb3JwaGFuKClgLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24vcmFjZSBjb25kaXRpb25zIHdoZW4gdHJhbnNtaXR0aW5nIHBhY2tldHMgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChlLmcuLCB3aXRoIEFGX1BBQ0tFVCBUWCByaW5ncykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTYxZTU0MjhlY2U3YzRhN2FmMGIwMzMxNGI5N2NiM2RlMTdhZjQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTozMTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jXG5pbmRleCAxZmI2Y2U2ODQzYWRlLi4zMWFlMTBhOWQ3OTExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xuKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xuQEAgLTcyLDYgKzcyLDIzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4ge1xuIFx0aW50IGxlbjtcbiBcbitcdC8qIFRoZSBza2Jfb3JwaGFuKCkgYmVsb3cgd2lsbCBydW4gdGhlIHNrYidzIGRlc3RydWN0b3IsIHdoaWNoXG4rXHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXG4rXHQgKiBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc3RpbGwgaGFzIHplcm9jb3B5IGZyYWdzIHBvaW50aW5nIHRvIGl0IHRoYXRcbitcdCAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCdzXG4rXHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcbitcdCAqIGZvciBleGFtcGxlIGJ5IFJQUyBzdGVlcmluZyB0aGUgcGFja2V0IHRvIGFub3RoZXIgQ1BVLCB0aGlzIGNyZWF0ZXNcbitcdCAqIGEgcmFjZSB3aGVyZSB1c2Vyc3BhY2UgbWF5IGZpbGwgaW4gbmV3IGRhdGEgaW50byB0aGUgZnJhZyBiZWZvcmUgdGhlXG4rXHQgKiBvbGQgZGF0YSBnZXRzIGNvcGllZCBvdXQuXG4rXHQgKlxuK1x0ICogVGFrZSBhIGtlcm5lbC1wcml2YXRlIGNvcHkuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG4rXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUKTtcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcdH1cbitcbiBcdHNrYl90eF90aW1lc3RhbXAoc2tiKTtcbiBcbiBcdC8qIGRvIG5vdCBmb29sIG5ldF90aW1lc3RhbXBfY2hlY2soKSB3aXRoIHZhcmlvdXMgY2xvY2sgYmFzZXMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMxOjU1LjQ4MDU0MDIzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwOTc5ODAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29wYmFjayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgcmV2aWV3IHJlcXVlc3QuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb29wYmFja194bWl0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBkaWZmLiBBaCwgaXQgbG9va3MgbGlrZSBhIG5ldyBjb25kaXRpb25hbCBibG9jayBoYXMgYmVlbiBhZGRlZCB3aXRoaW4gdGhlIGBsb29wYmFja194bWl0YCBmdW5jdGlvbi4gVGhlIGNvZGUgbWVudGlvbnMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYXJpc2luZyBmcm9tIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBwYXJ0aWN1bGFybHkgd2l0aCBgQUZfUEFDS0VUYCBhbmQgemVyby1jb3B5IGZyYWdzLiBJIHNlZSBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgaXNzdWU6IGBza2Jfb3JwaGFuKClgIGlzIGJlaW5nIGNhbGxlZCBvbiB0aGUgdHJhbnNtaXQgcGF0aCBiZWZvcmUgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIGNvcGllZCBvdmVyIHRvIHRoZSByZWNlaXZlIHBhdGguIFRoaXMgY291bGQgYWxsb3cgdXNlcnNwYWNlIHRvIG92ZXJ3cml0ZSBkYXRhIGluIHRoZSBzaGFyZWQgbWVtb3J5LiBUaGUgY29kZSB1c2VzIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KClgIHRvIGFkZHJlc3MgdGhpcy5cblxuRXNzZW50aWFsbHksIGEga2VybmVsLXByaXZhdGUgY29weSBpcyB0YWtlbiB1c2luZyBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYCB0byBhdm9pZCB0aGUgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBJZiB0aGUgY29weSBmYWlscyAod2hpY2ggSSBzZWUgaXMgdW5saWtlbHkpLCB0aGVuIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCwgaW5kaWNhdGVkIGJ5IHRoZSBgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVGAgcmVhc29uLiBUaGlzIGFwcHJvYWNoIHNlZW1zIHJlYXNvbmFibGU7IGRyb3BwaW5nIHRoZSBwYWNrZXQgaXMgYmV0dGVyIHRoYW4gY29ycnVwdGluZyBkYXRhLlxuXG5Ob3csIGxldCBtZSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBzZWUgdGhlIGNvbnRleHQuIEknbGwgdXNlIHRoZSByZWFkLWZpbGUgdG9vbCB0byBncmFiIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDcyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSByZWdyZXNzaW9ucyBvciB1bmZvcmVzZWVuIHNpZGUgZWZmZWN0cy4gVGhlIHBhdGNoIHNlZW1zIHRhcmdldGVkIGFuZCB3ZWxsLWV4cGxhaW5lZCwgYnV0IEkgc3RpbGwgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGFjdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgbG9vcGJhY2sgZHJpdmVyLiBJJ2xsIGFsc28gd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGJ1ZyByZXBvcnRzIG9yIGRpc2N1c3Npb25zIGFib3V0IHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjowMi41Nzg1MjY4MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9sb29wYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcdC8qIEZvciB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUuICovXFxuICA1MTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYXJwLmhcXHUwMDNlXFx0LyogRm9yIEFSUEhSRF9FVEhFUiAqL1xcbiAgNTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICA1MzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICA1NDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICA1NTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0X3RzdGFtcC5oXFx1MDAzZVxcbiAgNTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICA1NzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuICA1ODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG4gIDU5OlxcdFxcbiAgNjA6XFx0LyogYmxhY2tob2xlX25ldGRldiAtIGEgZGV2aWNlIHVzZWQgZm9yIGRzdHMgdGhhdCBhcmUgbWFya2VkIGV4cGlyZWQhXFxuICA2MTpcXHQgKiBUaGlzIGlzIGdsb2JhbCBkZXZpY2UgKGluc3RlYWQgb2YgcGVyLW5ldC1ucykgc2luY2UgaXQncyBub3QgbmVlZGVkXFxuICA2MjpcXHQgKiB0byBiZSBwZXItbnMgYW5kIGdldHMgaW5pdGlhbGl6ZWQgYXQgYm9vdCB0aW1lLlxcbiAgNjM6XFx0ICovXFxuICA2NDpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYmxhY2tob2xlX25ldGRldjtcXG4gIDY1OlxcdEVYUE9SVF9TWU1CT0woYmxhY2tob2xlX25ldGRldik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdC8qIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCdzXFxuICA2ODpcXHQgKiBjYWxsZWQgd2l0aCBiaCdzIGRpc2FibGVkKS5cXG4gIDY5OlxcdCAqL1xcbiAgNzA6XFx0c3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNzI6XFx0e1xcbiAgNzM6XFx0XFx0aW50IGxlbjtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0LyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJ3MgZGVzdHJ1Y3Rvciwgd2hpY2hcXG4gIDc2OlxcdFxcdCAqIGZvciBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzIG1hcmtzIHRoZSBzbG90IGFzIFRQX1NUQVRVU19BVkFJTEFCTEVcXG4gIDc3OlxcdFxcdCAqIGFnYWluLCBldmVuIHRob3VnaCBpdCBzdGlsbCBoYXMgemVyb2NvcHkgZnJhZ3MgcG9pbnRpbmcgdG8gaXQgdGhhdFxcbiAgNzg6XFx0XFx0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJ3NcXG4gIDc5OlxcdFxcdCAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLFxcbiAgODA6XFx0XFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xcbiAgODE6XFx0XFx0ICogYSByYWNlIHdoZXJlIHVzZXJzcGFjZSBtYXkgZmlsbCBpbiBuZXcgZGF0YSBpbnRvIHRoZSBmcmFnIGJlZm9yZSB0aGVcXG4gIDgyOlxcdFxcdCAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC5cXG4gIDgzOlxcdFxcdCAqXFxuICA4NDpcXHRcXHQgKiBUYWtlIGEga2VybmVsLXByaXZhdGUgY29weS5cXG4gIDg1OlxcdFxcdCAqL1xcbiAgODY6XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG4gIDg3OlxcdFxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuICA4ODpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XFxuICA4OTpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIGRvIG5vdCBmb29sIG5ldF90aW1lc3RhbXBfY2hlY2soKSB3aXRoIHZhcmlvdXMgY2xvY2sgYmFzZXMgKi9cXG4gIDk1OlxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0c2tiX29ycGhhbihza2IpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQvKiBCZWZvcmUgcXVldWVpbmcgdGhpcyBwYWNrZXQgdG8gX19uZXRpZl9yeCgpLFxcbiAxMDA6XFx0XFx0ICogbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkLlxcbiAxMDE6XFx0XFx0ICovXFxuIDEwMjpcXHRcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDc6XFx0XFx0aWYgKGxpa2VseShfX25ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbiAxMDg6XFx0XFx0XFx0ZGV2X2xzdGF0c19hZGQoZGV2LCBsZW4pO1xcbiAxMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjAyLjU3ODYwNTEwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjc3NjAzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIHJlbmRlcmVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTG9vcGJhY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGxvb3BiYWNrIGRldmljZSBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdDogbGV0J3MganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aGluZyBpcyBjb25maWd1cmVkLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIGlmIGl0J3MgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgS2NvbmZpZyBzeW1ib2wgZm9yIGl0LCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFByb2JhYmx5IGJlc3QgdG8gc2VhcmNoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGZvciBcImxvb3BiYWNrXCIgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5UaGVuLCBvbmNlIEkndmUgZ290IHRoZSBjb25maWd1cmF0aW9uIHNvcnRlZCwgSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLiBJJ20gcHJldHR5IHN1cmUgaXQncyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNvIEknbGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgYGRyaXZlcnMvbmV0L01ha2VmaWxlYCBhbmQgdGhlIGBuZXQvTWFrZWZpbGVgIGZpbGVzLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0eXBlcyBvZiBkZXZpY2UgZHJpdmVycyBhcmUgZGVjbGFyZWQuIEdyZXAgZm9yIFwibG9vcGJhY2suY1wiIChvciBzb21ldGhpbmcgc2ltaWxhcjsgbWlnaHQgYmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb24sIGJ1dCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCkgdG8gcGlucG9pbnQgdGhlIHNvdXJjZSBmaWxlLiBPbmNlIEkgaGF2ZSB0aGUgZmlsZSBuYW1lIEkgY2FuIHN0YXJ0IGxvb2tpbmcgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6MDYuNDA2MzY5MTYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA2NjA5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wYmFjay5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19NRElPKSArPSBtZGlvLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTkVUKSArPSBsb29wYmFjay5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjQtb2JqLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5ldGNvbnNvbGUub1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTEyNTY9c3RhdGljIHZvaWQgYWRfcnhfbWFjaGluZShzdHJ1Y3QgbGFjcGR1ICpsYWNwZHUsIHN0cnVjdCBwb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTEzNzktXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNihwb3J0LVxcdTAwM2VhY3Rvcl9zeXN0ZW0pKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoxMzgwOlxcdFxcdFxcdFxcdHNsYXZlX2Vycihwb3J0LVxcdTAwM2VzbGF2ZS1cXHUwMDNlYm9uZC1cXHUwMDNlZGV2LCBwb3J0LVxcdTAwM2VzbGF2ZS1cXHUwMDNlZGV2LCBcXFwiQW4gaWxsZWdhbCBsb29wYmFjayBvY2N1cnJlZCBvbiBzbGF2ZVxcXFxuXFxcIlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0xMzgxLVxcdFxcdFxcdFxcdFxcdCAgXFxcIkNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIHZlcmlmeSB0aGF0IGFsbCBhZGFwdGVycyBhcmUgY29ubmVjdGVkIHRvIDgwMi4zYWQgY29tcGxpYW50IHN3aXRjaCBwb3J0c1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTMzND1zdGF0aWMgYm9vbCBjYW5fc2tiX2luaXRfdmFsaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQ5LVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MzUwOlxcdFxcdC8qIHBlcmZvcm0gcHJvcGVyIGxvb3BiYWNrIG9uIGNhcGFibGUgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzUxLVxcdFxcdGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0VDSE8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZXRodG9vbC5jPTEzMTM9c3RhdGljIGludCBlMTAwMF9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5My1cXHRcXHRlMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDE4KSwgcGh5X3JlZyB8IDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM6MTM5NDpcXHRcXHQvKiBFbmFibGUgbG9vcGJhY2sgb24gdGhlIFBIWSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5NS1cXHRcXHRlMWVfd3BoeShodywgSTgyNTc3X1BIWV9MQktfQ1RSTCwgMHg4MDAxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9jb21tb24uYz0xMzg4PWludCBpNDBlX2FxX3NldF9waHlfaW50X21hc2soc3RydWN0IGk0MGVfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jLTE0MTItICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfY29tbW9uLmM6MTQxMzogKiBFbmFibGUvZGlzYWJsZSBsb29wYmFjayBvbiBhIGdpdmVuIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfY29tbW9uLmMtMTQxNC0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9NDE2Mz1pY2VfYXFfc2V0X2V2ZW50X21hc2soc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnRfbnVtLCB1MTYgbWFzayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtNDE4NC0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6NDE4NTogKiBFbmFibGUvZGlzYWJsZSBsb29wYmFjayBvbiBhIGdpdmVuIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTQxODYtICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYz0xNjgxPXN0YXRpYyBpbnQgaWdiX3NldHVwX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTcyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYzoxNzI2OlxcdFxcdC8qIFVuc2V0IHNpZ2RldGVjdCBmb3IgU0VSREVTIGxvb3BiYWNrIG9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTcyNy1cXHRcXHQgKiA4MjU4MCBhbmQgbmV3ZXIgZGV2aWNlcy5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jPTE3NTE9c3RhdGljIHZvaWQgaWdiX2xvb3BiYWNrX2NsZWFudXAoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTc2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYzoxNzY0OlxcdFxcdC8qIERpc2FibGUgbmVhciBlbmQgbG9vcGJhY2sgb24gREg4OXh4Q0MgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0xNzY1LVxcdFxcdHJlZyA9IHJkMzIoRTEwMDBfTVBIWV9BRERSX0NUTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM9MTA2MzI9c3RhdGljIGludCBpeGdiZV9jb25maWd1cmVfYnJpZGdlX21vZGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTA2NzYtXFx0XFx0LyogZGlzYWJsZSBSeCBzb3VyY2UgYWRkcmVzcyBwcnVuaW5nLCBzaW5jZSB3ZSBkb24ndCBleHBlY3QgdG9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MTA2Nzc6XFx0XFx0ICogYmUgcmVjZWl2aW5nIGV4dGVybmFsIGxvb3BiYWNrIG9mIG91ciB0cmFuc21pdHRlZCBmcmFtZXMuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTEwNjc4LVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jPTUwNT1zdGF0aWMgdm9pZCB2YWxpZGF0ZV9sb29wYmFjayhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LCB2b2lkICp2YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcnguYy01MTQtXFx0LyogTG9vcGJhY2sgZm91bmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmM6NTE1OlxcdHByaXYtXFx1MDAzZWxvb3BiYWNrX29rID0gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmMtNTE2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYz04MD1zdGF0aWMgaW50IG1seDRfZW5fdGVzdF9sb29wYmFjayhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jOjgyOlxcdHUzMiBsb29wYmFja19vayA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTgzLVxcdGludCBpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6ODU6ICAgICAgICBwcml2LVxcdTAwM2Vsb29wYmFja19vayA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTg2LVxcdHByaXYtXFx1MDAzZXZhbGlkYXRlX2xvb3BiYWNrID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy05OC1cXHRcXHRtc2xlZXAoTUxYNF9FTl9MT09QQkFDS19USU1FT1VUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6OTk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWxvb3BiYWNrX29rKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jOjEwMDpcXHRcXHRcXHRsb29wYmFja19vayA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTEwMS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy0xMDMtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYzoxMDQ6XFx0aWYgKCFsb29wYmFja19vaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmMtMTA1LVxcdFxcdGVuX2Vycihwcml2LCBcXFwiTG9vcGJhY2sgcGFja2V0IGRpZG4ndCBhcnJpdmVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTExMS1cXHRtbHg0X2VuX3VwZGF0ZV9sb29wYmFja19zdGF0ZShwcml2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYzoxMTI6XFx0cmV0dXJuICFsb29wYmFja19vaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmMtMTEzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oPTUyOT1zdHJ1Y3QgbWx4NF9lbl9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oLTU1NS1cXHR1MzIgbXNnX2VuYWJsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaDo1NTY6XFx0dTMyIGxvb3BiYWNrX29rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oLTU1Ny1cXHR1MzIgdmFsaWRhdGVfbG9vcGJhY2s7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9MjAwPXN0YXRpYyBNTFg1RV9ERUNMQVJFX1NUQVRTX0dSUF9PUF9VUERBVEVfU1RBVFModnBvcnRfcmVwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTI3MS1cXHRcXHRyZXBfc3RhdHMtXFx1MDAzZXZwb3J0X2xvb3BiYWNrX2J5dGVzID1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6MjcyOlxcdFxcdFxcdE1MWDVfR0VUX0NUUihvdXQsIGxvY2FsX2xvb3BiYWNrLm9jdGV0cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTI3My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0xNTA9c3RydWN0IG1seDVlX2xidF9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE1Mi1cXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjE1MzpcXHRib29sIGxvb3BiYWNrX29rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE1NC1cXHRib29sIGxvY2FsX2xiO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9MTU4PW1seDVlX3Rlc3RfbG9vcGJhY2tfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE5My1cXHQvKiBiaW5nbyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjE5NDpcXHRsYnRwLVxcdTAwM2Vsb29wYmFja19vayA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTk1LVxcdGNvbXBsZXRlKFxcdTAwMjZsYnRwLVxcdTAwM2Vjb21wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jPTIwMT1zdGF0aWMgaW50IG1seDVlX3Rlc3RfbG9vcGJhY2tfc2V0dXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM6MjIxOlxcdGxidHAtXFx1MDAzZWxvb3BiYWNrX29rID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMjIyLVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2bGJ0cC1cXHUwMDNlY29tcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0yNjE9c3RhdGljIGludCBtbHg1ZV90ZXN0X2xvb3BiYWNrKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMjc1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjI3NjpcXHRsYnRwLVxcdTAwM2Vsb29wYmFja19vayA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI5Ny1cXHR3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmxidHAtXFx1MDAzZWNvbXAsIE1MWDVFX0xCX1ZFUklGWV9USU1FT1VUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoyOTg6XFx0ZXJyID0gIWxidHAtXFx1MDAzZWxvb3BiYWNrX29rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jPTc3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGNvdW50ZXJfZGVzYyB2cG9ydF9sb29wYmFja19zdGF0c19kZXNjW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy03NzYtXFx0eyBcXFwidnBvcnRfbG9vcGJhY2tfYnl0ZXNcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jOjc3NzpcXHRcXHRWUE9SVF9DT1VOVEVSX09GRihsb2NhbF9sb29wYmFjay5vY3RldHMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMtNzc4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDc3MD1tbHhzd19zcDFfcmlmX2lwaXBfbGJfY29uZmlndXJlKHN0cnVjdCBtbHhzd19zcF9yaWYgKnJpZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwNzg1LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA3ODY6XFx0XFx0Z290byBlcnJfbG9vcGJhY2tfb3A7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA3ODctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDc5MzplcnJfbG9vcGJhY2tfb3A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA3OTQtXFx0bWx4c3dfc3BfdnJfcHV0KG1seHN3X3NwLCB1bF92cik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDk3Mz1tbHhzd19zcDJfcmlmX2lwaXBfbGJfY29uZmlndXJlKHN0cnVjdCBtbHhzd19zcF9yaWYgKnJpZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwOTg4LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA5ODk6XFx0XFx0Z290byBlcnJfbG9vcGJhY2tfb3A7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDk5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDk5NjplcnJfbG9vcGJhY2tfb3A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTctXFx0bWx4c3dfc3BfdWxfcmlmX3B1dCh1bF9yaWYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jPTcwMD1pbnQgZWY0X3NlbGZ0ZXN0KHN0cnVjdCBlZjRfbmljICplZngsIHN0cnVjdCBlZjRfc2VsZl90ZXN0cyAqdGVzdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmMtNzM0LVxcdC8qIE9mZmxpbmUgKGkuZS4gZGlzcnVwdGl2ZSkgdGVzdGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYzo3MzU6XFx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy03MzYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYz02OTM9aW50IGVmeF9zZWxmdGVzdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNzI3LVxcdC8qIE9mZmxpbmUgKGkuZS4gZGlzcnVwdGl2ZSkgdGVzdGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jOjcyODpcXHQgKiBUaGlzIGNoZWNrcyBNQUMgYW5kIFBIWSBsb29wYmFjayBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNzI5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmM9Njk4PWludCBlZnhfc2llbmFfc2VsZnRlc3Qoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9zZWxmX3Rlc3RzICp0ZXN0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTczMi1cXHQvKiBPZmZsaW5lIChpLmUuIGRpc3J1cHRpdmUpIHRlc3RpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYzo3MzM6XFx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTczNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9jYXNzaW5pLmgtMTk4OS0jZGVmaW5lICBSRUdfUENTX1NFUkRFU19DVFJMICAgICAgICAgICAgICAweDkwNTQgLyogc2VyZGVzIGNvbnRyb2wgcmVnICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL2Nhc3NpbmkuaDoxOTkwOiNkZWZpbmUgICAgUENTX1NFUkRFU19DVFJMX0xPT1BCQUNLICAgICAgIDB4MDEgICAvKiBlbmFibGUgbG9vcGJhY2sgb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vY2Fzc2luaS5oLTE5OTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNlcmRlcyBpbnRlcmZhY2UgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM9MTY2PXN0YXRpYyB2b2lkIGxvb3BiYWNrX2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTE3MC1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jOjE3MTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvb3BiYWNrX29wcyA9IHtcXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTE3Mi1cXHQubmRvX2luaXQgICAgICAgID0gbG9vcGJhY2tfZGV2X2luaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTIxNz1zdGF0aWMgdm9pZCBsb29wYmFja19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy0yMTktXFx0Z2VuX2xvX3NldHVwKGRldiwgKDY0ICogMTAyNCksIFxcdTAwMjZsb29wYmFja19ldGh0b29sX29wcywgXFx1MDAyNmV0aF9oZWFkZXJfb3BzLFxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6MjIwOlxcdFxcdCAgICAgXFx1MDAyNmxvb3BiYWNrX29wcywgbG9vcGJhY2tfZGV2X2ZyZWUpO1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtMjIxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jPTQ3PWVudW0gaGR4X2xvb3BiYWNrIHtcXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYzo0ODpcXHRoZHhfbG9vcGJhY2tfb24gPSAwLFxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjQ5OlxcdGhkeF9sb29wYmFja19vZmYgPSAxLFxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jLTUwLX07XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYz0xNTA9c3RhdGljIGludCBuc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmMtMTU1LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjE1NjpcXHRuc18xMF9iYXNlX3RfaGR4X2xvb3BhY2socGh5ZGV2LCBoZHhfbG9vcGJhY2tfb2ZmKTtcXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy0xNTctXFx0cmV0dXJuIG5zX2Fja19pbnRlcnJ1cHQocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jPTExNjY9c3RhdGljIGludCBydGw4MTg3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByYWRpb19pZHgsIHUzMiBjaGFuZ2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmMtMTE3My1cXHRyZWcgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VtYXAtXFx1MDAzZVRYX0NPTkYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jOjExNzQ6XFx0LyogRW5hYmxlIFRYIGxvb3BiYWNrIG9uIE1BQyBsZXZlbCB0byBhdm9pZCBUWCBkdXJpbmcgY2hhbm5lbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jLTExNzUtXFx0ICogY2hhbmdlcywgYXMgdGhpcyBoYXMgYmUgc2VlbiB0byBjYXVzZXMgcHJvYmxlbXMgYW5kIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjowNi42ODE0NDM2MjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczNDI4OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTG9vcGJhY2sgYW5kIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZSBpbiB0aGUgYGRyaXZlcnMvbmV0L01ha2VmaWxlYDogYG9iai0kKENPTkZJR19ORVQpICs9IGxvb3BiYWNrLm9gLiBSaWdodCBhd2F5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBJdCdzIGNsZWFyIHRoYXQgaWYgYENPTkZJR19ORVRgIGlzIHNldCwgdGhlIGxvb3BiYWNrIGRyaXZlciwgYGxvb3BiYWNrLmNgLCBnZXRzIGluY2x1ZGVkLiBTaW1wbGUgZW5vdWdoLCB0aGF0J3Mgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQuIE5vdywgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBjb2RlLCBzbyBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gSSdtIGZhbWlsaWFyIHdpdGggdGhlIGNvbmNlcHQgb2YgU0tCcyBhbmQgdGhlaXIgZnJhZ21lbnRzIGluIG5ldHdvcmsgZGF0YSwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBrZXJuZWwgaGFuZGxlcyBvcnBoYW4gZnJhZ21lbnRzLCBwYXJ0aWN1bGFybHkgb24gcmVjZWl2ZS4gSXQncyBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggZm9yIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgd2hlcmUgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBsb29wYmFjayBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb250ZXh0IHJpZ2h0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjA4Ljk1NDg3NjEzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAzODgwNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9vcnBoYW5fZnJhZ3NfcnhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q9MjYxPWxvb3BiYWNrIHJlc3RyaWN0aW9uIGNhbiBiZSB0ZW1wb3JhcmlseSByZWxheGVkIGJ5IG1ha2luZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjI2Mjpza2Jfb3JwaGFuX2ZyYWdzX3J4IGlkZW50aWNhbCB0byBza2Jfb3JwaGFuX2ZyYWdzLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0LTI2My1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdD0yMTk9bXNnX3plcm9jb3B5LnNoIOiEmuacrOWcqOi3qOWRveWQjeepuumXtOeahOiZmuaLn+S7peWkque9ke+8iHZldGjvvInlr7nkuYvpl7Tov5DooYzml7bvvIzmtYvor5XlsIbkuI3kvJrmmL7npLrlh7rku7vkvZXmgKfog71cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q6MjIwOuaPkOWNh+OAguS4uuS6huS+v+S6jua1i+ivle+8jOWPr+S7pemAmui/h+iuqSBza2Jfb3JwaGFuX2ZyYWdzX3J4IOS4jiBza2Jfb3JwaGFuX2ZyYWdzIOebuOWQjO+8jOadpeaaguaXtuaUvuWuvVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yMjEt546v5Zue6ZmQ5Yi244CCXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTcwPXN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTc4LVxcdCAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCdzXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYzo3OTpcXHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTgwLVxcdCAqIGZvciBleGFtcGxlIGJ5IFJQUyBzdGVlcmluZyB0aGUgcGFja2V0IHRvIGFub3RoZXIgQ1BVLCB0aGlzIGNyZWF0ZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODUtXFx0ICovXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYzo4NjpcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODctXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTEwNy1cXG5kcml2ZXJzL25ldC90dW4uYzoxMTA4OlxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTEwOS1cXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0Mzg9c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ0Ny0vKiBGcmFncyBtdXN0IGJlIG9ycGhhbmVkLCBldmVuIGlmIHJlZmNvdW50ZWQsIGlmIHNrYiBtaWdodCBsb29wIHRvIHJ4IHBhdGggKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM0NDg6c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFnc19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDkte1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlxcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yNTExPXN0YXRpYyBpbnQgZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI1MTQte1xcbm5ldC9jb3JlL2Rldi5jOjI1MTU6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpXFxubmV0L2NvcmUvZGV2LmMtMjUxNi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTI1NzQ9dm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI2MzAtXFx0aWYgKHB0X3ByZXYpIHtcXG5uZXQvY29yZS9kZXYuYzoyNjMxOlxcdFxcdGlmICghc2tiX29ycGhhbl9mcmFnc19yeChza2IyLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9kZXYuYy0yNjMyLVxcdFxcdFxcdHB0X3ByZXYtXFx1MDAzZWZ1bmMoc2tiMiwgc2tiLVxcdTAwM2VkZXYsIHB0X3ByZXYsIHNrYi1cXHUwMDNlZGV2KTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU3MTM9dm9pZCBfX3NrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTc1My1cXG5uZXQvY29yZS9za2J1ZmYuYzo1NzU0OlxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy01NzU1LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYz0yMjk9c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMC17XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMzE6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMi1cXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTI0PXN0YXRpYyBpbnQgaXA2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MjUte1xcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjUyNjpcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTUyNy1cXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6MTEuMzU4NzY1ODczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc0NzkzOTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3BiYWNrIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uIGFuZCBob3cgdGhlIGxvb3BiYWNrIG1lY2hhbmlzbSBmdW5jdGlvbnMgdW5kZXIgdGhlIGhvb2QuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgbG9vcGJhY2sgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdGhlIGBsb2AgaW50ZXJmYWNlLCBpcyBmdW5kYW1lbnRhbCB0byBldmVyeSBuZXR3b3JrIG5hbWVzcGFjZS4gV2hlbiBkYXRhIGlzIHRyYW5zbWl0dGVkIHZpYSBgbG9gLCB0aGUgZmxvdyBnb2VzIHJpZ2h0IHRocm91Z2ggYGxvb3BiYWNrX3htaXRgLCB3aGljaCBpcyBlZmZlY3RpdmVseSB0aGUgZnVuY3Rpb24gYm91bmQgdG8gYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0YC5cblxuTm93LCB0aGF0IHBhdGNoLi4uIGl0J3MgYWRkaW5nIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB3aXRoaW4gYGxvb3BiYWNrX3htaXRgLiBUaGUgcHVycG9zZSBoZXJlIGlzIHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBBRl9QQUNLRVQgVFggcmluZyB6ZXJvY29weSBmcmFnbWVudHMgd2hlbiBwYWNrZXRzIGFyZSwgd2VsbCwgbG9vcGVkIGJhY2suIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcHJldmVudHMgYSByYWNlLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdmlzaWJpbGl0eSBvZiBgbG9vcGJhY2tfeG1pdGAuIElzIGl0IGEgc3RhdGljIGZ1bmN0aW9uLCBvciBpcyBpdCBleHBvcnRlZCBpbiBzb21lIHdheT8gQWgsIGl0J3MgZGVmaW5lZCBhcyBgc3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoLi4uKWAuIFNvLCBpdCdzIHNjb3BlZCB3aXRoaW4gdGhlIGZpbGUuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaXMgYnVpbHQgaXMgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGluIC5jIGZpbGVzICphcmUqIHN0aWxsIG5vcm1hbCBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBVbmxlc3MgaW5saW5lZCwgd2hpY2ggaXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlLCB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnQgYGxvb3BiYWNrX29wcy5uZG9fc3RhcnRfeG1pdCA9IGxvb3BiYWNrX3htaXRgIHNob3VsZCBiZSBlbm91Z2ggdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBlbGltaW5hdGluZyBpdCBhcyBkZWFkIGNvZGUuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBsb29wYmFja19vcHNgIHdpdGhpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gZ3Jhc3AgdGhlIHJvbGUgb2YgYGxvb3BiYWNrX3htaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE5MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoxOC4xMDY3MDg4MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2xvb3BiYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcbiAxNjY6XFx0c3RhdGljIHZvaWQgbG9vcGJhY2tfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdGRldl9uZXQoZGV2KS1cXHUwMDNlbG9vcGJhY2tfZGV2ID0gTlVMTDtcXG4gMTY5OlxcdH1cXG4gMTcwOlxcdFxcbiAxNzE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsb29wYmFja19vcHMgPSB7XFxuIDE3MjpcXHRcXHQubmRvX2luaXQgICAgICAgID0gbG9vcGJhY2tfZGV2X2luaXQsXFxuIDE3MzpcXHRcXHQubmRvX3N0YXJ0X3htaXQgID0gbG9vcGJhY2tfeG1pdCxcXG4gMTc0OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBsb29wYmFja19nZXRfc3RhdHM2NCxcXG4gMTc1OlxcdFxcdC5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLFxcbiAxNzY6XFx0fTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0c3RhdGljIHZvaWQgZ2VuX2xvX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDE3OTpcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG10dSxcXG4gMTgwOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKmV0aF9vcHMsXFxuIDE4MTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgKmhkcl9vcHMsXFxuIDE4MjpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpkZXZfb3BzLFxcbiAxODM6XFx0XFx0XFx0XFx0IHZvaWQgKCpkZXZfZGVzdHJ1Y3Rvcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldikpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRkZXYtXFx1MDAzZW10dVxcdFxcdD0gbXR1O1xcbiAxODY6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5cXHQ9IEVUSF9ITEVOO1xcdC8qIDE0XFx0Ki9cXG4gMTg3OlxcdFxcdGRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW5cXHQ9IEVUSF9ITEVOO1xcdC8qIDE0XFx0Ki9cXG4gMTg4OlxcdFxcdGRldi1cXHUwMDNlYWRkcl9sZW5cXHRcXHQ9IEVUSF9BTEVOO1xcdC8qIDZcXHQqL1xcbiAxODk6XFx0XFx0ZGV2LVxcdTAwM2V0eXBlXFx0XFx0PSBBUlBIUkRfTE9PUEJBQ0s7XFx0LyogMHgwMDAxKi9cXG4gMTkwOlxcdFxcdGRldi1cXHUwMDNlZmxhZ3NcXHRcXHQ9IElGRl9MT09QQkFDSztcXG4gMTkxOlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFnc1xcdFxcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFIHwgSUZGX05PX1FVRVVFO1xcbiAxOTI6XFx0XFx0ZGV2LVxcdTAwM2VsbHR4XFx0XFx0PSB0cnVlO1xcbiAxOTM6XFx0XFx0ZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGVcXHQ9IHRydWU7XFxuIDE5NDpcXHRcXHRuZXRpZl9rZWVwX2RzdChkZXYpO1xcbiAxOTU6XFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlc1xcdD0gTkVUSUZfRl9HU09fU09GVFdBUkU7XFxuIDE5NjpcXHRcXHRkZXYtXFx1MDAzZWZlYXR1cmVzXFx0XFx0PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVFxcbiAxOTc6XFx0XFx0XFx0fCBORVRJRl9GX0dTT19TT0ZUV0FSRVxcbiAxOTg6XFx0XFx0XFx0fCBORVRJRl9GX0hXX0NTVU1cXG4gMTk5OlxcdFxcdFxcdHwgTkVUSUZfRl9SWENTVU1cXG4gMjAwOlxcdFxcdFxcdHwgTkVUSUZfRl9TQ1RQX0NSQ1xcbiAyMDE6XFx0XFx0XFx0fCBORVRJRl9GX0hJR0hETUFcXG4gMjAyOlxcdFxcdFxcdHwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRURcXG4gMjAzOlxcdFxcdFxcdHwgTkVUSUZfRl9MT09QQkFDSztcXG4gMjA0OlxcdFxcdGRldi1cXHUwMDNlZXRodG9vbF9vcHNcXHQ9IGV0aF9vcHM7XFxuIDIwNTpcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHNcXHRcXHQ9IGhkcl9vcHM7XFxuIDIwNjpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHNcXHRcXHQ9IGRldl9vcHM7XFxuIDIwNzpcXHRcXHRkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2XFx0PSB0cnVlO1xcbiAyMDg6XFx0XFx0ZGV2LVxcdTAwM2VwY3B1X3N0YXRfdHlwZVxcdD0gTkVUREVWX1BDUFVfU1RBVF9MU1RBVFM7XFxuIDIwOTpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvclxcdD0gZGV2X2Rlc3RydWN0b3I7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdG5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LCBHU09fTUFYX1NJWkUpO1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHQvKiBUaGUgbG9vcGJhY2sgZGV2aWNlIGlzIHNwZWNpYWwuIFRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjE4LjEwNjg2MTg3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzYxODkwMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYGxvb3BiYWNrX3htaXRgIGFzIGEgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgbG9vcGJhY2tfeG1pdGAgaXMgYmVpbmcgdXNlZCBhcyB0aGUgYC5uZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBpbmZvcm1hdGlvbiwgaXQgbG9va3MgcHJvbWlzaW5nLlxuXG4qICAgWWVzLCBpdCdzIG1vZGlmeWluZyB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgd2l0aGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydDsgbW9kaWZ5aW5nIGNvcmUgY29kZSBpcyBhbHdheXMgYSBoaWdoLXZhbHVlIHRhcmdldC5cbiogICBUaGUgZmFjdCB0aGF0IGl0J3MgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IHJlcXVpcmluZyBhbnkgc3BlY2lhbCBoYXJkd2FyZSBpcyBhbHNvIGV4Y2VsbGVudC4gVGhpcyBzaW1wbGlmaWVzIHRoZSBmdXp6aW5nIHNldHVwIGNvbnNpZGVyYWJseS4gTGVzcyBlZmZvcnQgbWVhbnMgbW9yZSBlZmZlY3RpdmUgZnV6emluZyBydW5zLlxuKiAgIE5vdywgdGhlIGtleSBwYXJ0OiBpdCBoYW5kbGVzIG9ycGhhbmluZyB6ZXJvY29weSBmcmFncyBpbiBgbG9vcGJhY2tfeG1pdGAuIFRoaXMgYWx0ZXJhdGlvbiBvZiBob3cgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpcyBwcm9jZXNzZWQgZHVyaW5nIGxvb3BiYWNrIHRyYW5zbWlzc2lvbiBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGludHJpY2F0ZSBkYXRhIGhhbmRsaW5nIHRoYXQgb2Z0ZW4gcmV2ZWFscyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsb2dpYyBlcnJvcnMgZHVyaW5nIGZ1enppbmcuIFRoaXMgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgY3Jhc2hlcy5cIlxuKiAgIFRoZSBmb2NhbCBwb2ludCBpcywgb2YgY291cnNlLCBgbG9vcGJhY2tfeG1pdGAgaXRzZWxmLiBUaGF0J3Mgb3VyIHRhcmdldC5cbiogICBGaW5hbGx5LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbi4gV2UgbmVlZCB0aGUgYE5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGxvb3BiYWNrLiBJIHNob3VsZCBkb3VibGUgY2hlY2ssIHRob3VnaCwgYW5kIHZlcmlmeSBpZiBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgTkVUREVWSUNFU2AsIGFyZSBhbHNvIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRpZyBpbnRvIGBuZXQvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoyMS44Njg3NTQ4ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTcxMTA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX01ESU8pICs9IG1kaW8ub1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVQpICs9IGxvb3BiYWNrLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfTkVUQ09OU09MRSkgKz0gbmV0Y29uc29sZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjIyLjE3MDQ3MzQ0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI5MjE1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbmV0d29yayBkcml2ZXJzIGFyZSBiZWluZyBjb21waWxlZC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgYXBwcm9hY2ggZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIHRvcC1sZXZlbCBidWlsZCBydWxlcyBmb3IgdGhlIGBkcml2ZXJzL2AgZGlyZWN0b3J5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZC4gVGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBwcm9iYWJseSBoYXMgaXRzIG93biBNYWtlZmlsZSwgYnV0IHRoZSBwYXJlbnQgb25lIHNob3VsZCBnaXZlIG1lIHRoZSBiaWcgcGljdHVyZSwgZXNwZWNpYWxseSBpbiBob3cgYENPTkZJR19ORVRgIGFmZmVjdHMgdGhpbmdzLlxuXG5JJ20gYmV0dGluZyB0aGUgbWFrZWZpbGUgd2lsbCBoYXZlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLiBJIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIGxpa2UgYG9iai0kKENPTkZJR19ORVQpICs9IG5ldC9gIG9yIHNpbWlsYXIuIElmIGl0ICppcyogc2V0IHVwIHRoYXQgd2F5LCB0aGUgZXhpc3RlbmNlIGFuZCB2YWx1ZSBvZiB0aGUgYENPTkZJR19ORVRgIGtjb25maWcgdmFyaWFibGUgd2lsbCBkaXJlY3RseSBjb250cm9sIHdoZXRoZXIgdGhlIGBuZXQvYCBzdWJkaXJlY3RvcnkgKGFuZCBpdHMgY29udGVudHMsIGkuZS4sIHRoZSBuZXR3b3JrIGRyaXZlcnMpIGFyZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzZWN0aW9uIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjI1LjE5OTY5MjE0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MTc3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9OTE9b2JqLSQoQ09ORklHX1NMSU1CVVMpXFx0XFx0Kz0gc2xpbWJ1cy9cXG5kcml2ZXJzL01ha2VmaWxlOjkyOm9iai15XFx0XFx0XFx0XFx0Kz0gbmV0L1xcbmRyaXZlcnMvTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0FUTSlcXHRcXHQrPSBhdG0vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjI1LjI4NjYxNDMyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTA2NDU3MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBMb29wYmFjayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBtYWtlZmlsZXMgYXJlIHRlbGxpbmcgbWUgdGhhdCBpbmNsdWRpbmcgYG5ldC9gIGluIGBkcml2ZXJzL01ha2VmaWxlYCBhbG9uZyB3aXRoIGBvYmotJChDT05GSUdfTkVUKSArPSBsb29wYmFjay5vYCBpbiBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIG1lYW5zIGBORVRgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIHRoZSBsb29wYmFjayBkcml2ZXIuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5MZXQncyBzZWXigKYgTm8gb3RoZXIgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyBzZWVtIHJlbGV2YW50LCBsb29raW5nIGF0IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCwgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgaXMgbm90IGltcG9ydGFudCBoZXJlLCBhbmQgYGxvb3BiYWNrX3htaXRgIGlzIGluZGVlZCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuXG5cblRoZXJlZm9yZSwgdGhlIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBvbmx5IGBsb29wYmFja194bWl0YCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYE5FVGAgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYHRydWVgIGJlY2F1c2UgdGhpcyBjb2RlIGFsdGVycyB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYywgZXZlbiB3aGVuIHVzaW5nIHplcm9jb3B5IHBhY2tldHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdmVyaWZ5IHRoaXMgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lcy4gUmVhY2hhYmlsaXR5IGlzIGNsZWFybHkgdW5pdmVyc2FsIGJlY2F1c2UgbG9vcGJhY2sgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBMaW51eCBuZXR3b3JrIHN0YWNrLiBUaGUgYFdvcnRoRnV6emluZ2AgcHJvcGVydHkgaXMgY29uZmlybWVkLiBgRm9jdXNTeW1ib2xzYCBpcyBjb3JyZWN0LCBwb2ludGluZyB0byB0aGUgZW50cnlwb2ludCBvZiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLiBBbmQgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYE5FVGAsIG5vIHByZWZpeCBpcyBuZWVkZWQuXG5cbkFscmlnaHQsIHRoYXQncyBjcnlzdGFsIGNsZWFyLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTYsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjI4Ljc5MzA3NDA3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjIzMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcGJhY2tfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb29wYmFja194bWl0YCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gb3JwaGFuIHplcm9jb3B5IHNrYiBmcmFnbWVudHMgKGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCkgYmVmb3JlIGludm9raW5nIGBza2Jfb3JwaGFuKClgLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24vcmFjZSBjb25kaXRpb25zIHdoZW4gdHJhbnNtaXR0aW5nIHBhY2tldHMgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChlLmcuLCB3aXRoIEFGX1BBQ0tFVCBUWCByaW5ncykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wYmFja194bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvb3BiYWNrX3htaXRgIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBvcnBoYW4gemVyb2NvcHkgc2tiIGZyYWdtZW50cyAoYHNrYl9vcnBoYW5fZnJhZ3NfcnhgKSBiZWZvcmUgaW52b2tpbmcgYHNrYl9vcnBoYW4oKWAsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi9yYWNlIGNvbmRpdGlvbnMgd2hlbiB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGUuZy4sIHdpdGggQUZfUEFDS0VUIFRYIHJpbmdzKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoyOC45MTkzMTg3MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzIwMzQyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6MjguOTIwMjY3Mzc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE3MTkzODgyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGluIGBsb29wYmFja194bWl0KClgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB6ZXJvY29weSBmcmFncyAoZS5nLiBBRl9QQUNLRVQgVFggcmluZykgYmVpbmcgbW9kaWZpZWQgYnkgdXNlcnNwYWNlIGJlZm9yZSB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZSBhbGxvY2F0ZWQgcGFnZXMgZm9yIGZyYWcgY29weWluZyBhcmUgZnVsbHkgd3JpdHRlbiBieSBgbWVtY3B5YCB3aXRoaW4gYHNrYl9jb3B5X3VidWZzKClgLiBBbnkgZmFpbHVyZSBwYXRocyBzYWZlbHkgZHJvcCB0aGUgcGFja2V0IHZpYSBga2ZyZWVfc2tiX3JlYXNvbigpYC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MzE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xuaW5kZXggMWZiNmNlNjg0M2FkZS4uMzFhZTEwYTlkNzkxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmNcbisrKyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmNcbkBAIC03Miw2ICs3MiwyMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdGludCBsZW47XG4gXG4rXHQvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2IncyBkZXN0cnVjdG9yLCB3aGljaFxuK1x0ICogZm9yIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMgbWFya3MgdGhlIHNsb3QgYXMgVFBfU1RBVFVTX0FWQUlMQUJMRVxuK1x0ICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0XG4rXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgnc1xuK1x0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG4rXHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXG4rXHQgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZVxuK1x0ICogb2xkIGRhdGEgZ2V0cyBjb3BpZWQgb3V0LlxuK1x0ICpcbitcdCAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuK1x0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuK1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XG4rXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4rXHR9XG4rXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4gXG4gXHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoyOC45MjAyNjkwNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQwODY1MzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3BiYWNrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIHNlZSBhIHBhdGNoIG1vZGlmeWluZyBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhZCB0aGUgY29kZSBpbiB0aGUgY29udGV4dCBvZiBpdHMgc3Vycm91bmRpbmcgY29kZSwgc28gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBgbG9vcGJhY2suY2AsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgemVyby1jb3B5IGZyYWcgaGFuZGxpbmcgaW4gdGhlIHRyYW5zbWl0IHBhdGggYW5kIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlY2VpdmUgcGF0aCBpcyBkZWZlcnJlZCwgcGVyaGFwcyBkdWUgdG8gUlBTIHN0ZWVyaW5nLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBjb2RlIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIHdpdGggYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9vcGJhY2sgZGV2aWNlLiBJdCBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgdGhlIGBza2Jfb3JwaGFuKClgIGRlc3RydWN0b3IgYW5kIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMsIHdoaWNoIGxpa2VseSB1c2VzIGEgc2hhcmVkIG1lbW9yeSByZWdpb24gd2l0aCB1c2Vyc3BhY2UuIFRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIHJhY2UgY29uZGl0aW9uIG1pZ2h0IGJlIGhhcHBlbmluZzogdGhlIGRlc3RydWN0b3IgbWFrZXMgdGhlIGJ1ZmZlciBhdmFpbGFibGUgdG8gdXNlcnNwYWNlIGFnYWluLCBidXQgdGhlIHJlY2VpdmUgcGF0aCBtaWdodCBzdGlsbCBiZSByZWZlcmVuY2luZyB0aGUgb2xkIGRhdGEgaW4gdGhlIGZyYWcuXG5cblRoZSBmaXgsIGl0IHNlZW1zLCBpcyB0aGUgY2FsbCB0byBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYC4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGl0IGFwcGVhcnMgdGhlcmUncyBhIHByb2JsZW0gKGxpa2VseSBhIGNvcHkgZmFpbHVyZSksIGFuZCB0aGUgcGFja2V0IGlzIGRyb3BwZWQsIGluZGljYXRlZCBieSB0aGUgaW5jcmVtZW50IG9mIGEgZHJvcHBlZCBzdGF0cyBjb3VudGVyIGFuZCBhIGNhbGwgdG8gYGtmcmVlX3NrYl9yZWFzb25gLiBPdGhlcndpc2UsIHRoZSBjb2RlIHByb2NlZWRzIG5vcm1hbGx5IGFuZCBhZGRzIGEgdGltZXN0YW1wLlxuXG5UbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgb3JkZXJpbmcgYW5kIHdoYXQgZXhhY3RseSBgc2tiX29ycGhhbl9mcmFnc19yeGAgZG9lcy4gSXQncyBsaWtlbHkgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIHRha2VuLCB3aGljaCBpcyB0aGUgZml4LiBUaGUgdXNlIG9mIGBHRlBfQVRPTUlDYCBpcyBpbXBvcnRhbnQgaGVyZSBhcyBpdCBpbmRpY2F0ZXMgdGhlIGFsbG9jYXRpb24gbXVzdCBiZSBub24tYmxvY2tpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIGF0b21pYyBvciBub3QuIFRoaXMgaXMgbGlrZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIHRoZSBjcnV4IG9mIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZC4gSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIHJpZ2h0IGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODYsIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjozNi4zMjg5MjY1MTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2xvb3BiYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0LyogYmxhY2tob2xlX25ldGRldiAtIGEgZGV2aWNlIHVzZWQgZm9yIGRzdHMgdGhhdCBhcmUgbWFya2VkIGV4cGlyZWQhXFxuICA2MTpcXHQgKiBUaGlzIGlzIGdsb2JhbCBkZXZpY2UgKGluc3RlYWQgb2YgcGVyLW5ldC1ucykgc2luY2UgaXQncyBub3QgbmVlZGVkXFxuICA2MjpcXHQgKiB0byBiZSBwZXItbnMgYW5kIGdldHMgaW5pdGlhbGl6ZWQgYXQgYm9vdCB0aW1lLlxcbiAgNjM6XFx0ICovXFxuICA2NDpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYmxhY2tob2xlX25ldGRldjtcXG4gIDY1OlxcdEVYUE9SVF9TWU1CT0woYmxhY2tob2xlX25ldGRldik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdC8qIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCdzXFxuICA2ODpcXHQgKiBjYWxsZWQgd2l0aCBiaCdzIGRpc2FibGVkKS5cXG4gIDY5OlxcdCAqL1xcbiAgNzA6XFx0c3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNzI6XFx0e1xcbiAgNzM6XFx0XFx0aW50IGxlbjtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0LyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJ3MgZGVzdHJ1Y3Rvciwgd2hpY2hcXG4gIDc2OlxcdFxcdCAqIGZvciBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzIG1hcmtzIHRoZSBzbG90IGFzIFRQX1NUQVRVU19BVkFJTEFCTEVcXG4gIDc3OlxcdFxcdCAqIGFnYWluLCBldmVuIHRob3VnaCBpdCBzdGlsbCBoYXMgemVyb2NvcHkgZnJhZ3MgcG9pbnRpbmcgdG8gaXQgdGhhdFxcbiAgNzg6XFx0XFx0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJ3NcXG4gIDc5OlxcdFxcdCAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLFxcbiAgODA6XFx0XFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xcbiAgODE6XFx0XFx0ICogYSByYWNlIHdoZXJlIHVzZXJzcGFjZSBtYXkgZmlsbCBpbiBuZXcgZGF0YSBpbnRvIHRoZSBmcmFnIGJlZm9yZSB0aGVcXG4gIDgyOlxcdFxcdCAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC5cXG4gIDgzOlxcdFxcdCAqXFxuICA4NDpcXHRcXHQgKiBUYWtlIGEga2VybmVsLXByaXZhdGUgY29weS5cXG4gIDg1OlxcdFxcdCAqL1xcbiAgODY6XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG4gIDg3OlxcdFxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuICA4ODpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XFxuICA4OTpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIGRvIG5vdCBmb29sIG5ldF90aW1lc3RhbXBfY2hlY2soKSB3aXRoIHZhcmlvdXMgY2xvY2sgYmFzZXMgKi9cXG4gIDk1OlxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0c2tiX29ycGhhbihza2IpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQvKiBCZWZvcmUgcXVldWVpbmcgdGhpcyBwYWNrZXQgdG8gX19uZXRpZl9yeCgpLFxcbiAxMDA6XFx0XFx0ICogbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkLlxcbiAxMDE6XFx0XFx0ICovXFxuIDEwMjpcXHRcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDc6XFx0XFx0aWYgKGxpa2VseShfX25ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbiAxMDg6XFx0XFx0XFx0ZGV2X2xzdGF0c19hZGQoZGV2LCBsZW4pO1xcbiAxMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjM2LjMyOTA2MzEwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MzkwMjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2Jfb3JwaGFuX2ZyYWdzX3J4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0PTI2MT1sb29wYmFjayByZXN0cmljdGlvbiBjYW4gYmUgdGVtcG9yYXJpbHkgcmVsYXhlZCBieSBtYWtpbmdcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdDoyNjI6c2tiX29ycGhhbl9mcmFnc19yeCBpZGVudGljYWwgdG8gc2tiX29ycGhhbl9mcmFncy5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yNjMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q9MjE5PW1zZ196ZXJvY29weS5zaCDohJrmnKzlnKjot6jlkb3lkI3nqbrpl7TnmoTomZrmi5/ku6XlpKrnvZHvvIh2ZXRo77yJ5a+55LmL6Ze06L+Q6KGM5pe277yM5rWL6K+V5bCG5LiN5Lya5pi+56S65Ye65Lu75L2V5oCn6IO9XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjIyMDrmj5DljYfjgILkuLrkuobkvr/kuo7mtYvor5XvvIzlj6/ku6XpgJrov4forqkgc2tiX29ycGhhbl9mcmFnc19yeCDkuI4gc2tiX29ycGhhbl9mcmFncyDnm7jlkIzvvIzmnaXmmoLml7bmlL7lrr1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3QtMjIxLeeOr+WbnumZkOWItuOAglxcbi0tXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYz03MD1zdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy03OC1cXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgnc1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6Nzk6XFx0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy04MC1cXHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTg1LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6ODY6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTg3LVxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMDU5PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDctXFxuZHJpdmVycy9uZXQvdHVuLmM6MTEwODpcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDktXFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDM4PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDctLyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDQ4OnN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Nfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDQ5LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTItXFx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oOjQxMzpcXHQgKiBlLmcuLCB2aWEgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkgb3Igc2tiX29ycGhhbl9mcmFnc19yeCgpXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUxMT1zdGF0aWMgaW50IGRlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yNTE0LXtcXG5uZXQvY29yZS9kZXYuYzoyNTE1OlxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKVxcbm5ldC9jb3JlL2Rldi5jLTI1MTYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yNTc0PXZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yNjMwLVxcdGlmIChwdF9wcmV2KSB7XFxubmV0L2NvcmUvZGV2LmM6MjYzMTpcXHRcXHRpZiAoIXNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiMiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvZGV2LmMtMjYzMi1cXHRcXHRcXHRwdF9wcmV2LVxcdTAwM2VmdW5jKHNrYjIsIHNrYi1cXHUwMDNlZGV2LCBwdF9wcmV2LCBza2ItXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01NzEzPXZvaWQgX19za2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NTMtXFxubmV0L2NvcmUvc2tidWZmLmM6NTc1NDpcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSB7XFxubmV0L2NvcmUvc2tidWZmLmMtNTc1NS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzAte1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjMxOlxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzItXFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTI1LXtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MjY6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MjctXFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjM4LjY4Mjk3MDQxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU5NzI4OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCB3b3Jrcywgc28gSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGRlY2xhcmF0aW9uLCB0aGUgY3J1Y2lhbCBidWlsZGluZyBibG9jayB0aGF0IG90aGVyIGZ1bmN0aW9ucyBkZXBlbmQgb24uIEkgd2FudCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgb3JwaGFuIGZyYWdtZW50cyBpbiB0aGUgcmVjZWl2ZSBwYXRoLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29yayBzdGFjaydzIGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgcHJvY2Vzc2VzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjQwLjc0MjcwNTIzM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTAwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNDM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDM1OlxcdCAqXFx0b3duZXIpIGNyZWF0ZSBhIGNvcHkgb2YgdGhhdCBmcmFnIGFuZCByZWxlYXNlIHRoZSBvcmlnaW5hbFxcbjM0MzY6XFx0ICpcXHRwYWdlIGJ5IGNhbGxpbmcgdGhlIGRlc3RydWN0b3IuXFxuMzQzNzpcXHQgKi9cXG4zNDM4OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuMzQzOTpcXHR7XFxuMzQ0MDpcXHRcXHRpZiAobGlrZWx5KCFza2JfemNvcHkoc2tiKSkpXFxuMzQ0MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zNDQyOlxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0tCRkxfRE9OVF9PUlBIQU4pXFxuMzQ0MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zNDQ0OlxcdFxcdHJldHVybiBza2JfY29weV91YnVmcyhza2IsIGdmcF9tYXNrKTtcXG4zNDQ1OlxcdH1cXG4zNDQ2OlxcdFxcbjM0NDc6XFx0LyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXFxuMzQ0ODpcXHRzdGF0aWMgaW5saW5lIGludCBza2Jfb3JwaGFuX2ZyYWdzX3J4KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbjM0NDk6XFx0e1xcbjM0NTA6XFx0XFx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxcbjM0NTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzQ1MjpcXHRcXHRyZXR1cm4gc2tiX2NvcHlfdWJ1ZnMoc2tiLCBnZnBfbWFzayk7XFxuMzQ1MzpcXHR9XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdC8qKlxcbjM0NTY6XFx0ICpcXHRfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24gLSBlbXB0eSBhIGxpc3RcXG4zNDU3OlxcdCAqXFx0QGxpc3Q6IGxpc3QgdG8gZW1wdHlcXG4zNDU4OlxcdCAqXFx0QHJlYXNvbjogZHJvcCByZWFzb25cXG4zNDU5OlxcdCAqXFxuMzQ2MDpcXHQgKlxcdERlbGV0ZSBhbGwgYnVmZmVycyBvbiBhbiBcXHUwMDI2c2tfYnVmZiBsaXN0LiBFYWNoIGJ1ZmZlciBpcyByZW1vdmVkIGZyb21cXG4zNDYxOlxcdCAqXFx0dGhlIGxpc3QgYW5kIG9uZSByZWZlcmVuY2UgZHJvcHBlZC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZVxcbjM0NjI6XFx0ICpcXHRsaXN0IGxvY2sgYW5kIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSByZWxldmFudCBsb2NrcyB0byB1c2UgaXQuXFxuMzQ2MzpcXHQgKi9cXG4zNDY0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4zNDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuMzQ2NjpcXHR7XFxuMzQ2NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjM0Njg6XFx0XFxuMzQ2OTpcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpXFxuMzQ3MDpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4zNDcxOlxcdH1cXG4zNDcyOlxcdFxcbjM0NzM6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuMzQ3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjQwLjc0MzM5OTk3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDEyNzkxMzkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2tiX2NvcHlfdWJ1ZnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIGBza2JfY29weV91YnVmc2AgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGRldGFpbHMgb2YgaG93IHVzZXItc3BhY2UgYnVmZmVycyBnZXQgY29waWVkIGludG8gU0tCcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGlmIGl0J3MgYSB6ZXJvLWNvcHkgbWVjaGFuaXNtIG9yIGluY3VycyBhIHRyYWRpdGlvbmFsIGNvcHkuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVzaW5nIHNjYXR0ZXItZ2F0aGVyIHRvIGltcHJvdmUgRE1BIGVmZmljaWVuY3ksIGVzcGVjaWFsbHkgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGludm9sdmVkIGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBpbnRlcnJ1cHQgY29udGV4dHMuIFdoYXQga2luZCBvZiBtZW1vcnkgYmFycmllcnMgb3IgYXRvbWljcyBhcmUgdXNlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZXM/IEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBwYXJ0aWN1bGFyIG5ldHdvcmsgY2FyZHMgb3IgYnVmZmVyIHNpemVzLiBJbiBteSBoZWFkLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGxpa2VseSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjUwLjg3MTMxNjU1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNTI0MTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc2tiX2NvcHlfdWJ1ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNDM4PXZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE0Mzk6aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE0NDAtc3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmlvcml0eSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTY1PXN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5OTktICovXFxubmV0L2NvcmUvc2tidWZmLmM6MjAwMDppbnQgc2tiX2NvcHlfdWJ1ZnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxubmV0L2NvcmUvc2tidWZmLmMtMjAwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjUzLjAwNjU2NTc3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjQwMzEyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgc2tiX2NvcHlfdWJ1ZnNgIGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHNrYl9jb3B5X3VidWZzKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCBgc2tiX2NvcHlfdWJ1ZnNgIGZyb20gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gSXQncyBvYnZpb3VzbHkgaW52b2x2ZWQgaW4gY29weWluZyBVc2VyIEJ1ZmZlciBGcmFtZXMgKFVCdWZzKSB3aXRoaW4gYW4gU0tCLCBzbyB0aGlzIGlzIGNyaXRpY2FsIGZvciBlZmZpY2llbmN5IHdoZW4gcGFzc2luZyBkYXRhIGJldHdlZW4gdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlLCBvciB3aGVuIGNsb25pbmcgU0tCcy4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgZGF0YSBwb2ludGVyLCBkYXRhIGxlbmd0aCwgaGVhZHJvb20sIGFuZCB0YWlscm9vbSBhZGp1c3RtZW50cy4gQXJlIHRoZXkgdXNpbmcgRE1BLWNhcGFibGUgYnVmZmVycywgb3IgaXMgaXQgYWx3YXlzIENQVSBjb3BpZXM/IFdoYXQncyB0aGUgc3RyYXRlZ3kgaWYgYSBjb3B5IG9mIHRoZSB1YnVmIGlzIG5lZWRlZD8gSXMgaXQgY29weWluZyB0aGUgdWJ1Ziwgb3IgbWFraW5nIHRoZSBTS0IgcG9pbnQgdG8gdGhlIHNhbWUgVUJ1ZiwgaW5jcmVhc2luZyB0aGUgcmVmZXJlbmNlIGNvdW50LCBvciB1c2luZyB0aGUgZGF0YSBhcyBhIENPVyBidWZmZXI/IEknbSBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYywgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocywgdG9vLiBXZSBkb24ndCB3YW50IGFueSBtZW1vcnkgbGVha3Mgb3IgdW5leHBlY3RlZCBzZWdtZW50YXRpb24gZmF1bHRzIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgbG9ja2luZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW4gZGVwdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjo1Ny4yNDY4ODE1MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMDA6XFx0aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbjIwMDE6XFx0e1xcbjIwMDI6XFx0XFx0aW50IG51bV9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7XFxuMjAwMzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgKmhlYWQgPSBOVUxMO1xcbjIwMDQ6XFx0XFx0aW50IGksIG9yZGVyLCBwc2l6ZSwgbmV3X2ZyYWdzO1xcbjIwMDU6XFx0XFx0dTMyIGRfb2ZmO1xcbjIwMDY6XFx0XFxuMjAwNzpcXHRcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbjIwMDg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjAwOTpcXHRcXG4yMDEwOlxcdFxcdGlmIChza2Jfc2hhcmVkKHNrYikgfHwgc2tiX3VuY2xvbmUoc2tiLCBnZnBfbWFzaykpXFxuMjAxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMDEyOlxcdFxcbjIwMTM6XFx0XFx0aWYgKCFudW1fZnJhZ3MpXFxuMjAxNDpcXHRcXHRcXHRnb3RvIHJlbGVhc2U7XFxuMjAxNTpcXHRcXG4yMDE2OlxcdFxcdC8qIFdlIG1pZ2h0IGhhdmUgdG8gYWxsb2NhdGUgaGlnaCBvcmRlciBwYWdlcywgc28gY29tcHV0ZSB3aGF0IG1pbmltdW1cXG4yMDE3OlxcdFxcdCAqIHBhZ2Ugb3JkZXIgaXMgbmVlZGVkLlxcbjIwMTg6XFx0XFx0ICovXFxuMjAxOTpcXHRcXHRvcmRlciA9IDA7XFxuMjAyMDpcXHRcXHR3aGlsZSAoKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikgKiBNQVhfU0tCX0ZSQUdTIFxcdTAwM2MgX19za2JfcGFnZWxlbihza2IpKVxcbjIwMjE6XFx0XFx0XFx0b3JkZXIrKztcXG4yMDIyOlxcdFxcdHBzaXplID0gKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuMjAyMzpcXHRcXG4yMDI0OlxcdFxcdG5ld19mcmFncyA9IChfX3NrYl9wYWdlbGVuKHNrYikgKyBwc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIChQQUdFX1NISUZUICsgb3JkZXIpO1xcbjIwMjU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ld19mcmFnczsgaSsrKSB7XFxuMjAyNjpcXHRcXHRcXHRwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9DT01QLCBvcmRlcik7XFxuMjAyNzpcXHRcXHRcXHRpZiAoIXBhZ2UpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdHdoaWxlIChoZWFkKSB7XFxuMjAyOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqbmV4dCA9IChzdHJ1Y3QgcGFnZSAqKXBhZ2VfcHJpdmF0ZShoZWFkKTtcXG4yMDMwOlxcdFxcdFxcdFxcdFxcdHB1dF9wYWdlKGhlYWQpO1xcbjIwMzE6XFx0XFx0XFx0XFx0XFx0aGVhZCA9IG5leHQ7XFxuMjAzMjpcXHRcXHRcXHRcXHR9XFxuMjAzMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDM0OlxcdFxcdFxcdH1cXG4yMDM1OlxcdFxcdFxcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgKHVuc2lnbmVkIGxvbmcpaGVhZCk7XFxuMjAzNjpcXHRcXHRcXHRoZWFkID0gcGFnZTtcXG4yMDM3OlxcdFxcdH1cXG4yMDM4OlxcdFxcbjIwMzk6XFx0XFx0cGFnZSA9IGhlYWQ7XFxuMjA0MDpcXHRcXHRkX29mZiA9IDA7XFxuMjA0MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2ZyYWdzOyBpKyspIHtcXG4yMDQyOlxcdFxcdFxcdHNrYl9mcmFnX3QgKmYgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXTtcXG4yMDQzOlxcdFxcdFxcdHUzMiBwX29mZiwgcF9sZW4sIGNvcGllZDtcXG4yMDQ0OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbjIwNDU6XFx0XFx0XFx0dTggKnZhZGRyO1xcbjIwNDY6XFx0XFxuMjA0NzpcXHRcXHRcXHRza2JfZnJhZ19mb3JlYWNoX3BhZ2UoZiwgc2tiX2ZyYWdfb2ZmKGYpLCBza2JfZnJhZ19zaXplKGYpLFxcbjIwNDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgcCwgcF9vZmYsIHBfbGVuLCBjb3BpZWQpIHtcXG4yMDQ5OlxcdFxcdFxcdFxcdHUzMiBjb3B5LCBkb25lID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6NTcuMjQ3MjU3MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjgyNTA2MTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHNrYl9jb3B5X3VidWZzYCBGdXJ0aGVyKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSByZXN0IG9mIGBza2JfY29weV91YnVmc2AuIEkndmUgbG9va2VkIGF0IHRoZSBzZXR1cCwgYW5kIG5vdyBJIG5lZWQgdG8gZmxlc2ggb3V0IHRoZSBmdW5jdGlvbiBpbiBteSBtaW5kLiBXaGF0IGFyZSB0aGUgY29yZSBtZWNoYW5pY3Mgb2YgY29weWluZyB1c2VyLXNwYWNlIGJ1ZmZlcnMgaW50byBhbiBgc2tiYD8gV2UndmUgZ290IHRoZSBkYXRhIHBvaW50ZXIsIHRoZSBsZW5ndGgsIGFuZCB0aGUgZGVzdGluYXRpb24gYHNrYmAgYWxsIHByZXBwZWQsIGJ1dCB3aGF0IGhhcHBlbnMgKndpdGhpbiogdGhpcyBjcnVjaWFsIGZ1bmN0aW9uP1xuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBpdC4gSSBzdXNwZWN0IHRoZXJlJ3MgbGlrZWx5IHNvbWUga2luZCBvZiBsb29wIG9yIGl0ZXJhdGl2ZSBwcm9jZXNzIHRvIGhhbmRsZSBwb3RlbnRpYWxseSBmcmFnbWVudGVkIHVzZXItc3BhY2UgbWVtb3J5LiBXZSBjYW4ndCBhc3N1bWUgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgYmxvY2ssIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY2xldmVybmVzcyBsaWVzIGluIHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMuIEhvdyBkb2VzIGl0IGRlYWwgd2l0aCB0aGUgbnVhbmNlcyBvZiBwYWdlIGZhdWx0cyBhbmQgYWNjZXNzIHBlcm1pc3Npb25zIHdoZW4gcmVhZGluZyBmcm9tIHVzZXIgc3BhY2U/IEFyZSB0aGVyZSBvcHRpbWl6YXRpb25zIGZvciBjb21tb24gc2l6ZXMgb3IgYWxpZ25tZW50IHNjZW5hcmlvcz8gQXJlIHRoZXkgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIGNvcHk/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgcGFydGlhbCBjb3BpZXMsIG9yIGRvZXMgaXQgYmFpbCBvdXQ/XG5cbkknbSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBhdGggaW4gbWFueSBuZXR3b3JraW5nIG9wZXJhdGlvbnMsIHNvIGV2ZXJ5IGluc3RydWN0aW9uIGNvdW50cy4gRG9lcyBpdCBlbXBsb3kgYW55IGNsZXZlciB0cmlja3MgbGlrZSBwcmVmZXRjaGluZywgb3IgcGVyaGFwcyB1c2UgYSBkZWRpY2F0ZWQgRE1BIGVuZ2luZSB0byBieXBhc3MgdGhlIENQVT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnQsIHBlcmhhcHMgdXNpbmcgdmVjdG9yIGluc3RydWN0aW9ucyBvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaWYgYXZhaWxhYmxlP1xuXG5SaWdodCBub3cgSSdtIGZvcm11bGF0aW5nIHRoZSBwb3NzaWJpbGl0aWVzIGFzIEkgY29uc2lkZXIgdGhlIGZ1bmN0aW9uIGNhbGwuIFdpdGggbXkgZmFtaWxpYXJpdHkgb2Yga2VybmVsIGNvZGUsIEkgYW50aWNpcGF0ZSB0aGUgbmVlZCBmb3Igc2FmZXR5IGNoZWNrcyB0byBlbnN1cmUgdGhlIHZhbGlkaXR5IG9mIHRoZSB1c2VyLXNwYWNlIHBvaW50ZXJzIGFuZCB0aGUgcmVxdWVzdGVkIGNvcHkgc2l6ZSwgYXMgd2VsbCBhcyBjb25zaWRlcmluZyBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMuIFRpbWUgdG8gc3RhcnQgZ29pbmcgZGVlcGVyIGFuZCBhbmFseXppbmcgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMzOjA0LjA3MjMyMDY2MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA1MDpcXHRcXHRcXHRcXHR2YWRkciA9IGttYXBfYXRvbWljKHApO1xcbjIwNTE6XFx0XFxuMjA1MjpcXHRcXHRcXHRcXHR3aGlsZSAoZG9uZSBcXHUwMDNjIHBfbGVuKSB7XFxuMjA1MzpcXHRcXHRcXHRcXHRcXHRpZiAoZF9vZmYgPT0gcHNpemUpIHtcXG4yMDU0OlxcdFxcdFxcdFxcdFxcdFxcdGRfb2ZmID0gMDtcXG4yMDU1OlxcdFxcdFxcdFxcdFxcdFxcdHBhZ2UgPSAoc3RydWN0IHBhZ2UgKilwYWdlX3ByaXZhdGUocGFnZSk7XFxuMjA1NjpcXHRcXHRcXHRcXHRcXHR9XFxuMjA1NzpcXHRcXHRcXHRcXHRcXHRjb3B5ID0gbWluX3QodTMyLCBwc2l6ZSAtIGRfb2ZmLCBwX2xlbiAtIGRvbmUpO1xcbjIwNTg6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KHBhZ2VfYWRkcmVzcyhwYWdlKSArIGRfb2ZmLFxcbjIwNTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZhZGRyICsgcF9vZmYgKyBkb25lLCBjb3B5KTtcXG4yMDYwOlxcdFxcdFxcdFxcdFxcdGRvbmUgKz0gY29weTtcXG4yMDYxOlxcdFxcdFxcdFxcdFxcdGRfb2ZmICs9IGNvcHk7XFxuMjA2MjpcXHRcXHRcXHRcXHR9XFxuMjA2MzpcXHRcXHRcXHRcXHRrdW5tYXBfYXRvbWljKHZhZGRyKTtcXG4yMDY0OlxcdFxcdFxcdH1cXG4yMDY1OlxcdFxcdH1cXG4yMDY2OlxcdFxcbjIwNjc6XFx0XFx0Lyogc2tiIGZyYWdzIHJlbGVhc2UgdXNlcnNwYWNlIGJ1ZmZlcnMgKi9cXG4yMDY4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZnJhZ3M7IGkrKylcXG4yMDY5OlxcdFxcdFxcdHNrYl9mcmFnX3VucmVmKHNrYiwgaSk7XFxuMjA3MDpcXHRcXG4yMDcxOlxcdFxcdC8qIHNrYiBmcmFncyBwb2ludCB0byBrZXJuZWwgYnVmZmVycyAqL1xcbjIwNzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ld19mcmFncyAtIDE7IGkrKykge1xcbjIwNzM6XFx0XFx0XFx0X19za2JfZmlsbF9uZXRtZW1fZGVzYyhza2IsIGksIHBhZ2VfdG9fbmV0bWVtKGhlYWQpLCAwLCBwc2l6ZSk7XFxuMjA3NDpcXHRcXHRcXHRoZWFkID0gKHN0cnVjdCBwYWdlICopcGFnZV9wcml2YXRlKGhlYWQpO1xcbjIwNzU6XFx0XFx0fVxcbjIwNzY6XFx0XFx0X19za2JfZmlsbF9uZXRtZW1fZGVzYyhza2IsIG5ld19mcmFncyAtIDEsIHBhZ2VfdG9fbmV0bWVtKGhlYWQpLCAwLFxcbjIwNzc6XFx0XFx0XFx0XFx0ICAgICAgIGRfb2ZmKTtcXG4yMDc4OlxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3MgPSBuZXdfZnJhZ3M7XFxuMjA3OTpcXHRcXG4yMDgwOlxcdHJlbGVhc2U6XFxuMjA4MTpcXHRcXHRza2JfemNvcHlfY2xlYXIoc2tiLCBmYWxzZSk7XFxuMjA4MjpcXHRcXHRyZXR1cm4gMDtcXG4yMDgzOlxcdH1cXG4yMDg0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3B5X3VidWZzKTtcXG4yMDg1OlxcdFxcbjIwODY6XFx0LyoqXFxuMjA4NzpcXHQgKlxcdHNrYl9jbG9uZVxcdC1cXHRkdXBsaWNhdGUgYW4gc2tfYnVmZlxcbjIwODg6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gY2xvbmVcXG4yMDg5OlxcdCAqXFx0QGdmcF9tYXNrOiBhbGxvY2F0aW9uIHByaW9yaXR5XFxuMjA5MDpcXHQgKlxcbjIwOTE6XFx0ICpcXHREdXBsaWNhdGUgYW4gXFx1MDAyNnNrX2J1ZmYuIFRoZSBuZXcgb25lIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldC4gQm90aFxcbjIwOTI6XFx0ICpcXHRjb3BpZXMgc2hhcmUgdGhlIHNhbWUgcGFja2V0IGRhdGEgYnV0IG5vdCBzdHJ1Y3R1cmUuIFRoZSBuZXdcXG4yMDkzOlxcdCAqXFx0YnVmZmVyIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLiBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscyB0aGVcXG4yMDk0OlxcdCAqXFx0ZnVuY3Rpb24gcmV0dXJucyAlTlVMTCBvdGhlcndpc2UgdGhlIG5ldyBidWZmZXIgaXMgcmV0dXJuZWQuXFxuMjA5NTpcXHQgKlxcbjIwOTY6XFx0ICpcXHRJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBnZnBfbWFzaygpIG11c3QgYmVcXG4yMDk3OlxcdCAqXFx0JUdGUF9BVE9NSUMuXFxuMjA5ODpcXHQgKi9cXG4yMDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMzowNC4wNzI1Nzc1OTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU2NzA0NTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3BiYWNrIEludGVyZmFjZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGUga2V5IGNoYW5nZSBpcyBhZGRpbmcgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWVkZWQgYW5kIGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgS01TQU4gd291bGQgZmxhZy5cblxuVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHByb2JsZW06ICBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIGFuZCB6ZXJvLWNvcHkgZnJhZ3MgZnJvbSB1c2Vyc3BhY2UgKGxpa2UgQUZfUEFDS0VUIFRYIHJpbmdzKSwgYHNrYl9vcnBoYW5gIHdhcyBydW5uaW5nIHRoZSBzb2NrZXQncyBkZXN0cnVjdG9yIHByZW1hdHVyZWx5LiBUaGlzIG1lYW50IHVzZXIgc3BhY2UgY291bGQgb3ZlcndyaXRlIHRoZSBtZW1vcnkgdGhlIGBza2JgJ3MgZnJhZ3Mgd2VyZSBwb2ludGluZyB0byAqYmVmb3JlKiB0aGUgbG9vcGVkLWJhY2sgcGFja2V0IHdhcyBhY3R1YWxseSBwcm9jZXNzZWQsIGxlYWRpbmcgdG8gZGF0YSBjb3JydXB0aW9uLiBUaGUgYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHByZXZlbnQgdGhpcy4gSXQgY29waWVzIHRoZSB1c2VyLXNwYWNlIGZyYWdzIGludG8ga2VybmVsIHBhZ2VzIGJlZm9yZSBvcnBoYW5pbmcgdGhlIGBza2JgLiBJZiB0aGlzIGNvcHkgZmFpbHMgKGFsbG9jYXRpb24gb3IgZmF1bHQpLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY291bnRlcnMuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIEtNU0FOIGltcGxpY2F0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBzeXN0ZW1hdGljYWxseSBnbyB0aHJvdWdoIGNvbW1vbiBLTVNBTiBzY2VuYXJpb3M6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHb29kLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCBvcGVyYXRlcyBvbiAqaW5pdGlhbGl6ZWQqIGBza2JgIGZpZWxkcyBhbmQgcmV0dXJucyBhbiBlcnJvciBjb2RlIHRoYXQgd2UgaGFuZGxlLiBTbywgbm8gcmlzayB0aGVyZS5cbjMuICAqKkFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBPa2F5LCBsZXQncyB0aGluayBhYm91dCB0aGlzIG9uZSBjYXJlZnVsbHkuIGBza2JfY29weV91YnVmc2AgZ2V0cyBjYWxsZWQgaW4gYHNrYl9vcnBoYW5fZnJhZ3NfcnhgLiBOZXdseSBhbGxvY2F0ZWQgcGFnZXMgKmFyZSogZmlsbGVkIHdpdGggYG1lbWNweWAgZnJvbSB1c2VyIGZyYWdzLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBwcmV2ZW50cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBubyBpc3N1ZSBoZXJlLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCB0aGUgY29kZSdzIGxvZ2ljIGlzIHNvdW5kLiBXZSBhcmUgbm90IGFjY2Vzc2luZyBhbnl0aGluZyB1bmluaXRpYWxpemVkLlxuNS4gICoqRGF0YSBSYWNlcyoqOiBZZXMsIHRoaXMgYWN0dWFsbHkgKmZpeGVzKiB0aGUgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byB1c2VyIHNwYWNlIG92ZXJ3cml0aW5nIG1lbW9yeS5cblxuU28sIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBpdCBzZWVtcyB0aGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGZpeCwgYnV0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgZXhwbGljaXRseSBjb3B5aW5nIHRoZSByZWxldmFudCB1c2VyLXNwYWNlIGRhdGEgYmVmb3JlIGFueSBvcnBoYW5pbmcgb2NjdXJzLCBwcmV2ZW50aW5nIGFjY2VzcyB0byBwb3RlbnRpYWxseSBmcmVlZCBtZW1vcnkuIEV2ZW4gdGhlIGVycm9yIHBhdGgsIHdoZXJlIHRoZSBjb3B5IGZhaWxzLCBjb3JyZWN0bHkgZHJvcHMgdGhlIHBhY2tldC5cblxuT2theSwgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlIGluIGBsb29wYmFja194bWl0YDpcblxuYGBgY1xuK1x0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbitcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQpO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0fVxuYGBgXG5cblRoaXMgaXMgdGhlIHN0YW5kYXJkIHBhdHRlcm4gd2Ugc2VlIGluIHBsYWNlcyBzdWNoIGFzIGB0dW5fbmV0X3htaXRgLiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vdGhpbmcgdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5JbiBjb25jbHVzaW9uOiAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqIFRoaXMgaXMgYSBmaXggZm9yIG1lbW9yeSBzYWZldHkgYW5kIGEgcmFjZSBjb25kaXRpb24sIGJ1dCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgY29uY2VybmVkIGFib3V0LiBUaGUgY29kZSBpcyBjbGVhbiBhbmQgcHJvcGVybHkgaGFuZGxlcyBhbGwgY2FzZXMuIFRoaXMgaXMgYSBzb2xpZCBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMzoxMC42Mzk2MjcyOTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGluIGBsb29wYmFja194bWl0KClgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB6ZXJvY29weSBmcmFncyAoZS5nLiBBRl9QQUNLRVQgVFggcmluZykgYmVpbmcgbW9kaWZpZWQgYnkgdXNlcnNwYWNlIGJlZm9yZSB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZSBhbGxvY2F0ZWQgcGFnZXMgZm9yIGZyYWcgY29weWluZyBhcmUgZnVsbHkgd3JpdHRlbiBieSBgbWVtY3B5YCB3aXRoaW4gYHNrYl9jb3B5X3VidWZzKClgLiBBbnkgZmFpbHVyZSBwYXRocyBzYWZlbHkgZHJvcCB0aGUgcGFja2V0IHZpYSBga2ZyZWVfc2tiX3JlYXNvbigpYC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgaW4gYGxvb3BiYWNrX3htaXQoKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHplcm9jb3B5IGZyYWdzIChlLmcuIEFGX1BBQ0tFVCBUWCByaW5nKSBiZWluZyBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYmVmb3JlIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5ck9r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 10:42:47 +0000 UTC FinishedAt: 2026-09-09 11:33:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "6c846d11-fb8f-46fb-b296-948661e26485" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "loopback_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BiYWNrX3htaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYCBpbiBgbG9vcGJhY2tfeG1pdCgpYCBiZWZvcmUgYHNrYl9vcnBoYW4oc2tiKWAgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdpdGggemVyb2NvcHkgZnJhZ3MgKGUuZy4gQUZfUEFDS0VUIFRYIHJpbmcpIGJlaW5nIG1vZGlmaWVkIGJ5IHVzZXJzcGFjZSBiZWZvcmUgdGhlIHBhY2tldCBpcyByZWNlaXZlZC5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvb3BiYWNrX3htaXRgIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBvcnBoYW4gemVyb2NvcHkgc2tiIGZyYWdtZW50cyAoYHNrYl9vcnBoYW5fZnJhZ3NfcnhgKSBiZWZvcmUgaW52b2tpbmcgYHNrYl9vcnBoYW4oKWAsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi9yYWNlIGNvbmRpdGlvbnMgd2hlbiB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGUuZy4sIHdpdGggQUZfUEFDS0VUIFRYIHJpbmdzKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MzE6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmNcbmluZGV4IDFmYjZjZTY4NDNhZGUuLjMxYWUxMGE5ZDc5MTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jXG5AQCAtNzIsNiAmIzQzOzcyLDIzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4ge1xuIFx0aW50IGxlbjtcbiBcbiYjNDM7XHQvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2ImIzM5O3MgZGVzdHJ1Y3Rvciwgd2hpY2hcbiYjNDM7XHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXG4mIzQzO1x0ICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0XG4mIzQzO1x0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJiMzOTtzXG4mIzQzO1x0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG4mIzQzO1x0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xuJiM0MztcdCAqIGEgcmFjZSB3aGVyZSB1c2Vyc3BhY2UgbWF5IGZpbGwgaW4gbmV3IGRhdGEgaW50byB0aGUgZnJhZyBiZWZvcmUgdGhlXG4mIzQzO1x0ICogb2xkIGRhdGEgZ2V0cyBjb3BpZWQgb3V0LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGFrZSBhIGtlcm5lbC1wcml2YXRlIGNvcHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbiYjNDM7XHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4mIzQzO1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XG4mIzQzO1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4gXG4gXHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9vcGJhY2tfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9vcGJhY2tfeG1pdGAgaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgIHRvIG9ycGhhbiB6ZXJvY29weSBza2IgZnJhZ21lbnRzIChgc2tiX29ycGhhbl9mcmFnc19yeGApIGJlZm9yZSBpbnZva2luZyBgc2tiX29ycGhhbigpYCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uL3JhY2UgY29uZGl0aW9ucyB3aGVuIHRyYW5zbWl0dGluZyBwYWNrZXRzIG92ZXIgdGhlIGxvb3BiYWNrIGludGVyZmFjZSAoZS5nLiwgd2l0aCBBRl9QQUNLRVQgVFggcmluZ3MpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTYxZTU0MjhlY2U3YzRhN2FmMGIwMzMxNGI5N2NiM2RlMTdhZjQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxMTozMTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IDFmYjZjZTY4NDNhZGUuLjMxYWUxMGE5ZDc5MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtNzIsNiAmIzQzOzcyLDIzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJaW50IGxlbjsKIAomIzQzOwkvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2ImIzM5O3MgZGVzdHJ1Y3Rvciwgd2hpY2gKJiM0MzsJICogZm9yIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMgbWFya3MgdGhlIHNsb3QgYXMgVFBfU1RBVFVTX0FWQUlMQUJMRQomIzQzOwkgKiBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc3RpbGwgaGFzIHplcm9jb3B5IGZyYWdzIHBvaW50aW5nIHRvIGl0IHRoYXQKJiM0MzsJICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJiMzOTtzCiYjNDM7CSAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLAomIzQzOwkgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzCiYjNDM7CSAqIGEgcmFjZSB3aGVyZSB1c2Vyc3BhY2UgbWF5IGZpbGwgaW4gbmV3IGRhdGEgaW50byB0aGUgZnJhZyBiZWZvcmUgdGhlCiYjNDM7CSAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC4KJiM0MzsJICoKJiM0MzsJICogVGFrZSBhIGtlcm5lbC1wcml2YXRlIGNvcHkuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkgewomIzQzOwkJZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUKTsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KJiM0MzsKIAlza2JfdHhfdGltZXN0YW1wKHNrYik7CiAKIAkvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb29wYmFjayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCByZXZpZXcgcmVxdWVzdC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgZGlmZi4gQWgsIGl0IGxvb2tzIGxpa2UgYSBuZXcgY29uZGl0aW9uYWwgYmxvY2sgaGFzIGJlZW4gYWRkZWQgd2l0aGluIHRoZSBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24uIFRoZSBjb2RlIG1lbnRpb25zIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFyaXNpbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgcGFydGljdWxhcmx5IHdpdGggYEFGX1BBQ0tFVGAgYW5kIHplcm8tY29weSBmcmFncy4gSSBzZWUgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhlIGlzc3VlOiBgc2tiX29ycGhhbigpYCBpcyBiZWluZyBjYWxsZWQgb24gdGhlIHRyYW5zbWl0IHBhdGggYmVmb3JlIGFsbCB0aGUgZGF0YSBoYXMgYmVlbiBjb3BpZWQgb3ZlciB0byB0aGUgcmVjZWl2ZSBwYXRoLiBUaGlzIGNvdWxkIGFsbG93IHVzZXJzcGFjZSB0byBvdmVyd3JpdGUgZGF0YSBpbiB0aGUgc2hhcmVkIG1lbW9yeS4gVGhlIGNvZGUgdXNlcyBgc2tiX29ycGhhbl9mcmFnc19yeCgpYCB0byBhZGRyZXNzIHRoaXMuCgpFc3NlbnRpYWxseSwgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIHRha2VuIHVzaW5nIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIHRvIGF2b2lkIHRoZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWUuIElmIHRoZSBjb3B5IGZhaWxzICh3aGljaCBJIHNlZSBpcyB1bmxpa2VseSksIHRoZW4gdGhlIHBhY2tldCBpcyBkcm9wcGVkLCBpbmRpY2F0ZWQgYnkgdGhlIGBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUYCByZWFzb24uIFRoaXMgYXBwcm9hY2ggc2VlbXMgcmVhc29uYWJsZTsgZHJvcHBpbmcgdGhlIHBhY2tldCBpcyBiZXR0ZXIgdGhhbiBjb3JydXB0aW5nIGRhdGEuCgpOb3csIGxldCBtZSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBzZWUgdGhlIGNvbnRleHQuIEkmIzM5O2xsIHVzZSB0aGUgcmVhZC1maWxlIHRvb2wgdG8gZ3JhYiB0aGUgY29kZSBhcm91bmQgbGluZSA3Mi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcmVncmVzc2lvbnMgb3IgdW5mb3Jlc2VlbiBzaWRlIGVmZmVjdHMuIFRoZSBwYXRjaCBzZWVtcyB0YXJnZXRlZCBhbmQgd2VsbC1leHBsYWluZWQsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gdmVyaWZ5IGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGxvb3BiYWNrIGRyaXZlci4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgYnVnIHJlcG9ydHMgb3IgZGlzY3Vzc2lvbnMgYWJvdXQgdGhpcyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVx0LyogRm9yIHRoZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4gKi9cbiAgNTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVx0LyogRm9yIEFSUEhSRF9FVEhFUiAqL1xuICA1MjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAgNTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICA1NDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gIDU1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0X3RzdGFtcC5oXHUwMDNlXG4gIDU2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICA1NzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gIDU4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICA1OTpcdFxuICA2MDpcdC8qIGJsYWNraG9sZV9uZXRkZXYgLSBhIGRldmljZSB1c2VkIGZvciBkc3RzIHRoYXQgYXJlIG1hcmtlZCBleHBpcmVkIVxuICA2MTpcdCAqIFRoaXMgaXMgZ2xvYmFsIGRldmljZSAoaW5zdGVhZCBvZiBwZXItbmV0LW5zKSBzaW5jZSBpdCYjMzk7cyBub3QgbmVlZGVkXG4gIDYyOlx0ICogdG8gYmUgcGVyLW5zIGFuZCBnZXRzIGluaXRpYWxpemVkIGF0IGJvb3QgdGltZS5cbiAgNjM6XHQgKi9cbiAgNjQ6XHRzdHJ1Y3QgbmV0X2RldmljZSAqYmxhY2tob2xlX25ldGRldjtcbiAgNjU6XHRFWFBPUlRfU1lNQk9MKGJsYWNraG9sZV9uZXRkZXYpO1xuICA2NjpcdFxuICA2NzpcdC8qIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCYjMzk7c1xuICA2ODpcdCAqIGNhbGxlZCB3aXRoIGJoJiMzOTtzIGRpc2FibGVkKS5cbiAgNjk6XHQgKi9cbiAgNzA6XHRzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA3MTpcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDcyOlx0e1xuICA3MzpcdFx0aW50IGxlbjtcbiAgNzQ6XHRcbiAgNzU6XHRcdC8qIFRoZSBza2Jfb3JwaGFuKCkgYmVsb3cgd2lsbCBydW4gdGhlIHNrYiYjMzk7cyBkZXN0cnVjdG9yLCB3aGljaFxuICA3NjpcdFx0ICogZm9yIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMgbWFya3MgdGhlIHNsb3QgYXMgVFBfU1RBVFVTX0FWQUlMQUJMRVxuICA3NzpcdFx0ICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0XG4gIDc4Olx0XHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgmIzM5O3NcbiAgNzk6XHRcdCAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLFxuICA4MDpcdFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xuICA4MTpcdFx0ICogYSByYWNlIHdoZXJlIHVzZXJzcGFjZSBtYXkgZmlsbCBpbiBuZXcgZGF0YSBpbnRvIHRoZSBmcmFnIGJlZm9yZSB0aGVcbiAgODI6XHRcdCAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC5cbiAgODM6XHRcdCAqXG4gIDg0Olx0XHQgKiBUYWtlIGEga2VybmVsLXByaXZhdGUgY29weS5cbiAgODU6XHRcdCAqL1xuICA4NjpcdFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbiAgODc6XHRcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiAgODg6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQpO1xuICA4OTpcdFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuICA5MDpcdFx0fVxuICA5MTpcdFxuICA5MjpcdFx0c2tiX3R4X3RpbWVzdGFtcChza2IpO1xuICA5MzpcdFxuICA5NDpcdFx0LyogZG8gbm90IGZvb2wgbmV0X3RpbWVzdGFtcF9jaGVjaygpIHdpdGggdmFyaW91cyBjbG9jayBiYXNlcyAqL1xuICA5NTpcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuICA5NjpcdFxuICA5NzpcdFx0c2tiX29ycGhhbihza2IpO1xuICA5ODpcdFxuICA5OTpcdFx0LyogQmVmb3JlIHF1ZXVlaW5nIHRoaXMgcGFja2V0IHRvIF9fbmV0aWZfcngoKSxcbiAxMDA6XHRcdCAqIG1ha2Ugc3VyZSBkc3QgaXMgcmVmY291bnRlZC5cbiAxMDE6XHRcdCAqL1xuIDEwMjpcdFx0c2tiX2RzdF9mb3JjZShza2IpO1xuIDEwMzpcdFxuIDEwNDpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xuIDEwNTpcdFxuIDEwNjpcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiAxMDc6XHRcdGlmIChsaWtlbHkoX19uZXRpZl9yeChza2IpID09IE5FVF9SWF9TVUNDRVNTKSlcbiAxMDg6XHRcdFx0ZGV2X2xzdGF0c19hZGQoZGV2LCBsZW4pO1xuIDEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIHJlbmRlcmVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIExvb3BiYWNrIERldmljZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgbG9vcGJhY2sgZGV2aWNlIHNpdHVhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQmIzM5O3MganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aGluZyBpcyBjb25maWd1cmVkLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbCBmb3IgaXQsIG9yIGF0IGxlYXN0IGEgZ29vZCBzdGFydGluZyBwb2ludC4gUHJvYmFibHkgYmVzdCB0byBzZWFyY2ggdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgZm9yICYjMzQ7bG9vcGJhY2smIzM0OyB0byBmaW5kIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpUaGVuLCBvbmNlIEkmIzM5O3ZlIGdvdCB0aGUgY29uZmlndXJhdGlvbiBzb3J0ZWQsIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBhY3R1YWwgc291cmNlIGNvZGUuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzbyBJJiMzOTtsbCBzdGFydCBieSBncmVwcGluZyB0aHJvdWdoIHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIGFuZCB0aGUgYG5ldC9NYWtlZmlsZWAgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0eXBlcyBvZiBkZXZpY2UgZHJpdmVycyBhcmUgZGVjbGFyZWQuIEdyZXAgZm9yICYjMzQ7bG9vcGJhY2suYyYjMzQ7IChvciBzb21ldGhpbmcgc2ltaWxhcjsgbWlnaHQgYmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb24sIGJ1dCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCkgdG8gcGlucG9pbnQgdGhlIHNvdXJjZSBmaWxlLiBPbmNlIEkgaGF2ZSB0aGUgZmlsZSBuYW1lIEkgY2FuIHN0YXJ0IGxvb2tpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wYmFjay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX01ESU8pICYjNDM7PSBtZGlvLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVQpICYjNDM7PSBsb29wYmFjay5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfTkVUQ09OU09MRSkgJiM0Mzs9IG5ldGNvbnNvbGUub1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0xMjU2PXN0YXRpYyB2b2lkIGFkX3J4X21hY2hpbmUoc3RydWN0IGxhY3BkdSAqbGFjcGR1LCBzdHJ1Y3QgcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMTM3OS1cdFx0XHRcdFx0ICAgICAgXHUwMDI2KHBvcnQtXHUwMDNlYWN0b3Jfc3lzdGVtKSkpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoxMzgwOlx0XHRcdFx0c2xhdmVfZXJyKHBvcnQtXHUwMDNlc2xhdmUtXHUwMDNlYm9uZC1cdTAwM2VkZXYsIHBvcnQtXHUwMDNlc2xhdmUtXHUwMDNlZGV2LCBcJiMzNDtBbiBpbGxlZ2FsIGxvb3BiYWNrIG9jY3VycmVkIG9uIHNsYXZlXFxuXCYjMzQ7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMTM4MS1cdFx0XHRcdFx0ICBcJiMzNDtDaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byB2ZXJpZnkgdGhhdCBhbGwgYWRhcHRlcnMgYXJlIGNvbm5lY3RlZCB0byA4MDIuM2FkIGNvbXBsaWFudCBzd2l0Y2ggcG9ydHNcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQ5LVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNTA6XHRcdC8qIHBlcmZvcm0gcHJvcGVyIGxvb3BiYWNrIG9uIGNhcGFibGUgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zNTEtXHRcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9FQ0hPKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM9MTMxMz1zdGF0aWMgaW50IGUxMDAwX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5My1cdFx0ZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzc2LCAxOCksIHBoeV9yZWcgfCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM6MTM5NDpcdFx0LyogRW5hYmxlIGxvb3BiYWNrIG9uIHRoZSBQSFkgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5NS1cdFx0ZTFlX3dwaHkoaHcsIEk4MjU3N19QSFlfTEJLX0NUUkwsIDB4ODAwMSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jPTEzODg9aW50IGk0MGVfYXFfc2V0X3BoeV9pbnRfbWFzayhzdHJ1Y3QgaTQwZV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jLTE0MTItICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9jb21tb24uYzoxNDEzOiAqIEVuYWJsZS9kaXNhYmxlIGxvb3BiYWNrIG9uIGEgZ2l2ZW4gcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jLTE0MTQtICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz00MTYzPWljZV9hcV9zZXRfZXZlbnRfbWFzayhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydF9udW0sIHUxNiBtYXNrLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtNDE4NC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo0MTg1OiAqIEVuYWJsZS9kaXNhYmxlIGxvb3BiYWNrIG9uIGEgZ2l2ZW4gcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy00MTg2LSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jPTE2ODE9c3RhdGljIGludCBpZ2Jfc2V0dXBfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTcyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jOjE3MjY6XHRcdC8qIFVuc2V0IHNpZ2RldGVjdCBmb3IgU0VSREVTIGxvb3BiYWNrIG9uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0xNzI3LVx0XHQgKiA4MjU4MCBhbmQgbmV3ZXIgZGV2aWNlcy5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYz0xNzUxPXN0YXRpYyB2b2lkIGlnYl9sb29wYmFja19jbGVhbnVwKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0xNzYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmM6MTc2NDpcdFx0LyogRGlzYWJsZSBuZWFyIGVuZCBsb29wYmFjayBvbiBESDg5eHhDQyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTc2NS1cdFx0cmVnID0gcmQzMihFMTAwMF9NUEhZX0FERFJfQ1RMKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM9MTA2MzI9c3RhdGljIGludCBpeGdiZV9jb25maWd1cmVfYnJpZGdlX21vZGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTEwNjc2LVx0XHQvKiBkaXNhYmxlIFJ4IHNvdXJjZSBhZGRyZXNzIHBydW5pbmcsIHNpbmNlIHdlIGRvbiYjMzk7dCBleHBlY3QgdG9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYzoxMDY3NzpcdFx0ICogYmUgcmVjZWl2aW5nIGV4dGVybmFsIGxvb3BiYWNrIG9mIG91ciB0cmFuc21pdHRlZCBmcmFtZXMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTA2NzgtXHRcdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcnguYz01MDU9c3RhdGljIHZvaWQgdmFsaWRhdGVfbG9vcGJhY2soc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdm9pZCAqdmEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jLTUxNC1cdC8qIExvb3BiYWNrIGZvdW5kICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmM6NTE1Olx0cHJpdi1cdTAwM2Vsb29wYmFja19vayA9IDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmMtNTE2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM9ODA9c3RhdGljIGludCBtbHg0X2VuX3Rlc3RfbG9vcGJhY2soc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6ODI6XHR1MzIgbG9vcGJhY2tfb2sgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTgzLVx0aW50IGk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmMtODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6ODU6ICAgICAgICBwcml2LVx1MDAzZWxvb3BiYWNrX29rID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04Ni1cdHByaXYtXHUwMDNldmFsaWRhdGVfbG9vcGJhY2sgPSAxO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy05OC1cdFx0bXNsZWVwKE1MWDRfRU5fTE9PUEJBQ0tfVElNRU9VVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6OTk6XHRcdGlmIChwcml2LVx1MDAzZWxvb3BiYWNrX29rKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6MTAwOlx0XHRcdGxvb3BiYWNrX29rID0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy0xMDEtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTEwMy1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYzoxMDQ6XHRpZiAoIWxvb3BiYWNrX29rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTEwNS1cdFx0ZW5fZXJyKHByaXYsIFwmIzM0O0xvb3BiYWNrIHBhY2tldCBkaWRuJiMzOTt0IGFycml2ZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTExMS1cdG1seDRfZW5fdXBkYXRlX2xvb3BiYWNrX3N0YXRlKHByaXYtXHUwMDNlZGV2LCBwcml2LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6MTEyOlx0cmV0dXJuICFsb29wYmFja19vaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy0xMTMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oPTUyOT1zdHJ1Y3QgbWx4NF9lbl9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaC01NTUtXHR1MzIgbXNnX2VuYWJsZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oOjU1NjpcdHUzMiBsb29wYmFja19vaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oLTU1Ny1cdHUzMiB2YWxpZGF0ZV9sb29wYmFjaztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9MjAwPXN0YXRpYyBNTFg1RV9ERUNMQVJFX1NUQVRTX0dSUF9PUF9VUERBVEVfU1RBVFModnBvcnRfcmVwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYy0yNzEtXHRcdHJlcF9zdGF0cy1cdTAwM2V2cG9ydF9sb29wYmFja19ieXRlcyA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6MjcyOlx0XHRcdE1MWDVfR0VUX0NUUihvdXQsIGxvY2FsX2xvb3BiYWNrLm9jdGV0cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtMjczLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jPTE1MD1zdHJ1Y3QgbWx4NWVfbGJ0X3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE1Mi1cdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoxNTM6XHRib29sIGxvb3BiYWNrX29rO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTU0LVx0Ym9vbCBsb2NhbF9sYjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0xNTg9bWx4NWVfdGVzdF9sb29wYmFja192YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE5My1cdC8qIGJpbmdvICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoxOTQ6XHRsYnRwLVx1MDAzZWxvb3BiYWNrX29rID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE5NS1cdGNvbXBsZXRlKFx1MDAyNmxidHAtXHUwMDNlY29tcCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9MjAxPXN0YXRpYyBpbnQgbWx4NWVfdGVzdF9sb29wYmFja19zZXR1cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yMjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoyMjE6XHRsYnRwLVx1MDAzZWxvb3BiYWNrX29rID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yMjItXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bGJ0cC1cdTAwM2Vjb21wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0yNjE9c3RhdGljIGludCBtbHg1ZV90ZXN0X2xvb3BiYWNrKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI3NS1cdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoyNzY6XHRsYnRwLVx1MDAzZWxvb3BiYWNrX29rID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yNzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMjk3LVx0d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmxidHAtXHUwMDNlY29tcCwgTUxYNUVfTEJfVkVSSUZZX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM6Mjk4Olx0ZXJyID0gIWxidHAtXHUwMDNlbG9vcGJhY2tfb2s7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yOTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmM9NzczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY291bnRlcl9kZXNjIHZwb3J0X2xvb3BiYWNrX3N0YXRzX2Rlc2NbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy03NzYtXHR7IFwmIzM0O3Zwb3J0X2xvb3BiYWNrX2J5dGVzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmM6Nzc3Olx0XHRWUE9SVF9DT1VOVEVSX09GRihsb2NhbF9sb29wYmFjay5vY3RldHMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy03NzgtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDc3MD1tbHhzd19zcDFfcmlmX2lwaXBfbGJfY29uZmlndXJlKHN0cnVjdCBtbHhzd19zcF9yaWYgKnJpZixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc4NS1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDc4NjpcdFx0Z290byBlcnJfbG9vcGJhY2tfb3A7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc4Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc5Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjEwNzkzOmVycl9sb29wYmFja19vcDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwNzk0LVx0bWx4c3dfc3BfdnJfcHV0KG1seHN3X3NwLCB1bF92cik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA5NzM9bWx4c3dfc3AyX3JpZl9pcGlwX2xiX2NvbmZpZ3VyZShzdHJ1Y3QgbWx4c3dfc3BfcmlmICpyaWYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5ODgtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA5ODk6XHRcdGdvdG8gZXJyX2xvb3BiYWNrX29wO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDk5NjplcnJfbG9vcGJhY2tfb3A6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDk5Ny1cdG1seHN3X3NwX3VsX3JpZl9wdXQodWxfcmlmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmM9NzAwPWludCBlZjRfc2VsZnRlc3Qoc3RydWN0IGVmNF9uaWMgKmVmeCwgc3RydWN0IGVmNF9zZWxmX3Rlc3RzICp0ZXN0cyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmMtNzM0LVx0LyogT2ZmbGluZSAoaS5lLiBkaXNydXB0aXZlKSB0ZXN0aW5nXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmM6NzM1Olx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jLTczNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYz02OTM9aW50IGVmeF9zZWxmdGVzdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jLTcyNy1cdC8qIE9mZmxpbmUgKGkuZS4gZGlzcnVwdGl2ZSkgdGVzdGluZ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmM6NzI4Olx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNzI5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jPTY5OD1pbnQgZWZ4X3NpZW5hX3NlbGZ0ZXN0KHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmMtNzMyLVx0LyogT2ZmbGluZSAoaS5lLiBkaXNydXB0aXZlKSB0ZXN0aW5nXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYzo3MzM6XHQgKiBUaGlzIGNoZWNrcyBNQUMgYW5kIFBIWSBsb29wYmFjayBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYy03MzQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL2Nhc3NpbmkuaC0xOTg5LSNkZWZpbmUgIFJFR19QQ1NfU0VSREVTX0NUUkwgICAgICAgICAgICAgIDB4OTA1NCAvKiBzZXJkZXMgY29udHJvbCByZWcgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9jYXNzaW5pLmg6MTk5MDojZGVmaW5lICAgIFBDU19TRVJERVNfQ1RSTF9MT09QQkFDSyAgICAgICAweDAxICAgLyogZW5hYmxlIGxvb3BiYWNrIG9uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vY2Fzc2luaS5oLTE5OTEtXHRcdFx0XHRcdFx0ICAgIHNlcmRlcyBpbnRlcmZhY2UgKi9cbi0tXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTE2Nj1zdGF0aWMgdm9pZCBsb29wYmFja19kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtMTcwLVxuZHJpdmVycy9uZXQvbG9vcGJhY2suYzoxNzE6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsb29wYmFja19vcHMgPSB7XG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTE3Mi1cdC5uZG9faW5pdCAgICAgICAgPSBsb29wYmFja19kZXZfaW5pdCxcbi0tXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTIxNz1zdGF0aWMgdm9pZCBsb29wYmFja19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtMjE5LVx0Z2VuX2xvX3NldHVwKGRldiwgKDY0ICogMTAyNCksIFx1MDAyNmxvb3BiYWNrX2V0aHRvb2xfb3BzLCBcdTAwMjZldGhfaGVhZGVyX29wcyxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6MjIwOlx0XHQgICAgIFx1MDAyNmxvb3BiYWNrX29wcywgbG9vcGJhY2tfZGV2X2ZyZWUpO1xuZHJpdmVycy9uZXQvbG9vcGJhY2suYy0yMjEtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jPTQ3PWVudW0gaGR4X2xvb3BiYWNrIHtcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjQ4Olx0aGR4X2xvb3BiYWNrX29uID0gMCxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjQ5Olx0aGR4X2xvb3BiYWNrX29mZiA9IDEsXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy01MC19O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jPTE1MD1zdGF0aWMgaW50IG5zX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmMtMTU1LVx0ICovXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYzoxNTY6XHRuc18xMF9iYXNlX3RfaGR4X2xvb3BhY2socGh5ZGV2LCBoZHhfbG9vcGJhY2tfb2ZmKTtcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jLTE1Ny1cdHJldHVybiBuc19hY2tfaW50ZXJydXB0KHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmM9MTE2Nj1zdGF0aWMgaW50IHJ0bDgxODdfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHJhZGlvX2lkeCwgdTMyIGNoYW5nZWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmMtMTE3My1cdHJlZyA9IHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgXHUwMDI2cHJpdi1cdTAwM2VtYXAtXHUwMDNlVFhfQ09ORik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bDgxOHgvcnRsODE4Ny9kZXYuYzoxMTc0Olx0LyogRW5hYmxlIFRYIGxvb3BiYWNrIG9uIE1BQyBsZXZlbCB0byBhdm9pZCBUWCBkdXJpbmcgY2hhbm5lbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmMtMTE3NS1cdCAqIGNoYW5nZXMsIGFzIHRoaXMgaGFzIGJlIHNlZW4gdG8gY2F1c2VzIHByb2JsZW1zIGFuZCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTG9vcGJhY2sgYW5kIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGxpbmUgaW4gdGhlIGBkcml2ZXJzL25ldC9NYWtlZmlsZWA6IGBvYmotJChDT05GSUdfTkVUKSAmIzQzOz0gbG9vcGJhY2sub2AuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24ga2lja3MgaW4uIEl0JiMzOTtzIGNsZWFyIHRoYXQgaWYgYENPTkZJR19ORVRgIGlzIHNldCwgdGhlIGxvb3BiYWNrIGRyaXZlciwgYGxvb3BiYWNrLmNgLCBnZXRzIGluY2x1ZGVkLiBTaW1wbGUgZW5vdWdoLCB0aGF0JiMzOTtzIHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLiBOb3csIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGNvZGUsIHNvIGxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLgoKTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgc2tiX29ycGhhbl9mcmFnc19yeGAuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGUgY29uY2VwdCBvZiBTS0JzIGFuZCB0aGVpciBmcmFnbWVudHMgaW4gbmV0d29yayBkYXRhLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIGtlcm5lbCBoYW5kbGVzIG9ycGhhbiBmcmFnbWVudHMsIHBhcnRpY3VsYXJseSBvbiByZWNlaXZlLiBJdCYjMzk7cyBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkbyBhIHF1aWNrIGdyZXAgc2VhcmNoIGZvciBgc2tiX29ycGhhbl9mcmFnc19yeGAuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcGJhY2sgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCByaWdodCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfb3JwaGFuX2ZyYWdzX3J4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0PTI2MT1sb29wYmFjayByZXN0cmljdGlvbiBjYW4gYmUgdGVtcG9yYXJpbHkgcmVsYXhlZCBieSBtYWtpbmdcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjI2Mjpza2Jfb3JwaGFuX2ZyYWdzX3J4IGlkZW50aWNhbCB0byBza2Jfb3JwaGFuX2ZyYWdzLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3QtMjYzLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdD0yMTk9bXNnX3plcm9jb3B5LnNoIOiEmuacrOWcqOi3qOWRveWQjeepuumXtOeahOiZmuaLn+S7peWkque9ke+8iHZldGjvvInlr7nkuYvpl7Tov5DooYzml7bvvIzmtYvor5XlsIbkuI3kvJrmmL7npLrlh7rku7vkvZXmgKfog71cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdDoyMjA65o+Q5Y2H44CC5Li65LqG5L6/5LqO5rWL6K+V77yM5Y+v5Lul6YCa6L+H6K6pIHNrYl9vcnBoYW5fZnJhZ3Nfcngg5LiOIHNrYl9vcnBoYW5fZnJhZ3Mg55u45ZCM77yM5p2l5pqC5pe25pS+5a69XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3QtMjIxLeeOr+WbnumZkOWItuOAglxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM9NzA9c3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTc4LVx0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJiMzOTtzXG5kcml2ZXJzL25ldC9sb29wYmFjay5jOjc5Olx0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTgwLVx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODUtXHQgKi9cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6ODY6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuZHJpdmVycy9uZXQvbG9vcGJhY2suYy04Ny1cdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMDU5PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMTA3LVxuZHJpdmVycy9uZXQvdHVuLmM6MTEwODpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0xMTA5LVx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDM4PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDQ3LS8qIEZyYWdzIG11c3QgYmUgb3JwaGFuZWQsIGV2ZW4gaWYgcmVmY291bnRlZCwgaWYgc2tiIG1pZ2h0IGxvb3AgdG8gcnggcGF0aCAqL1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDQ4OnN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Nfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDkte1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGV2LmM9MjUxMT1zdGF0aWMgaW50IGRlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtMjUxNC17XG5uZXQvY29yZS9kZXYuYzoyNTE1Olx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpXG5uZXQvY29yZS9kZXYuYy0yNTE2LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvY29yZS9kZXYuYz0yNTc0PXZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMjYzMC1cdGlmIChwdF9wcmV2KSB7XG5uZXQvY29yZS9kZXYuYzoyNjMxOlx0XHRpZiAoIXNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiMiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9kZXYuYy0yNjMyLVx0XHRcdHB0X3ByZXYtXHUwMDNlZnVuYyhza2IyLCBza2ItXHUwMDNlZGV2LCBwdF9wcmV2LCBza2ItXHUwMDNlZGV2KTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01NzEzPXZvaWQgX19za2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NzUzLVxubmV0L2NvcmUvc2tidWZmLmM6NTc1NDpcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkge1xubmV0L2NvcmUvc2tidWZmLmMtNTc1NS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTIyOT1zdGF0aWMgaW50IGlwX2xvY2FsX2RlbGl2ZXJfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzAte1xubmV0L2lwdjQvaXBfaW5wdXQuYzoyMzE6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzItXHRcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7XG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTI0PXN0YXRpYyBpbnQgaXA2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTUyNS17XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MjY6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xubmV0L2lwdjYvaXA2X2lucHV0LmMtNTI3LVx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3BiYWNrIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24gYW5kIGhvdyB0aGUgbG9vcGJhY2sgbWVjaGFuaXNtIGZ1bmN0aW9ucyB1bmRlciB0aGUgaG9vZC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBsb29wYmFjayBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgYGxvYCBpbnRlcmZhY2UsIGlzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5IG5ldHdvcmsgbmFtZXNwYWNlLiBXaGVuIGRhdGEgaXMgdHJhbnNtaXR0ZWQgdmlhIGBsb2AsIHRoZSBmbG93IGdvZXMgcmlnaHQgdGhyb3VnaCBgbG9vcGJhY2tfeG1pdGAsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBmdW5jdGlvbiBib3VuZCB0byBgZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RhcnRfeG1pdGAuCgpOb3csIHRoYXQgcGF0Y2guLi4gaXQmIzM5O3MgYWRkaW5nIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB3aXRoaW4gYGxvb3BiYWNrX3htaXRgLiBUaGUgcHVycG9zZSBoZXJlIGlzIHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBBRl9QQUNLRVQgVFggcmluZyB6ZXJvY29weSBmcmFnbWVudHMgd2hlbiBwYWNrZXRzIGFyZSwgd2VsbCwgbG9vcGVkIGJhY2suIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcHJldmVudHMgYSByYWNlLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgYGxvb3BiYWNrX3htaXRgLiBJcyBpdCBhIHN0YXRpYyBmdW5jdGlvbiwgb3IgaXMgaXQgZXhwb3J0ZWQgaW4gc29tZSB3YXk/IEFoLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdCguLi4pYC4gU28sIGl0JiMzOTtzIHNjb3BlZCB3aXRoaW4gdGhlIGZpbGUuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaXMgYnVpbHQgaXMgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGluIC5jIGZpbGVzICphcmUqIHN0aWxsIG5vcm1hbCBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBVbmxlc3MgaW5saW5lZCwgd2hpY2ggaXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlLCB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnQgYGxvb3BiYWNrX29wcy5uZG9fc3RhcnRfeG1pdCA9IGxvb3BiYWNrX3htaXRgIHNob3VsZCBiZSBlbm91Z2ggdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBlbGltaW5hdGluZyBpdCBhcyBkZWFkIGNvZGUuCgpGaW5hbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbG9vcGJhY2tfb3BzYCB3aXRoaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgIHRvIGdyYXNwIHRoZSByb2xlIG9mIGBsb29wYmFja194bWl0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9sb29wYmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcbiAxNjY6XHRzdGF0aWMgdm9pZCBsb29wYmFja19kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDE2NzpcdHtcbiAxNjg6XHRcdGRldl9uZXQoZGV2KS1cdTAwM2Vsb29wYmFja19kZXYgPSBOVUxMO1xuIDE2OTpcdH1cbiAxNzA6XHRcbiAxNzE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvb3BiYWNrX29wcyA9IHtcbiAxNzI6XHRcdC5uZG9faW5pdCAgICAgICAgPSBsb29wYmFja19kZXZfaW5pdCxcbiAxNzM6XHRcdC5uZG9fc3RhcnRfeG1pdCAgPSBsb29wYmFja194bWl0LFxuIDE3NDpcdFx0Lm5kb19nZXRfc3RhdHM2NCA9IGxvb3BiYWNrX2dldF9zdGF0czY0LFxuIDE3NTpcdFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsXG4gMTc2Olx0fTtcbiAxNzc6XHRcbiAxNzg6XHRzdGF0aWMgdm9pZCBnZW5fbG9fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAxNzk6XHRcdFx0XHQgdW5zaWduZWQgaW50IG10dSxcbiAxODA6XHRcdFx0XHQgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpldGhfb3BzLFxuIDE4MTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyAqaGRyX29wcyxcbiAxODI6XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpkZXZfb3BzLFxuIDE4MzpcdFx0XHRcdCB2b2lkICgqZGV2X2Rlc3RydWN0b3IpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpKVxuIDE4NDpcdHtcbiAxODU6XHRcdGRldi1cdTAwM2VtdHVcdFx0PSBtdHU7XG4gMTg2Olx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuXHQ9IEVUSF9ITEVOO1x0LyogMTRcdCovXG4gMTg3Olx0XHRkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW5cdD0gRVRIX0hMRU47XHQvKiAxNFx0Ki9cbiAxODg6XHRcdGRldi1cdTAwM2VhZGRyX2xlblx0XHQ9IEVUSF9BTEVOO1x0LyogNlx0Ki9cbiAxODk6XHRcdGRldi1cdTAwM2V0eXBlXHRcdD0gQVJQSFJEX0xPT1BCQUNLO1x0LyogMHgwMDAxKi9cbiAxOTA6XHRcdGRldi1cdTAwM2VmbGFnc1x0XHQ9IElGRl9MT09QQkFDSztcbiAxOTE6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzXHRcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFIHwgSUZGX05PX1FVRVVFO1xuIDE5MjpcdFx0ZGV2LVx1MDAzZWxsdHhcdFx0PSB0cnVlO1xuIDE5MzpcdFx0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZVx0PSB0cnVlO1xuIDE5NDpcdFx0bmV0aWZfa2VlcF9kc3QoZGV2KTtcbiAxOTU6XHRcdGRldi1cdTAwM2Vod19mZWF0dXJlc1x0PSBORVRJRl9GX0dTT19TT0ZUV0FSRTtcbiAxOTY6XHRcdGRldi1cdTAwM2VmZWF0dXJlc1x0XHQ9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUXG4gMTk3Olx0XHRcdHwgTkVUSUZfRl9HU09fU09GVFdBUkVcbiAxOTg6XHRcdFx0fCBORVRJRl9GX0hXX0NTVU1cbiAxOTk6XHRcdFx0fCBORVRJRl9GX1JYQ1NVTVxuIDIwMDpcdFx0XHR8IE5FVElGX0ZfU0NUUF9DUkNcbiAyMDE6XHRcdFx0fCBORVRJRl9GX0hJR0hETUFcbiAyMDI6XHRcdFx0fCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxuIDIwMzpcdFx0XHR8IE5FVElGX0ZfTE9PUEJBQ0s7XG4gMjA0Olx0XHRkZXYtXHUwMDNlZXRodG9vbF9vcHNcdD0gZXRoX29wcztcbiAyMDU6XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzXHRcdD0gaGRyX29wcztcbiAyMDY6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzXHRcdD0gZGV2X29wcztcbiAyMDc6XHRcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldlx0PSB0cnVlO1xuIDIwODpcdFx0ZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlXHQ9IE5FVERFVl9QQ1BVX1NUQVRfTFNUQVRTO1xuIDIwOTpcdFx0ZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3Rvclx0PSBkZXZfZGVzdHJ1Y3RvcjtcbiAyMTA6XHRcbiAyMTE6XHRcdG5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LCBHU09fTUFYX1NJWkUpO1xuIDIxMjpcdH1cbiAyMTM6XHRcbiAyMTQ6XHQvKiBUaGUgbG9vcGJhY2sgZGV2aWNlIGlzIHNwZWNpYWwuIFRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYGxvb3BiYWNrX3htaXRgIGFzIGEgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBsb29wYmFja194bWl0YCBpcyBiZWluZyB1c2VkIGFzIHRoZSBgLm5kb19zdGFydF94bWl0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIGluZm9ybWF0aW9uLCBpdCBsb29rcyBwcm9taXNpbmcuCgoqICAgWWVzLCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIHdpdGhpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0OyBtb2RpZnlpbmcgY29yZSBjb2RlIGlzIGFsd2F5cyBhIGhpZ2gtdmFsdWUgdGFyZ2V0LgoqICAgVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IHdpdGhvdXQgcmVxdWlyaW5nIGFueSBzcGVjaWFsIGhhcmR3YXJlIGlzIGFsc28gZXhjZWxsZW50LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgc2V0dXAgY29uc2lkZXJhYmx5LiBMZXNzIGVmZm9ydCBtZWFucyBtb3JlIGVmZmVjdGl2ZSBmdXp6aW5nIHJ1bnMuCiogICBOb3csIHRoZSBrZXkgcGFydDogaXQgaGFuZGxlcyBvcnBoYW5pbmcgemVyb2NvcHkgZnJhZ3MgaW4gYGxvb3BiYWNrX3htaXRgLiBUaGlzIGFsdGVyYXRpb24gb2YgaG93IHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXMgcHJvY2Vzc2VkIGR1cmluZyBsb29wYmFjayB0cmFuc21pc3Npb24gaXMgZXhhY3RseSB0aGUga2luZCBvZiBpbnRyaWNhdGUgZGF0YSBoYW5kbGluZyB0aGF0IG9mdGVuIHJldmVhbHMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgb3IgbG9naWMgZXJyb3JzIGR1cmluZyBmdXp6aW5nLiBUaGlzIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGNyYXNoZXMuJiMzNDsKKiAgIFRoZSBmb2NhbCBwb2ludCBpcywgb2YgY291cnNlLCBgbG9vcGJhY2tfeG1pdGAgaXRzZWxmLiBUaGF0JiMzOTtzIG91ciB0YXJnZXQuCiogICBGaW5hbGx5LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgdGhlIGBORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBsb29wYmFjay4gSSBzaG91bGQgZG91YmxlIGNoZWNrLCB0aG91Z2gsIGFuZCB2ZXJpZnkgaWYgb3RoZXIgY29uZmlndXJhdGlvbnMsIGxpa2UgYE5FVERFVklDRVNgLCBhcmUgYWxzbyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX01ESU8pICYjNDM7PSBtZGlvLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVQpICYjNDM7PSBsb29wYmFjay5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfTkVUQ09OU09MRSkgJiM0Mzs9IG5ldGNvbnNvbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEcml2ZXIgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbmV0d29yayBkcml2ZXJzIGFyZSBiZWluZyBjb21waWxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgdG9wLWxldmVsIGJ1aWxkIHJ1bGVzIGZvciB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnkgYXJlIHR5cGljYWxseSBkZWZpbmVkLiBUaGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5IHByb2JhYmx5IGhhcyBpdHMgb3duIE1ha2VmaWxlLCBidXQgdGhlIHBhcmVudCBvbmUgc2hvdWxkIGdpdmUgbWUgdGhlIGJpZyBwaWN0dXJlLCBlc3BlY2lhbGx5IGluIGhvdyBgQ09ORklHX05FVGAgYWZmZWN0cyB0aGluZ3MuCgpJJiMzOTttIGJldHRpbmcgdGhlIG1ha2VmaWxlIHdpbGwgaGF2ZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSBleHBlY3QgdG8gc2VlIHNvbWV0aGluZyBsaWtlIGBvYmotJChDT05GSUdfTkVUKSAmIzQzOz0gbmV0L2Agb3Igc2ltaWxhci4gSWYgaXQgKmlzKiBzZXQgdXAgdGhhdCB3YXksIHRoZSBleGlzdGVuY2UgYW5kIHZhbHVlIG9mIHRoZSBgQ09ORklHX05FVGAga2NvbmZpZyB2YXJpYWJsZSB3aWxsIGRpcmVjdGx5IGNvbnRyb2wgd2hldGhlciB0aGUgYG5ldC9gIHN1YmRpcmVjdG9yeSAoYW5kIGl0cyBjb250ZW50cywgaS5lLiwgdGhlIG5ldHdvcmsgZHJpdmVycykgYXJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzZWN0aW9uIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXQvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19TTElNQlVTKVx0XHQmIzQzOz0gc2xpbWJ1cy9cbmRyaXZlcnMvTWFrZWZpbGU6OTI6b2JqLXlcdFx0XHRcdCYjNDM7PSBuZXQvXG5kcml2ZXJzL01ha2VmaWxlLTkzLW9iai0kKENPTkZJR19BVE0pXHRcdCYjNDM7PSBhdG0vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzU2CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTG9vcGJhY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIG1ha2VmaWxlcyBhcmUgdGVsbGluZyBtZSB0aGF0IGluY2x1ZGluZyBgbmV0L2AgaW4gYGRyaXZlcnMvTWFrZWZpbGVgIGFsb25nIHdpdGggYG9iai0kKENPTkZJR19ORVQpICYjNDM7PSBsb29wYmFjay5vYCBpbiBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIG1lYW5zIGBORVRgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIHRoZSBsb29wYmFjayBkcml2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIHdob2xlIHBpY3R1cmUuCgpMZXQmIzM5O3Mgc2Vl4oCmIE5vIG90aGVyIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMgc2VlbSByZWxldmFudCwgbG9va2luZyBhdCBgc2tiX29ycGhhbl9mcmFnc19yeGAsIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGlzIG5vdCBpbXBvcnRhbnQgaGVyZSwgYW5kIGBsb29wYmFja194bWl0YCBpcyBpbmRlZWQgaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLgoKVGhlcmVmb3JlLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIG9ubHkgYGxvb3BiYWNrX3htaXRgIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgTkVUYCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGluc3RydWN0aW9ucyBpbmRpY2F0ZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAgYmVjYXVzZSB0aGlzIGNvZGUgYWx0ZXJzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBldmVuIHdoZW4gdXNpbmcgemVyb2NvcHkgcGFja2V0cy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdmVyaWZ5IHRoaXMgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lcy4gUmVhY2hhYmlsaXR5IGlzIGNsZWFybHkgdW5pdmVyc2FsIGJlY2F1c2UgbG9vcGJhY2sgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBMaW51eCBuZXR3b3JrIHN0YWNrLiBUaGUgYFdvcnRoRnV6emluZ2AgcHJvcGVydHkgaXMgY29uZmlybWVkLiBgRm9jdXNTeW1ib2xzYCBpcyBjb3JyZWN0LCBwb2ludGluZyB0byB0aGUgZW50cnlwb2ludCBvZiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLiBBbmQgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYE5FVGAsIG5vIHByZWZpeCBpcyBuZWVkZWQuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGNyeXN0YWwgY2xlYXIuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BiYWNrX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvb3BiYWNrX3htaXRgIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBvcnBoYW4gemVyb2NvcHkgc2tiIGZyYWdtZW50cyAoYHNrYl9vcnBoYW5fZnJhZ3NfcnhgKSBiZWZvcmUgaW52b2tpbmcgYHNrYl9vcnBoYW4oKWAsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi9yYWNlIGNvbmRpdGlvbnMgd2hlbiB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGUuZy4sIHdpdGggQUZfUEFDS0VUIFRYIHJpbmdzKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wYmFja194bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb29wYmFja194bWl0YCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gb3JwaGFuIHplcm9jb3B5IHNrYiBmcmFnbWVudHMgKGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCkgYmVmb3JlIGludm9raW5nIGBza2Jfb3JwaGFuKClgLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24vcmFjZSBjb25kaXRpb25zIHdoZW4gdHJhbnNtaXR0aW5nIHBhY2tldHMgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChlLmcuLCB3aXRoIEFGX1BBQ0tFVCBUWCByaW5ncykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGluIGBsb29wYmFja194bWl0KClgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB6ZXJvY29weSBmcmFncyAoZS5nLiBBRl9QQUNLRVQgVFggcmluZykgYmVpbmcgbW9kaWZpZWQgYnkgdXNlcnNwYWNlIGJlZm9yZSB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLlxuXG5ObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGUgYWxsb2NhdGVkIHBhZ2VzIGZvciBmcmFnIGNvcHlpbmcgYXJlIGZ1bGx5IHdyaXR0ZW4gYnkgYG1lbWNweWAgd2l0aGluIGBza2JfY29weV91YnVmcygpYC4gQW55IGZhaWx1cmUgcGF0aHMgc2FmZWx5IGRyb3AgdGhlIHBhY2tldCB2aWEgYGtmcmVlX3NrYl9yZWFzb24oKWAuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdhcnJhbnRpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTE6MzE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwppbmRleCAxZmI2Y2U2ODQzYWRlLi4zMWFlMTBhOWQ3OTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKQEAgLTcyLDYgJiM0Mzs3MiwyMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWludCBsZW47CiAKJiM0MzsJLyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJiMzOTtzIGRlc3RydWN0b3IsIHdoaWNoCiYjNDM7CSAqIGZvciBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzIG1hcmtzIHRoZSBzbG90IGFzIFRQX1NUQVRVU19BVkFJTEFCTEUKJiM0MzsJICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0CiYjNDM7CSAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCYjMzk7cwomIzQzOwkgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCwKJiM0MzsJICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlcwomIzQzOwkgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZQomIzQzOwkgKiBvbGQgZGF0YSBnZXRzIGNvcGllZCBvdXQuCiYjNDM7CSAqCiYjNDM7CSAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHsKJiM0MzsJCWRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7CiYjNDM7CQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7CiYjNDM7CQlyZXR1cm4gTkVUREVWX1RYX09LOwomIzQzOwl9CiYjNDM7CiAJc2tiX3R4X3RpbWVzdGFtcChza2IpOwogCiAJLyogZG8gbm90IGZvb2wgbmV0X3RpbWVzdGFtcF9jaGVjaygpIHdpdGggdmFyaW91cyBjbG9jayBiYXNlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NgoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDM1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3BiYWNrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgc2VlIGEgcGF0Y2ggbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWFkIHRoZSBjb2RlIGluIHRoZSBjb250ZXh0IG9mIGl0cyBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBgbG9vcGJhY2suY2AsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgemVyby1jb3B5IGZyYWcgaGFuZGxpbmcgaW4gdGhlIHRyYW5zbWl0IHBhdGggYW5kIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlY2VpdmUgcGF0aCBpcyBkZWZlcnJlZCwgcGVyaGFwcyBkdWUgdG8gUlBTIHN0ZWVyaW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgY29kZSBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaCB3aXRoIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvb3BiYWNrIGRldmljZS4gSXQgbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IHRoZSBgc2tiX29ycGhhbigpYCBkZXN0cnVjdG9yIGFuZCBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzLCB3aGljaCBsaWtlbHkgdXNlcyBhIHNoYXJlZCBtZW1vcnkgcmVnaW9uIHdpdGggdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSByYWNlIGNvbmRpdGlvbiBtaWdodCBiZSBoYXBwZW5pbmc6IHRoZSBkZXN0cnVjdG9yIG1ha2VzIHRoZSBidWZmZXIgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSBhZ2FpbiwgYnV0IHRoZSByZWNlaXZlIHBhdGggbWlnaHQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBkYXRhIGluIHRoZSBmcmFnLgoKVGhlIGZpeCwgaXQgc2VlbXMsIGlzIHRoZSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgLiBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaXQgYXBwZWFycyB0aGVyZSYjMzk7cyBhIHByb2JsZW0gKGxpa2VseSBhIGNvcHkgZmFpbHVyZSksIGFuZCB0aGUgcGFja2V0IGlzIGRyb3BwZWQsIGluZGljYXRlZCBieSB0aGUgaW5jcmVtZW50IG9mIGEgZHJvcHBlZCBzdGF0cyBjb3VudGVyIGFuZCBhIGNhbGwgdG8gYGtmcmVlX3NrYl9yZWFzb25gLiBPdGhlcndpc2UsIHRoZSBjb2RlIHByb2NlZWRzIG5vcm1hbGx5IGFuZCBhZGRzIGEgdGltZXN0YW1wLgoKVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBvcmRlcmluZyBhbmQgd2hhdCBleGFjdGx5IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCBkb2VzLiBJdCYjMzk7cyBsaWtlbHkgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIHRha2VuLCB3aGljaCBpcyB0aGUgZml4LiBUaGUgdXNlIG9mIGBHRlBfQVRPTUlDYCBpcyBpbXBvcnRhbnQgaGVyZSBhcyBpdCBpbmRpY2F0ZXMgdGhlIGFsbG9jYXRpb24gbXVzdCBiZSBub24tYmxvY2tpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIGF0b21pYyBvciBub3QuIFRoaXMgaXMgbGlrZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIHRoZSBjcnV4IG9mIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZC4gSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCByaWdodCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0LyogYmxhY2tob2xlX25ldGRldiAtIGEgZGV2aWNlIHVzZWQgZm9yIGRzdHMgdGhhdCBhcmUgbWFya2VkIGV4cGlyZWQhXG4gIDYxOlx0ICogVGhpcyBpcyBnbG9iYWwgZGV2aWNlIChpbnN0ZWFkIG9mIHBlci1uZXQtbnMpIHNpbmNlIGl0JiMzOTtzIG5vdCBuZWVkZWRcbiAgNjI6XHQgKiB0byBiZSBwZXItbnMgYW5kIGdldHMgaW5pdGlhbGl6ZWQgYXQgYm9vdCB0aW1lLlxuICA2MzpcdCAqL1xuICA2NDpcdHN0cnVjdCBuZXRfZGV2aWNlICpibGFja2hvbGVfbmV0ZGV2O1xuICA2NTpcdEVYUE9SVF9TWU1CT0woYmxhY2tob2xlX25ldGRldik7XG4gIDY2Olx0XG4gIDY3Olx0LyogVGhlIGhpZ2hlciBsZXZlbHMgdGFrZSBjYXJlIG9mIG1ha2luZyB0aGlzIG5vbi1yZWVudHJhbnQgKGl0JiMzOTtzXG4gIDY4Olx0ICogY2FsbGVkIHdpdGggYmgmIzM5O3MgZGlzYWJsZWQpLlxuICA2OTpcdCAqL1xuICA3MDpcdHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gIDcxOlx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNzI6XHR7XG4gIDczOlx0XHRpbnQgbGVuO1xuICA3NDpcdFxuICA3NTpcdFx0LyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJiMzOTtzIGRlc3RydWN0b3IsIHdoaWNoXG4gIDc2Olx0XHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXG4gIDc3Olx0XHQgKiBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc3RpbGwgaGFzIHplcm9jb3B5IGZyYWdzIHBvaW50aW5nIHRvIGl0IHRoYXRcbiAgNzg6XHRcdCAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCYjMzk7c1xuICA3OTpcdFx0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG4gIDgwOlx0XHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXG4gIDgxOlx0XHQgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZVxuICA4MjpcdFx0ICogb2xkIGRhdGEgZ2V0cyBjb3BpZWQgb3V0LlxuICA4MzpcdFx0ICpcbiAgODQ6XHRcdCAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LlxuICA4NTpcdFx0ICovXG4gIDg2Olx0XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuICA4NzpcdFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuICA4ODpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XG4gIDg5Olx0XHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gIDkwOlx0XHR9XG4gIDkxOlx0XG4gIDkyOlx0XHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4gIDkzOlx0XG4gIDk0Olx0XHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXG4gIDk1Olx0XHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XG4gIDk2Olx0XG4gIDk3Olx0XHRza2Jfb3JwaGFuKHNrYik7XG4gIDk4Olx0XG4gIDk5Olx0XHQvKiBCZWZvcmUgcXVldWVpbmcgdGhpcyBwYWNrZXQgdG8gX19uZXRpZl9yeCgpLFxuIDEwMDpcdFx0ICogbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkLlxuIDEwMTpcdFx0ICovXG4gMTAyOlx0XHRza2JfZHN0X2ZvcmNlKHNrYik7XG4gMTAzOlx0XG4gMTA0Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gMTA1Olx0XG4gMTA2Olx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIDEwNzpcdFx0aWYgKGxpa2VseShfX25ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKVxuIDEwODpcdFx0XHRkZXZfbHN0YXRzX2FkZChkZXYsIGxlbik7XG4gMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9vcnBoYW5fZnJhZ3NfcngmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q9MjYxPWxvb3BiYWNrIHJlc3RyaWN0aW9uIGNhbiBiZSB0ZW1wb3JhcmlseSByZWxheGVkIGJ5IG1ha2luZ1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q6MjYyOnNrYl9vcnBoYW5fZnJhZ3NfcnggaWRlbnRpY2FsIHRvIHNrYl9vcnBoYW5fZnJhZ3MuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yNjMtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0PTIxOT1tc2dfemVyb2NvcHkuc2gg6ISa5pys5Zyo6Leo5ZG95ZCN56m66Ze055qE6Jma5ouf5Lul5aSq572R77yIdmV0aO+8ieWvueS5i+mXtOi/kOihjOaXtu+8jOa1i+ivleWwhuS4jeS8muaYvuekuuWHuuS7u+S9leaAp+iDvVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjIyMDrmj5DljYfjgILkuLrkuobkvr/kuo7mtYvor5XvvIzlj6/ku6XpgJrov4forqkgc2tiX29ycGhhbl9mcmFnc19yeCDkuI4gc2tiX29ycGhhbl9mcmFncyDnm7jlkIzvvIzmnaXmmoLml7bmlL7lrr1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yMjEt546v5Zue6ZmQ5Yi244CCXG4tLVxuZHJpdmVycy9uZXQvbG9vcGJhY2suYz03MD1zdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtNzgtXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgmIzM5O3NcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6Nzk6XHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODAtXHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXG4tLVxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy04NS1cdCAqL1xuZHJpdmVycy9uZXQvbG9vcGJhY2suYzo4NjpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTg3LVx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExMDctXG5kcml2ZXJzL25ldC90dW4uYzoxMTA4Olx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDktXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0Mzg9c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDctLyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM0NDg6c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFnc19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ0OS17XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcbi0tXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTItXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDo0MTM6XHQgKiBlLmcuLCB2aWEgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkgb3Igc2tiX29ycGhhbl9mcmFnc19yeCgpXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXHQgKi9cbi0tXG5uZXQvY29yZS9kZXYuYz0yNTExPXN0YXRpYyBpbnQgZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy0yNTE0LXtcbm5ldC9jb3JlL2Rldi5jOjI1MTU6XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSlcbm5ldC9jb3JlL2Rldi5jLTI1MTYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI1NzQ9dm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0yNjMwLVx0aWYgKHB0X3ByZXYpIHtcbm5ldC9jb3JlL2Rldi5jOjI2MzE6XHRcdGlmICghc2tiX29ycGhhbl9mcmFnc19yeChza2IyLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL2Rldi5jLTI2MzItXHRcdFx0cHRfcHJldi1cdTAwM2VmdW5jKHNrYjIsIHNrYi1cdTAwM2VkZXYsIHB0X3ByZXYsIHNrYi1cdTAwM2VkZXYpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU3MTM9dm9pZCBfX3NrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTU3NTMtXG5uZXQvY29yZS9za2J1ZmYuYzo1NzU0Olx0XHRpZiAoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSB7XG5uZXQvY29yZS9za2J1ZmYuYy01NzU1LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMC17XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjIzMTpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMi1cdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz01MjQ9c3RhdGljIGludCBpcDZfaW5wdXRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTI1LXtcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjUyNjpcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MjctXHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZGVjbGFyYXRpb24sIHRoZSBjcnVjaWFsIGJ1aWxkaW5nIGJsb2NrIHRoYXQgb3RoZXIgZnVuY3Rpb25zIGRlcGVuZCBvbi4gSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBvcnBoYW4gZnJhZ21lbnRzIGluIHRoZSByZWNlaXZlIHBhdGguIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29yayBzdGFjayYjMzk7cyBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IHByb2Nlc3Nlcy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDM1Olx0ICpcdG93bmVyKSBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgZnJhZyBhbmQgcmVsZWFzZSB0aGUgb3JpZ2luYWxcbjM0MzY6XHQgKlx0cGFnZSBieSBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yLlxuMzQzNzpcdCAqL1xuMzQzODpcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4zNDM5Olx0e1xuMzQ0MDpcdFx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxuMzQ0MTpcdFx0XHRyZXR1cm4gMDtcbjM0NDI6XHRcdGlmIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IFNLQkZMX0RPTlRfT1JQSEFOKVxuMzQ0MzpcdFx0XHRyZXR1cm4gMDtcbjM0NDQ6XHRcdHJldHVybiBza2JfY29weV91YnVmcyhza2IsIGdmcF9tYXNrKTtcbjM0NDU6XHR9XG4zNDQ2Olx0XG4zNDQ3Olx0LyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXG4zNDQ4Olx0c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFnc19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbjM0NDk6XHR7XG4zNDUwOlx0XHRpZiAobGlrZWx5KCFza2JfemNvcHkoc2tiKSkpXG4zNDUxOlx0XHRcdHJldHVybiAwO1xuMzQ1MjpcdFx0cmV0dXJuIHNrYl9jb3B5X3VidWZzKHNrYiwgZ2ZwX21hc2spO1xuMzQ1MzpcdH1cbjM0NTQ6XHRcbjM0NTU6XHQvKipcbjM0NTY6XHQgKlx0X19za2JfcXVldWVfcHVyZ2VfcmVhc29uIC0gZW1wdHkgYSBsaXN0XG4zNDU3Olx0ICpcdEBsaXN0OiBsaXN0IHRvIGVtcHR5XG4zNDU4Olx0ICpcdEByZWFzb246IGRyb3AgcmVhc29uXG4zNDU5Olx0ICpcbjM0NjA6XHQgKlx0RGVsZXRlIGFsbCBidWZmZXJzIG9uIGFuIFx1MDAyNnNrX2J1ZmYgbGlzdC4gRWFjaCBidWZmZXIgaXMgcmVtb3ZlZCBmcm9tXG4zNDYxOlx0ICpcdHRoZSBsaXN0IGFuZCBvbmUgcmVmZXJlbmNlIGRyb3BwZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0aGVcbjM0NjI6XHQgKlx0bGlzdCBsb2NrIGFuZCB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcmVsZXZhbnQgbG9ja3MgdG8gdXNlIGl0LlxuMzQ2MzpcdCAqL1xuMzQ2NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbjM0NjU6XHRcdFx0XHRcdFx0ICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbjM0NjY6XHR7XG4zNDY3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMzQ2ODpcdFxuMzQ2OTpcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKVxuMzQ3MDpcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbjM0NzE6XHR9XG4zNDcyOlx0XG4zNDczOlx0c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG4zNDc0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc2tiX2NvcHlfdWJ1ZnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYHNrYl9jb3B5X3VidWZzYCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGRldGFpbHMgb2YgaG93IHVzZXItc3BhY2UgYnVmZmVycyBnZXQgY29waWVkIGludG8gU0tCcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGlmIGl0JiMzOTtzIGEgemVyby1jb3B5IG1lY2hhbmlzbSBvciBpbmN1cnMgYSB0cmFkaXRpb25hbCBjb3B5LiBJJiMzOTttIGFsc28gaW50ZXJlc3RlZCBpbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gY29weWluZyBmcm9tIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdXNpbmcgc2NhdHRlci1nYXRoZXIgdG8gaW1wcm92ZSBETUEgZWZmaWNpZW5jeSwgZXNwZWNpYWxseSBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgaW52b2x2ZWQgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGludGVycnVwdCBjb250ZXh0cy4gV2hhdCBraW5kIG9mIG1lbW9yeSBiYXJyaWVycyBvciBhdG9taWNzIGFyZSB1c2VkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlcz8gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBwYXJ0aWN1bGFyIG5ldHdvcmsgY2FyZHMgb3IgYnVmZmVyIHNpemVzLiBJbiBteSBoZWFkLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBsaWtlbHkgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgc2tiX2NvcHlfdWJ1ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNDM4PXZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTQzOTppbnQgc2tiX2NvcHlfdWJ1ZnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNDQwLXN0cnVjdCBza19idWZmICpza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgcHJpb3JpdHkpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5NjU9c3RhdGljIGludCBza2JfemVyb2NvcHlfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpvcmlnLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5OTktICovXG5uZXQvY29yZS9za2J1ZmYuYzoyMDAwOmludCBza2JfY29weV91YnVmcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbm5ldC9jb3JlL3NrYnVmZi5jLTIwMDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYHNrYl9jb3B5X3VidWZzYCBmdW5jdGlvbjoKCioqRGl2aW5nIGludG8gc2tiX2NvcHlfdWJ1ZnMqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgYHNrYl9jb3B5X3VidWZzYCBmcm9tIGBuZXQvY29yZS9za2J1ZmYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEl0JiMzOTtzIG9idmlvdXNseSBpbnZvbHZlZCBpbiBjb3B5aW5nIFVzZXIgQnVmZmVyIEZyYW1lcyAoVUJ1ZnMpIHdpdGhpbiBhbiBTS0IsIHNvIHRoaXMgaXMgY3JpdGljYWwgZm9yIGVmZmljaWVuY3kgd2hlbiBwYXNzaW5nIGRhdGEgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UsIG9yIHdoZW4gY2xvbmluZyBTS0JzLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBkYXRhIHBvaW50ZXIsIGRhdGEgbGVuZ3RoLCBoZWFkcm9vbSwgYW5kIHRhaWxyb29tIGFkanVzdG1lbnRzLiBBcmUgdGhleSB1c2luZyBETUEtY2FwYWJsZSBidWZmZXJzLCBvciBpcyBpdCBhbHdheXMgQ1BVIGNvcGllcz8gV2hhdCYjMzk7cyB0aGUgc3RyYXRlZ3kgaWYgYSBjb3B5IG9mIHRoZSB1YnVmIGlzIG5lZWRlZD8gSXMgaXQgY29weWluZyB0aGUgdWJ1Ziwgb3IgbWFraW5nIHRoZSBTS0IgcG9pbnQgdG8gdGhlIHNhbWUgVUJ1ZiwgaW5jcmVhc2luZyB0aGUgcmVmZXJlbmNlIGNvdW50LCBvciB1c2luZyB0aGUgZGF0YSBhcyBhIENPVyBidWZmZXI/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgbG9naWMsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbXBsaWNhdGlvbnMsIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzLCB0b28uIFdlIGRvbiYjMzk7dCB3YW50IGFueSBtZW1vcnkgbGVha3Mgb3IgdW5leHBlY3RlZCBzZWdtZW50YXRpb24gZmF1bHRzIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgbG9ja2luZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW4gZGVwdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMDA6XHRpbnQgc2tiX2NvcHlfdWJ1ZnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4yMDAxOlx0e1xuMjAwMjpcdFx0aW50IG51bV9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbjIwMDM6XHRcdHN0cnVjdCBwYWdlICpwYWdlLCAqaGVhZCA9IE5VTEw7XG4yMDA0Olx0XHRpbnQgaSwgb3JkZXIsIHBzaXplLCBuZXdfZnJhZ3M7XG4yMDA1Olx0XHR1MzIgZF9vZmY7XG4yMDA2Olx0XG4yMDA3Olx0XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuMjAwODpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwMDk6XHRcbjIwMTA6XHRcdGlmIChza2Jfc2hhcmVkKHNrYikgfHwgc2tiX3VuY2xvbmUoc2tiLCBnZnBfbWFzaykpXG4yMDExOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjAxMjpcdFxuMjAxMzpcdFx0aWYgKCFudW1fZnJhZ3MpXG4yMDE0Olx0XHRcdGdvdG8gcmVsZWFzZTtcbjIwMTU6XHRcbjIwMTY6XHRcdC8qIFdlIG1pZ2h0IGhhdmUgdG8gYWxsb2NhdGUgaGlnaCBvcmRlciBwYWdlcywgc28gY29tcHV0ZSB3aGF0IG1pbmltdW1cbjIwMTc6XHRcdCAqIHBhZ2Ugb3JkZXIgaXMgbmVlZGVkLlxuMjAxODpcdFx0ICovXG4yMDE5Olx0XHRvcmRlciA9IDA7XG4yMDIwOlx0XHR3aGlsZSAoKFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpICogTUFYX1NLQl9GUkFHUyBcdTAwM2MgX19za2JfcGFnZWxlbihza2IpKVxuMjAyMTpcdFx0XHRvcmRlciYjNDM7JiM0Mzs7XG4yMDIyOlx0XHRwc2l6ZSA9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbjIwMjM6XHRcbjIwMjQ6XHRcdG5ld19mcmFncyA9IChfX3NrYl9wYWdlbGVuKHNrYikgJiM0MzsgcHNpemUgLSAxKSBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpO1xuMjAyNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmV3X2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuMjAyNjpcdFx0XHRwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9DT01QLCBvcmRlcik7XG4yMDI3Olx0XHRcdGlmICghcGFnZSkge1xuMjAyODpcdFx0XHRcdHdoaWxlIChoZWFkKSB7XG4yMDI5Olx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqbmV4dCA9IChzdHJ1Y3QgcGFnZSAqKXBhZ2VfcHJpdmF0ZShoZWFkKTtcbjIwMzA6XHRcdFx0XHRcdHB1dF9wYWdlKGhlYWQpO1xuMjAzMTpcdFx0XHRcdFx0aGVhZCA9IG5leHQ7XG4yMDMyOlx0XHRcdFx0fVxuMjAzMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjAzNDpcdFx0XHR9XG4yMDM1Olx0XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgKHVuc2lnbmVkIGxvbmcpaGVhZCk7XG4yMDM2Olx0XHRcdGhlYWQgPSBwYWdlO1xuMjAzNzpcdFx0fVxuMjAzODpcdFxuMjAzOTpcdFx0cGFnZSA9IGhlYWQ7XG4yMDQwOlx0XHRkX29mZiA9IDA7XG4yMDQxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZnJhZ3M7IGkmIzQzOyYjNDM7KSB7XG4yMDQyOlx0XHRcdHNrYl9mcmFnX3QgKmYgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4yMDQzOlx0XHRcdHUzMiBwX29mZiwgcF9sZW4sIGNvcGllZDtcbjIwNDQ6XHRcdFx0c3RydWN0IHBhZ2UgKnA7XG4yMDQ1Olx0XHRcdHU4ICp2YWRkcjtcbjIwNDY6XHRcbjIwNDc6XHRcdFx0c2tiX2ZyYWdfZm9yZWFjaF9wYWdlKGYsIHNrYl9mcmFnX29mZihmKSwgc2tiX2ZyYWdfc2l6ZShmKSxcbjIwNDg6XHRcdFx0XHRcdCAgICAgIHAsIHBfb2ZmLCBwX2xlbiwgY29waWVkKSB7XG4yMDQ5Olx0XHRcdFx0dTMyIGNvcHksIGRvbmUgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgc2tiX2NvcHlfdWJ1ZnNgIEZ1cnRoZXIqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSByZXN0IG9mIGBza2JfY29weV91YnVmc2AuIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgc2V0dXAsIGFuZCBub3cgSSBuZWVkIHRvIGZsZXNoIG91dCB0aGUgZnVuY3Rpb24gaW4gbXkgbWluZC4gV2hhdCBhcmUgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGNvcHlpbmcgdXNlci1zcGFjZSBidWZmZXJzIGludG8gYW4gYHNrYmA/IFdlJiMzOTt2ZSBnb3QgdGhlIGRhdGEgcG9pbnRlciwgdGhlIGxlbmd0aCwgYW5kIHRoZSBkZXN0aW5hdGlvbiBgc2tiYCBhbGwgcHJlcHBlZCwgYnV0IHdoYXQgaGFwcGVucyAqd2l0aGluKiB0aGlzIGNydWNpYWwgZnVuY3Rpb24/CgpJJiMzOTttIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggaXQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBsaWtlbHkgc29tZSBraW5kIG9mIGxvb3Agb3IgaXRlcmF0aXZlIHByb2Nlc3MgdG8gaGFuZGxlIHBvdGVudGlhbGx5IGZyYWdtZW50ZWQgdXNlci1zcGFjZSBtZW1vcnkuIFdlIGNhbiYjMzk7dCBhc3N1bWUgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgYmxvY2ssIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNsZXZlcm5lc3MgbGllcyBpbiB0aGVzZSBrZXJuZWwgZnVuY3Rpb25zLiBIb3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIG51YW5jZXMgb2YgcGFnZSBmYXVsdHMgYW5kIGFjY2VzcyBwZXJtaXNzaW9ucyB3aGVuIHJlYWRpbmcgZnJvbSB1c2VyIHNwYWNlPyBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyBmb3IgY29tbW9uIHNpemVzIG9yIGFsaWdubWVudCBzY2VuYXJpb3M/IEFyZSB0aGV5IHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBjb3B5PyBEb2VzIGl0IGdyYWNlZnVsbHkgaGFuZGxlIHBhcnRpYWwgY29waWVzLCBvciBkb2VzIGl0IGJhaWwgb3V0PwoKSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBhdGggaW4gbWFueSBuZXR3b3JraW5nIG9wZXJhdGlvbnMsIHNvIGV2ZXJ5IGluc3RydWN0aW9uIGNvdW50cy4gRG9lcyBpdCBlbXBsb3kgYW55IGNsZXZlciB0cmlja3MgbGlrZSBwcmVmZXRjaGluZywgb3IgcGVyaGFwcyB1c2UgYSBkZWRpY2F0ZWQgRE1BIGVuZ2luZSB0byBieXBhc3MgdGhlIENQVT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnQsIHBlcmhhcHMgdXNpbmcgdmVjdG9yIGluc3RydWN0aW9ucyBvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaWYgYXZhaWxhYmxlPwoKUmlnaHQgbm93IEkmIzM5O20gZm9ybXVsYXRpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYXMgSSBjb25zaWRlciB0aGUgZnVuY3Rpb24gY2FsbC4gV2l0aCBteSBmYW1pbGlhcml0eSBvZiBrZXJuZWwgY29kZSwgSSBhbnRpY2lwYXRlIHRoZSBuZWVkIGZvciBzYWZldHkgY2hlY2tzIHRvIGVuc3VyZSB0aGUgdmFsaWRpdHkgb2YgdGhlIHVzZXItc3BhY2UgcG9pbnRlcnMgYW5kIHRoZSByZXF1ZXN0ZWQgY29weSBzaXplLCBhcyB3ZWxsIGFzIGNvbnNpZGVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcy4gVGltZSB0byBzdGFydCBnb2luZyBkZWVwZXIgYW5kIGFuYWx5emluZyB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA1MDpcdFx0XHRcdHZhZGRyID0ga21hcF9hdG9taWMocCk7XG4yMDUxOlx0XG4yMDUyOlx0XHRcdFx0d2hpbGUgKGRvbmUgXHUwMDNjIHBfbGVuKSB7XG4yMDUzOlx0XHRcdFx0XHRpZiAoZF9vZmYgPT0gcHNpemUpIHtcbjIwNTQ6XHRcdFx0XHRcdFx0ZF9vZmYgPSAwO1xuMjA1NTpcdFx0XHRcdFx0XHRwYWdlID0gKHN0cnVjdCBwYWdlICopcGFnZV9wcml2YXRlKHBhZ2UpO1xuMjA1NjpcdFx0XHRcdFx0fVxuMjA1NzpcdFx0XHRcdFx0Y29weSA9IG1pbl90KHUzMiwgcHNpemUgLSBkX29mZiwgcF9sZW4gLSBkb25lKTtcbjIwNTg6XHRcdFx0XHRcdG1lbWNweShwYWdlX2FkZHJlc3MocGFnZSkgJiM0MzsgZF9vZmYsXG4yMDU5Olx0XHRcdFx0XHQgICAgICAgdmFkZHIgJiM0MzsgcF9vZmYgJiM0MzsgZG9uZSwgY29weSk7XG4yMDYwOlx0XHRcdFx0XHRkb25lICYjNDM7PSBjb3B5O1xuMjA2MTpcdFx0XHRcdFx0ZF9vZmYgJiM0Mzs9IGNvcHk7XG4yMDYyOlx0XHRcdFx0fVxuMjA2MzpcdFx0XHRcdGt1bm1hcF9hdG9taWModmFkZHIpO1xuMjA2NDpcdFx0XHR9XG4yMDY1Olx0XHR9XG4yMDY2Olx0XG4yMDY3Olx0XHQvKiBza2IgZnJhZ3MgcmVsZWFzZSB1c2Vyc3BhY2UgYnVmZmVycyAqL1xuMjA2ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2ZyYWdzOyBpJiM0MzsmIzQzOylcbjIwNjk6XHRcdFx0c2tiX2ZyYWdfdW5yZWYoc2tiLCBpKTtcbjIwNzA6XHRcbjIwNzE6XHRcdC8qIHNrYiBmcmFncyBwb2ludCB0byBrZXJuZWwgYnVmZmVycyAqL1xuMjA3MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmV3X2ZyYWdzIC0gMTsgaSYjNDM7JiM0MzspIHtcbjIwNzM6XHRcdFx0X19za2JfZmlsbF9uZXRtZW1fZGVzYyhza2IsIGksIHBhZ2VfdG9fbmV0bWVtKGhlYWQpLCAwLCBwc2l6ZSk7XG4yMDc0Olx0XHRcdGhlYWQgPSAoc3RydWN0IHBhZ2UgKilwYWdlX3ByaXZhdGUoaGVhZCk7XG4yMDc1Olx0XHR9XG4yMDc2Olx0XHRfX3NrYl9maWxsX25ldG1lbV9kZXNjKHNrYiwgbmV3X2ZyYWdzIC0gMSwgcGFnZV90b19uZXRtZW0oaGVhZCksIDAsXG4yMDc3Olx0XHRcdFx0ICAgICAgIGRfb2ZmKTtcbjIwNzg6XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyA9IG5ld19mcmFncztcbjIwNzk6XHRcbjIwODA6XHRyZWxlYXNlOlxuMjA4MTpcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgZmFsc2UpO1xuMjA4MjpcdFx0cmV0dXJuIDA7XG4yMDgzOlx0fVxuMjA4NDpcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3B5X3VidWZzKTtcbjIwODU6XHRcbjIwODY6XHQvKipcbjIwODc6XHQgKlx0c2tiX2Nsb25lXHQtXHRkdXBsaWNhdGUgYW4gc2tfYnVmZlxuMjA4ODpcdCAqXHRAc2tiOiBidWZmZXIgdG8gY2xvbmVcbjIwODk6XHQgKlx0QGdmcF9tYXNrOiBhbGxvY2F0aW9uIHByaW9yaXR5XG4yMDkwOlx0ICpcbjIwOTE6XHQgKlx0RHVwbGljYXRlIGFuIFx1MDAyNnNrX2J1ZmYuIFRoZSBuZXcgb25lIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldC4gQm90aFxuMjA5MjpcdCAqXHRjb3BpZXMgc2hhcmUgdGhlIHNhbWUgcGFja2V0IGRhdGEgYnV0IG5vdCBzdHJ1Y3R1cmUuIFRoZSBuZXdcbjIwOTM6XHQgKlx0YnVmZmVyIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLiBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscyB0aGVcbjIwOTQ6XHQgKlx0ZnVuY3Rpb24gcmV0dXJucyAlTlVMTCBvdGhlcndpc2UgdGhlIG5ldyBidWZmZXIgaXMgcmV0dXJuZWQuXG4yMDk1Olx0ICpcbjIwOTY6XHQgKlx0SWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgZ2ZwX21hc2soKSBtdXN0IGJlXG4yMDk3Olx0ICpcdCVHRlBfQVRPTUlDLlxuMjA5ODpcdCAqL1xuMjA5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ0CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDcxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3BiYWNrIEludGVyZmFjZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbG9vcGJhY2tfeG1pdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZSBrZXkgY2hhbmdlIGlzIGFkZGluZyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZCBhbmQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLgoKVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHByb2JsZW06ICBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIGFuZCB6ZXJvLWNvcHkgZnJhZ3MgZnJvbSB1c2Vyc3BhY2UgKGxpa2UgQUZfUEFDS0VUIFRYIHJpbmdzKSwgYHNrYl9vcnBoYW5gIHdhcyBydW5uaW5nIHRoZSBzb2NrZXQmIzM5O3MgZGVzdHJ1Y3RvciBwcmVtYXR1cmVseS4gVGhpcyBtZWFudCB1c2VyIHNwYWNlIGNvdWxkIG92ZXJ3cml0ZSB0aGUgbWVtb3J5IHRoZSBgc2tiYCYjMzk7cyBmcmFncyB3ZXJlIHBvaW50aW5nIHRvICpiZWZvcmUqIHRoZSBsb29wZWQtYmFjayBwYWNrZXQgd2FzIGFjdHVhbGx5IHByb2Nlc3NlZCwgbGVhZGluZyB0byBkYXRhIGNvcnJ1cHRpb24uIFRoZSBgc2tiX29ycGhhbl9mcmFnc19yeGAgZnVuY3Rpb24gaXMgdGhlcmUgdG8gcHJldmVudCB0aGlzLiBJdCBjb3BpZXMgdGhlIHVzZXItc3BhY2UgZnJhZ3MgaW50byBrZXJuZWwgcGFnZXMgYmVmb3JlIG9ycGhhbmluZyB0aGUgYHNrYmAuIElmIHRoaXMgY29weSBmYWlscyAoYWxsb2NhdGlvbiBvciBmYXVsdCksIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb3VudGVycy4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLTVNBTiBpbXBsaWNhdGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCBjb21tb24gS01TQU4gc2NlbmFyaW9zOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHb29kLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOby4gYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIG9wZXJhdGVzIG9uICppbml0aWFsaXplZCogYHNrYmAgZmllbGRzIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgdGhhdCB3ZSBoYW5kbGUuIFNvLCBubyByaXNrIHRoZXJlLgozLiAgKipBbGxvY2F0aW9uL0luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogT2theSwgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoaXMgb25lIGNhcmVmdWxseS4gYHNrYl9jb3B5X3VidWZzYCBnZXRzIGNhbGxlZCBpbiBgc2tiX29ycGhhbl9mcmFnc19yeGAuIE5ld2x5IGFsbG9jYXRlZCBwYWdlcyAqYXJlKiBmaWxsZWQgd2l0aCBgbWVtY3B5YCBmcm9tIHVzZXIgZnJhZ3MuIFRoZSBwYXRjaCBleHBsaWNpdGx5IHByZXZlbnRzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIG5vIGlzc3VlIGhlcmUuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgc291bmQuIFdlIGFyZSBub3QgYWNjZXNzaW5nIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuCjUuICAqKkRhdGEgUmFjZXMqKjogWWVzLCB0aGlzIGFjdHVhbGx5ICpmaXhlcyogdGhlIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdXNlciBzcGFjZSBvdmVyd3JpdGluZyBtZW1vcnkuCgpTbywgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0IHNlZW1zIHRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4LCBidXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZXhwbGljaXRseSBjb3B5aW5nIHRoZSByZWxldmFudCB1c2VyLXNwYWNlIGRhdGEgYmVmb3JlIGFueSBvcnBoYW5pbmcgb2NjdXJzLCBwcmV2ZW50aW5nIGFjY2VzcyB0byBwb3RlbnRpYWxseSBmcmVlZCBtZW1vcnkuIEV2ZW4gdGhlIGVycm9yIHBhdGgsIHdoZXJlIHRoZSBjb3B5IGZhaWxzLCBjb3JyZWN0bHkgZHJvcHMgdGhlIHBhY2tldC4KCk9rYXksIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaW4gYGxvb3BiYWNrX3htaXRgOgoKYGBgYwomIzQzOwlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkgewomIzQzOwkJZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUKTsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KYGBgCgpUaGlzIGlzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuIHdlIHNlZSBpbiBwbGFjZXMgc3VjaCBhcyBgdHVuX25ldF94bWl0YC4gVGhlcmUgaXMgYWJzb2x1dGVseSBub3RoaW5nIHRoYXQgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCkluIGNvbmNsdXNpb246ICoqTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuKiogVGhpcyBpcyBhIGZpeCBmb3IgbWVtb3J5IHNhZmV0eSBhbmQgYSByYWNlIGNvbmRpdGlvbiwgYnV0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgY29uY2VybmVkIGFib3V0LiBUaGUgY29kZSBpcyBjbGVhbiBhbmQgcHJvcGVybHkgaGFuZGxlcyBhbGwgY2FzZXMuIFRoaXMgaXMgYSBzb2xpZCBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgaW4gYGxvb3BiYWNrX3htaXQoKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHplcm9jb3B5IGZyYWdzIChlLmcuIEFGX1BBQ0tFVCBUWCByaW5nKSBiZWluZyBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYmVmb3JlIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZSBhbGxvY2F0ZWQgcGFnZXMgZm9yIGZyYWcgY29weWluZyBhcmUgZnVsbHkgd3JpdHRlbiBieSBgbWVtY3B5YCB3aXRoaW4gYHNrYl9jb3B5X3VidWZzKClgLiBBbnkgZmFpbHVyZSBwYXRocyBzYWZlbHkgZHJvcCB0aGUgcGFja2V0IHZpYSBga2ZyZWVfc2tiX3JlYXNvbigpYC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYCBpbiBgbG9vcGJhY2tfeG1pdCgpYCBiZWZvcmUgYHNrYl9vcnBoYW4oc2tiKWAgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdpdGggemVyb2NvcHkgZnJhZ3MgKGUuZy4gQUZfUEFDS0VUIFRYIHJpbmcpIGJlaW5nIG1vZGlmaWVkIGJ5IHVzZXJzcGFjZSBiZWZvcmUgdGhlIHBhY2tldCBpcyByZWNlaXZlZC5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzE6NTQuOTA1MTEwMjU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3MzQ1NjUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcGJhY2tfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgaW4gYGxvb3BiYWNrX3htaXQoKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHplcm9jb3B5IGZyYWdzIChlLmcuIEFGX1BBQ0tFVCBUWCByaW5nKSBiZWluZyBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYmVmb3JlIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9vcGJhY2tfeG1pdGAgaW4gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgIHRvIG9ycGhhbiB6ZXJvY29weSBza2IgZnJhZ21lbnRzIChgc2tiX29ycGhhbl9mcmFnc19yeGApIGJlZm9yZSBpbnZva2luZyBgc2tiX29ycGhhbigpYCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uL3JhY2UgY29uZGl0aW9ucyB3aGVuIHRyYW5zbWl0dGluZyBwYWNrZXRzIG92ZXIgdGhlIGxvb3BiYWNrIGludGVyZmFjZSAoZS5nLiwgd2l0aCBBRl9QQUNLRVQgVFggcmluZ3MpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMxOjU0LjkwNTExNzM0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NzI2OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDExOjMxOjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jXFxuaW5kZXggMWZiNmNlNjg0M2FkZS4uMzFhZTEwYTlkNzkxMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jXFxuKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xcbkBAIC03Miw2ICs3MiwyMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB7XFxuIFxcdGludCBsZW47XFxuIFxcbitcXHQvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2IncyBkZXN0cnVjdG9yLCB3aGljaFxcbitcXHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXFxuK1xcdCAqIGFnYWluLCBldmVuIHRob3VnaCBpdCBzdGlsbCBoYXMgemVyb2NvcHkgZnJhZ3MgcG9pbnRpbmcgdG8gaXQgdGhhdFxcbitcXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgnc1xcbitcXHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcXG4rXFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xcbitcXHQgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZVxcbitcXHQgKiBvbGQgZGF0YSBnZXRzIGNvcGllZCBvdXQuXFxuK1xcdCAqXFxuK1xcdCAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG4rXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4rXFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQpO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbitcXHR9XFxuK1xcbiBcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuIFxcbiBcXHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMxOjU1LjQ4MDUzODgyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM0Mzg3NzI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcGJhY2tfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb29wYmFja194bWl0YCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gb3JwaGFuIHplcm9jb3B5IHNrYiBmcmFnbWVudHMgKGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCkgYmVmb3JlIGludm9raW5nIGBza2Jfb3JwaGFuKClgLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24vcmFjZSBjb25kaXRpb25zIHdoZW4gdHJhbnNtaXR0aW5nIHBhY2tldHMgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChlLmcuLCB3aXRoIEFGX1BBQ0tFVCBUWCByaW5ncykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTYxZTU0MjhlY2U3YzRhN2FmMGIwMzMxNGI5N2NiM2RlMTdhZjQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTozMTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jXG5pbmRleCAxZmI2Y2U2ODQzYWRlLi4zMWFlMTBhOWQ3OTExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xuKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xuQEAgLTcyLDYgKzcyLDIzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4ge1xuIFx0aW50IGxlbjtcbiBcbitcdC8qIFRoZSBza2Jfb3JwaGFuKCkgYmVsb3cgd2lsbCBydW4gdGhlIHNrYidzIGRlc3RydWN0b3IsIHdoaWNoXG4rXHQgKiBmb3IgQUZfUEFDS0VUIFRYLXJpbmcgc2VuZGVycyBtYXJrcyB0aGUgc2xvdCBhcyBUUF9TVEFUVVNfQVZBSUxBQkxFXG4rXHQgKiBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgc3RpbGwgaGFzIHplcm9jb3B5IGZyYWdzIHBvaW50aW5nIHRvIGl0IHRoYXRcbitcdCAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCdzXG4rXHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcbitcdCAqIGZvciBleGFtcGxlIGJ5IFJQUyBzdGVlcmluZyB0aGUgcGFja2V0IHRvIGFub3RoZXIgQ1BVLCB0aGlzIGNyZWF0ZXNcbitcdCAqIGEgcmFjZSB3aGVyZSB1c2Vyc3BhY2UgbWF5IGZpbGwgaW4gbmV3IGRhdGEgaW50byB0aGUgZnJhZyBiZWZvcmUgdGhlXG4rXHQgKiBvbGQgZGF0YSBnZXRzIGNvcGllZCBvdXQuXG4rXHQgKlxuK1x0ICogVGFrZSBhIGtlcm5lbC1wcml2YXRlIGNvcHkuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XG4rXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUKTtcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcdH1cbitcbiBcdHNrYl90eF90aW1lc3RhbXAoc2tiKTtcbiBcbiBcdC8qIGRvIG5vdCBmb29sIG5ldF90aW1lc3RhbXBfY2hlY2soKSB3aXRoIHZhcmlvdXMgY2xvY2sgYmFzZXMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMxOjU1LjQ4MDU0MDIzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwOTc5ODAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29wYmFjayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgcmV2aWV3IHJlcXVlc3QuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGRyaXZlcnMvbmV0L2xvb3BiYWNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb29wYmFja194bWl0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBkaWZmLiBBaCwgaXQgbG9va3MgbGlrZSBhIG5ldyBjb25kaXRpb25hbCBibG9jayBoYXMgYmVlbiBhZGRlZCB3aXRoaW4gdGhlIGBsb29wYmFja194bWl0YCBmdW5jdGlvbi4gVGhlIGNvZGUgbWVudGlvbnMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYXJpc2luZyBmcm9tIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBwYXJ0aWN1bGFybHkgd2l0aCBgQUZfUEFDS0VUYCBhbmQgemVyby1jb3B5IGZyYWdzLiBJIHNlZSBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgaXNzdWU6IGBza2Jfb3JwaGFuKClgIGlzIGJlaW5nIGNhbGxlZCBvbiB0aGUgdHJhbnNtaXQgcGF0aCBiZWZvcmUgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIGNvcGllZCBvdmVyIHRvIHRoZSByZWNlaXZlIHBhdGguIFRoaXMgY291bGQgYWxsb3cgdXNlcnNwYWNlIHRvIG92ZXJ3cml0ZSBkYXRhIGluIHRoZSBzaGFyZWQgbWVtb3J5LiBUaGUgY29kZSB1c2VzIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KClgIHRvIGFkZHJlc3MgdGhpcy5cblxuRXNzZW50aWFsbHksIGEga2VybmVsLXByaXZhdGUgY29weSBpcyB0YWtlbiB1c2luZyBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYCB0byBhdm9pZCB0aGUgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBJZiB0aGUgY29weSBmYWlscyAod2hpY2ggSSBzZWUgaXMgdW5saWtlbHkpLCB0aGVuIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCwgaW5kaWNhdGVkIGJ5IHRoZSBgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVGAgcmVhc29uLiBUaGlzIGFwcHJvYWNoIHNlZW1zIHJlYXNvbmFibGU7IGRyb3BwaW5nIHRoZSBwYWNrZXQgaXMgYmV0dGVyIHRoYW4gY29ycnVwdGluZyBkYXRhLlxuXG5Ob3csIGxldCBtZSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBzZWUgdGhlIGNvbnRleHQuIEknbGwgdXNlIHRoZSByZWFkLWZpbGUgdG9vbCB0byBncmFiIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDcyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSByZWdyZXNzaW9ucyBvciB1bmZvcmVzZWVuIHNpZGUgZWZmZWN0cy4gVGhlIHBhdGNoIHNlZW1zIHRhcmdldGVkIGFuZCB3ZWxsLWV4cGxhaW5lZCwgYnV0IEkgc3RpbGwgbmVlZCB0byB2ZXJpZnkgaXRzIGltcGFjdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgbG9vcGJhY2sgZHJpdmVyLiBJJ2xsIGFsc28gd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGJ1ZyByZXBvcnRzIG9yIGRpc2N1c3Npb25zIGFib3V0IHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjowMi41Nzg1MjY4MDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9sb29wYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcdC8qIEZvciB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUuICovXFxuICA1MTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYXJwLmhcXHUwMDNlXFx0LyogRm9yIEFSUEhSRF9FVEhFUiAqL1xcbiAgNTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICA1MzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICA1NDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICA1NTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0X3RzdGFtcC5oXFx1MDAzZVxcbiAgNTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICA1NzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuICA1ODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG4gIDU5OlxcdFxcbiAgNjA6XFx0LyogYmxhY2tob2xlX25ldGRldiAtIGEgZGV2aWNlIHVzZWQgZm9yIGRzdHMgdGhhdCBhcmUgbWFya2VkIGV4cGlyZWQhXFxuICA2MTpcXHQgKiBUaGlzIGlzIGdsb2JhbCBkZXZpY2UgKGluc3RlYWQgb2YgcGVyLW5ldC1ucykgc2luY2UgaXQncyBub3QgbmVlZGVkXFxuICA2MjpcXHQgKiB0byBiZSBwZXItbnMgYW5kIGdldHMgaW5pdGlhbGl6ZWQgYXQgYm9vdCB0aW1lLlxcbiAgNjM6XFx0ICovXFxuICA2NDpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYmxhY2tob2xlX25ldGRldjtcXG4gIDY1OlxcdEVYUE9SVF9TWU1CT0woYmxhY2tob2xlX25ldGRldik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdC8qIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCdzXFxuICA2ODpcXHQgKiBjYWxsZWQgd2l0aCBiaCdzIGRpc2FibGVkKS5cXG4gIDY5OlxcdCAqL1xcbiAgNzA6XFx0c3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNzI6XFx0e1xcbiAgNzM6XFx0XFx0aW50IGxlbjtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0LyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJ3MgZGVzdHJ1Y3Rvciwgd2hpY2hcXG4gIDc2OlxcdFxcdCAqIGZvciBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzIG1hcmtzIHRoZSBzbG90IGFzIFRQX1NUQVRVU19BVkFJTEFCTEVcXG4gIDc3OlxcdFxcdCAqIGFnYWluLCBldmVuIHRob3VnaCBpdCBzdGlsbCBoYXMgemVyb2NvcHkgZnJhZ3MgcG9pbnRpbmcgdG8gaXQgdGhhdFxcbiAgNzg6XFx0XFx0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJ3NcXG4gIDc5OlxcdFxcdCAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLFxcbiAgODA6XFx0XFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xcbiAgODE6XFx0XFx0ICogYSByYWNlIHdoZXJlIHVzZXJzcGFjZSBtYXkgZmlsbCBpbiBuZXcgZGF0YSBpbnRvIHRoZSBmcmFnIGJlZm9yZSB0aGVcXG4gIDgyOlxcdFxcdCAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC5cXG4gIDgzOlxcdFxcdCAqXFxuICA4NDpcXHRcXHQgKiBUYWtlIGEga2VybmVsLXByaXZhdGUgY29weS5cXG4gIDg1OlxcdFxcdCAqL1xcbiAgODY6XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG4gIDg3OlxcdFxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuICA4ODpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XFxuICA4OTpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIGRvIG5vdCBmb29sIG5ldF90aW1lc3RhbXBfY2hlY2soKSB3aXRoIHZhcmlvdXMgY2xvY2sgYmFzZXMgKi9cXG4gIDk1OlxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0c2tiX29ycGhhbihza2IpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQvKiBCZWZvcmUgcXVldWVpbmcgdGhpcyBwYWNrZXQgdG8gX19uZXRpZl9yeCgpLFxcbiAxMDA6XFx0XFx0ICogbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkLlxcbiAxMDE6XFx0XFx0ICovXFxuIDEwMjpcXHRcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDc6XFx0XFx0aWYgKGxpa2VseShfX25ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbiAxMDg6XFx0XFx0XFx0ZGV2X2xzdGF0c19hZGQoZGV2LCBsZW4pO1xcbiAxMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjAyLjU3ODYwNTEwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4Mjc3NjAzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIHJlbmRlcmVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTG9vcGJhY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGxvb3BiYWNrIGRldmljZSBzaXR1YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdDogbGV0J3MganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aGluZyBpcyBjb25maWd1cmVkLCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIGlmIGl0J3MgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgS2NvbmZpZyBzeW1ib2wgZm9yIGl0LCBvciBhdCBsZWFzdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFByb2JhYmx5IGJlc3QgdG8gc2VhcmNoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGZvciBcImxvb3BiYWNrXCIgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5UaGVuLCBvbmNlIEkndmUgZ290IHRoZSBjb25maWd1cmF0aW9uIHNvcnRlZCwgSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLiBJJ20gcHJldHR5IHN1cmUgaXQncyBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNvIEknbGwgc3RhcnQgYnkgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgYGRyaXZlcnMvbmV0L01ha2VmaWxlYCBhbmQgdGhlIGBuZXQvTWFrZWZpbGVgIGZpbGVzLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0eXBlcyBvZiBkZXZpY2UgZHJpdmVycyBhcmUgZGVjbGFyZWQuIEdyZXAgZm9yIFwibG9vcGJhY2suY1wiIChvciBzb21ldGhpbmcgc2ltaWxhcjsgbWlnaHQgYmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb24sIGJ1dCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCkgdG8gcGlucG9pbnQgdGhlIHNvdXJjZSBmaWxlLiBPbmNlIEkgaGF2ZSB0aGUgZmlsZSBuYW1lIEkgY2FuIHN0YXJ0IGxvb2tpbmcgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6MDYuNDA2MzY5MTYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA2NjA5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wYmFjay5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19NRElPKSArPSBtZGlvLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTkVUKSArPSBsb29wYmFjay5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjQtb2JqLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5ldGNvbnNvbGUub1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTEyNTY9c3RhdGljIHZvaWQgYWRfcnhfbWFjaGluZShzdHJ1Y3QgbGFjcGR1ICpsYWNwZHUsIHN0cnVjdCBwb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTEzNzktXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNihwb3J0LVxcdTAwM2VhY3Rvcl9zeXN0ZW0pKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoxMzgwOlxcdFxcdFxcdFxcdHNsYXZlX2Vycihwb3J0LVxcdTAwM2VzbGF2ZS1cXHUwMDNlYm9uZC1cXHUwMDNlZGV2LCBwb3J0LVxcdTAwM2VzbGF2ZS1cXHUwMDNlZGV2LCBcXFwiQW4gaWxsZWdhbCBsb29wYmFjayBvY2N1cnJlZCBvbiBzbGF2ZVxcXFxuXFxcIlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0xMzgxLVxcdFxcdFxcdFxcdFxcdCAgXFxcIkNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIHZlcmlmeSB0aGF0IGFsbCBhZGFwdGVycyBhcmUgY29ubmVjdGVkIHRvIDgwMi4zYWQgY29tcGxpYW50IHN3aXRjaCBwb3J0c1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTMzND1zdGF0aWMgYm9vbCBjYW5fc2tiX2luaXRfdmFsaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQ5LVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MzUwOlxcdFxcdC8qIHBlcmZvcm0gcHJvcGVyIGxvb3BiYWNrIG9uIGNhcGFibGUgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzUxLVxcdFxcdGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0VDSE8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZXRodG9vbC5jPTEzMTM9c3RhdGljIGludCBlMTAwMF9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5My1cXHRcXHRlMWVfd3BoeShodywgUEhZX1JFRyg3NzYsIDE4KSwgcGh5X3JlZyB8IDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM6MTM5NDpcXHRcXHQvKiBFbmFibGUgbG9vcGJhY2sgb24gdGhlIFBIWSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMTM5NS1cXHRcXHRlMWVfd3BoeShodywgSTgyNTc3X1BIWV9MQktfQ1RSTCwgMHg4MDAxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9jb21tb24uYz0xMzg4PWludCBpNDBlX2FxX3NldF9waHlfaW50X21hc2soc3RydWN0IGk0MGVfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jLTE0MTItICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfY29tbW9uLmM6MTQxMzogKiBFbmFibGUvZGlzYWJsZSBsb29wYmFjayBvbiBhIGdpdmVuIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfY29tbW9uLmMtMTQxNC0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9NDE2Mz1pY2VfYXFfc2V0X2V2ZW50X21hc2soc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnRfbnVtLCB1MTYgbWFzayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtNDE4NC0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6NDE4NTogKiBFbmFibGUvZGlzYWJsZSBsb29wYmFjayBvbiBhIGdpdmVuIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTQxODYtICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYz0xNjgxPXN0YXRpYyBpbnQgaWdiX3NldHVwX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTcyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYzoxNzI2OlxcdFxcdC8qIFVuc2V0IHNpZ2RldGVjdCBmb3IgU0VSREVTIGxvb3BiYWNrIG9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTcyNy1cXHRcXHQgKiA4MjU4MCBhbmQgbmV3ZXIgZGV2aWNlcy5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jPTE3NTE9c3RhdGljIHZvaWQgaWdiX2xvb3BiYWNrX2NsZWFudXAoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9ldGh0b29sLmMtMTc2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYzoxNzY0OlxcdFxcdC8qIERpc2FibGUgbmVhciBlbmQgbG9vcGJhY2sgb24gREg4OXh4Q0MgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0xNzY1LVxcdFxcdHJlZyA9IHJkMzIoRTEwMDBfTVBIWV9BRERSX0NUTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM9MTA2MzI9c3RhdGljIGludCBpeGdiZV9jb25maWd1cmVfYnJpZGdlX21vZGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMTA2NzYtXFx0XFx0LyogZGlzYWJsZSBSeCBzb3VyY2UgYWRkcmVzcyBwcnVuaW5nLCBzaW5jZSB3ZSBkb24ndCBleHBlY3QgdG9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MTA2Nzc6XFx0XFx0ICogYmUgcmVjZWl2aW5nIGV4dGVybmFsIGxvb3BiYWNrIG9mIG91ciB0cmFuc21pdHRlZCBmcmFtZXMuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTEwNjc4LVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jPTUwNT1zdGF0aWMgdm9pZCB2YWxpZGF0ZV9sb29wYmFjayhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LCB2b2lkICp2YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcnguYy01MTQtXFx0LyogTG9vcGJhY2sgZm91bmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmM6NTE1OlxcdHByaXYtXFx1MDAzZWxvb3BiYWNrX29rID0gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmMtNTE2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYz04MD1zdGF0aWMgaW50IG1seDRfZW5fdGVzdF9sb29wYmFjayhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jOjgyOlxcdHUzMiBsb29wYmFja19vayA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTgzLVxcdGludCBpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy04NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6ODU6ICAgICAgICBwcml2LVxcdTAwM2Vsb29wYmFja19vayA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTg2LVxcdHByaXYtXFx1MDAzZXZhbGlkYXRlX2xvb3BiYWNrID0gMTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy05OC1cXHRcXHRtc2xlZXAoTUxYNF9FTl9MT09QQkFDS19USU1FT1VUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmM6OTk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWxvb3BiYWNrX29rKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jOjEwMDpcXHRcXHRcXHRsb29wYmFja19vayA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTEwMS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYy0xMDMtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYzoxMDQ6XFx0aWYgKCFsb29wYmFja19vaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmMtMTA1LVxcdFxcdGVuX2Vycihwcml2LCBcXFwiTG9vcGJhY2sgcGFja2V0IGRpZG4ndCBhcnJpdmVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9zZWxmdGVzdC5jLTExMS1cXHRtbHg0X2VuX3VwZGF0ZV9sb29wYmFja19zdGF0ZShwcml2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fc2VsZnRlc3QuYzoxMTI6XFx0cmV0dXJuICFsb29wYmFja19vaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3NlbGZ0ZXN0LmMtMTEzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oPTUyOT1zdHJ1Y3QgbWx4NF9lbl9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oLTU1NS1cXHR1MzIgbXNnX2VuYWJsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaDo1NTY6XFx0dTMyIGxvb3BiYWNrX29rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NF9lbi5oLTU1Ny1cXHR1MzIgdmFsaWRhdGVfbG9vcGJhY2s7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9MjAwPXN0YXRpYyBNTFg1RV9ERUNMQVJFX1NUQVRTX0dSUF9PUF9VUERBVEVfU1RBVFModnBvcnRfcmVwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTI3MS1cXHRcXHRyZXBfc3RhdHMtXFx1MDAzZXZwb3J0X2xvb3BiYWNrX2J5dGVzID1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6MjcyOlxcdFxcdFxcdE1MWDVfR0VUX0NUUihvdXQsIGxvY2FsX2xvb3BiYWNrLm9jdGV0cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTI3My1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0xNTA9c3RydWN0IG1seDVlX2xidF9wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE1Mi1cXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjE1MzpcXHRib29sIGxvb3BiYWNrX29rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE1NC1cXHRib29sIGxvY2FsX2xiO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9MTU4PW1seDVlX3Rlc3RfbG9vcGJhY2tfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTE5My1cXHQvKiBiaW5nbyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjE5NDpcXHRsYnRwLVxcdTAwM2Vsb29wYmFja19vayA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTk1LVxcdGNvbXBsZXRlKFxcdTAwMjZsYnRwLVxcdTAwM2Vjb21wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jPTIwMT1zdGF0aWMgaW50IG1seDVlX3Rlc3RfbG9vcGJhY2tfc2V0dXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYy0yMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM6MjIxOlxcdGxidHAtXFx1MDAzZWxvb3BiYWNrX29rID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMjIyLVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2bGJ0cC1cXHUwMDNlY29tcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYz0yNjE9c3RhdGljIGludCBtbHg1ZV90ZXN0X2xvb3BiYWNrKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMjc1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjI3NjpcXHRsYnRwLVxcdTAwM2Vsb29wYmFja19vayA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI5Ny1cXHR3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmxidHAtXFx1MDAzZWNvbXAsIE1MWDVFX0xCX1ZFUklGWV9USU1FT1VUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoyOTg6XFx0ZXJyID0gIWxidHAtXFx1MDAzZWxvb3BiYWNrX29rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTI5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jPTc3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGNvdW50ZXJfZGVzYyB2cG9ydF9sb29wYmFja19zdGF0c19kZXNjW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc3RhdHMuYy03NzYtXFx0eyBcXFwidnBvcnRfbG9vcGJhY2tfYnl0ZXNcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zdGF0cy5jOjc3NzpcXHRcXHRWUE9SVF9DT1VOVEVSX09GRihsb2NhbF9sb29wYmFjay5vY3RldHMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3N0YXRzLmMtNzc4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDc3MD1tbHhzd19zcDFfcmlmX2lwaXBfbGJfY29uZmlndXJlKHN0cnVjdCBtbHhzd19zcF9yaWYgKnJpZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwNzg1LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA3ODY6XFx0XFx0Z290byBlcnJfbG9vcGJhY2tfb3A7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA3ODctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDc5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDc5MzplcnJfbG9vcGJhY2tfb3A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA3OTQtXFx0bWx4c3dfc3BfdnJfcHV0KG1seHN3X3NwLCB1bF92cik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDk3Mz1tbHhzd19zcDJfcmlmX2lwaXBfbGJfY29uZmlndXJlKHN0cnVjdCBtbHhzd19zcF9yaWYgKnJpZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwOTg4LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTA5ODk6XFx0XFx0Z290byBlcnJfbG9vcGJhY2tfb3A7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMDk5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDk5NjplcnJfbG9vcGJhY2tfb3A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA5OTctXFx0bWx4c3dfc3BfdWxfcmlmX3B1dCh1bF9yaWYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jPTcwMD1pbnQgZWY0X3NlbGZ0ZXN0KHN0cnVjdCBlZjRfbmljICplZngsIHN0cnVjdCBlZjRfc2VsZl90ZXN0cyAqdGVzdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmMtNzM0LVxcdC8qIE9mZmxpbmUgKGkuZS4gZGlzcnVwdGl2ZSkgdGVzdGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYzo3MzU6XFx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy03MzYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYz02OTM9aW50IGVmeF9zZWxmdGVzdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNzI3LVxcdC8qIE9mZmxpbmUgKGkuZS4gZGlzcnVwdGl2ZSkgdGVzdGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jOjcyODpcXHQgKiBUaGlzIGNoZWNrcyBNQUMgYW5kIFBIWSBsb29wYmFjayBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNzI5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmM9Njk4PWludCBlZnhfc2llbmFfc2VsZnRlc3Qoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9zZWxmX3Rlc3RzICp0ZXN0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTczMi1cXHQvKiBPZmZsaW5lIChpLmUuIGRpc3J1cHRpdmUpIHRlc3RpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYzo3MzM6XFx0ICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTczNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9jYXNzaW5pLmgtMTk4OS0jZGVmaW5lICBSRUdfUENTX1NFUkRFU19DVFJMICAgICAgICAgICAgICAweDkwNTQgLyogc2VyZGVzIGNvbnRyb2wgcmVnICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL2Nhc3NpbmkuaDoxOTkwOiNkZWZpbmUgICAgUENTX1NFUkRFU19DVFJMX0xPT1BCQUNLICAgICAgIDB4MDEgICAvKiBlbmFibGUgbG9vcGJhY2sgb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vY2Fzc2luaS5oLTE5OTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNlcmRlcyBpbnRlcmZhY2UgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM9MTY2PXN0YXRpYyB2b2lkIGxvb3BiYWNrX2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTE3MC1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jOjE3MTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvb3BiYWNrX29wcyA9IHtcXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTE3Mi1cXHQubmRvX2luaXQgICAgICAgID0gbG9vcGJhY2tfZGV2X2luaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTIxNz1zdGF0aWMgdm9pZCBsb29wYmFja19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy0yMTktXFx0Z2VuX2xvX3NldHVwKGRldiwgKDY0ICogMTAyNCksIFxcdTAwMjZsb29wYmFja19ldGh0b29sX29wcywgXFx1MDAyNmV0aF9oZWFkZXJfb3BzLFxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6MjIwOlxcdFxcdCAgICAgXFx1MDAyNmxvb3BiYWNrX29wcywgbG9vcGJhY2tfZGV2X2ZyZWUpO1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtMjIxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jPTQ3PWVudW0gaGR4X2xvb3BiYWNrIHtcXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYzo0ODpcXHRoZHhfbG9vcGJhY2tfb24gPSAwLFxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjQ5OlxcdGhkeF9sb29wYmFja19vZmYgPSAxLFxcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jLTUwLX07XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYz0xNTA9c3RhdGljIGludCBuc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmMtMTU1LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jOjE1NjpcXHRuc18xMF9iYXNlX3RfaGR4X2xvb3BhY2socGh5ZGV2LCBoZHhfbG9vcGJhY2tfb2ZmKTtcXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy0xNTctXFx0cmV0dXJuIG5zX2Fja19pbnRlcnJ1cHQocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jPTExNjY9c3RhdGljIGludCBydGw4MTg3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByYWRpb19pZHgsIHUzMiBjaGFuZ2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGw4MTh4L3J0bDgxODcvZGV2LmMtMTE3My1cXHRyZWcgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VtYXAtXFx1MDAzZVRYX0NPTkYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jOjExNzQ6XFx0LyogRW5hYmxlIFRYIGxvb3BiYWNrIG9uIE1BQyBsZXZlbCB0byBhdm9pZCBUWCBkdXJpbmcgY2hhbm5lbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsODE4eC9ydGw4MTg3L2Rldi5jLTExNzUtXFx0ICogY2hhbmdlcywgYXMgdGhpcyBoYXMgYmUgc2VlbiB0byBjYXVzZXMgcHJvYmxlbXMgYW5kIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjowNi42ODE0NDM2MjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczNDI4OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTG9vcGJhY2sgYW5kIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZSBpbiB0aGUgYGRyaXZlcnMvbmV0L01ha2VmaWxlYDogYG9iai0kKENPTkZJR19ORVQpICs9IGxvb3BiYWNrLm9gLiBSaWdodCBhd2F5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBJdCdzIGNsZWFyIHRoYXQgaWYgYENPTkZJR19ORVRgIGlzIHNldCwgdGhlIGxvb3BiYWNrIGRyaXZlciwgYGxvb3BiYWNrLmNgLCBnZXRzIGluY2x1ZGVkLiBTaW1wbGUgZW5vdWdoLCB0aGF0J3Mgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQuIE5vdywgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBjb2RlLCBzbyBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gSSdtIGZhbWlsaWFyIHdpdGggdGhlIGNvbmNlcHQgb2YgU0tCcyBhbmQgdGhlaXIgZnJhZ21lbnRzIGluIG5ldHdvcmsgZGF0YSwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBrZXJuZWwgaGFuZGxlcyBvcnBoYW4gZnJhZ21lbnRzLCBwYXJ0aWN1bGFybHkgb24gcmVjZWl2ZS4gSXQncyBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggZm9yIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgd2hlcmUgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBsb29wYmFjayBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb250ZXh0IHJpZ2h0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjA4Ljk1NDg3NjEzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAzODgwNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9vcnBoYW5fZnJhZ3NfcnhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q9MjYxPWxvb3BiYWNrIHJlc3RyaWN0aW9uIGNhbiBiZSB0ZW1wb3JhcmlseSByZWxheGVkIGJ5IG1ha2luZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjI2Mjpza2Jfb3JwaGFuX2ZyYWdzX3J4IGlkZW50aWNhbCB0byBza2Jfb3JwaGFuX2ZyYWdzLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0LTI2My1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdD0yMTk9bXNnX3plcm9jb3B5LnNoIOiEmuacrOWcqOi3qOWRveWQjeepuumXtOeahOiZmuaLn+S7peWkque9ke+8iHZldGjvvInlr7nkuYvpl7Tov5DooYzml7bvvIzmtYvor5XlsIbkuI3kvJrmmL7npLrlh7rku7vkvZXmgKfog71cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q6MjIwOuaPkOWNh+OAguS4uuS6huS+v+S6jua1i+ivle+8jOWPr+S7pemAmui/h+iuqSBza2Jfb3JwaGFuX2ZyYWdzX3J4IOS4jiBza2Jfb3JwaGFuX2ZyYWdzIOebuOWQjO+8jOadpeaaguaXtuaUvuWuvVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yMjEt546v5Zue6ZmQ5Yi244CCXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jPTcwPXN0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTc4LVxcdCAqIHdpbGwgb25seSBiZSBjb3BpZWQgbGF0ZXIgaW4gdGhlIHJlY2VpdmUgcGF0aCdzXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYzo3OTpcXHQgKiBza2Jfb3JwaGFuX2ZyYWdzX3J4KCkuIEFzIHN1Y2gsIGlmIHRoZSByZWNlaXZlIHBhdGggZ2V0cyBkZWZlcnJlZCxcXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTgwLVxcdCAqIGZvciBleGFtcGxlIGJ5IFJQUyBzdGVlcmluZyB0aGUgcGFja2V0IHRvIGFub3RoZXIgQ1BVLCB0aGlzIGNyZWF0ZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODUtXFx0ICovXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYzo4NjpcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmMtODctXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTEwNy1cXG5kcml2ZXJzL25ldC90dW4uYzoxMTA4OlxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTEwOS1cXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0Mzg9c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ0Ny0vKiBGcmFncyBtdXN0IGJlIG9ycGhhbmVkLCBldmVuIGlmIHJlZmNvdW50ZWQsIGlmIHNrYiBtaWdodCBsb29wIHRvIHJ4IHBhdGggKi9cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM0NDg6c3RhdGljIGlubGluZSBpbnQgc2tiX29ycGhhbl9mcmFnc19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDkte1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlxcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yNTExPXN0YXRpYyBpbnQgZGVsaXZlcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI1MTQte1xcbm5ldC9jb3JlL2Rldi5jOjI1MTU6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpXFxubmV0L2NvcmUvZGV2LmMtMjUxNi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTI1NzQ9dm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI2MzAtXFx0aWYgKHB0X3ByZXYpIHtcXG5uZXQvY29yZS9kZXYuYzoyNjMxOlxcdFxcdGlmICghc2tiX29ycGhhbl9mcmFnc19yeChza2IyLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9kZXYuYy0yNjMyLVxcdFxcdFxcdHB0X3ByZXYtXFx1MDAzZWZ1bmMoc2tiMiwgc2tiLVxcdTAwM2VkZXYsIHB0X3ByZXYsIHNrYi1cXHUwMDNlZGV2KTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU3MTM9dm9pZCBfX3NrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTc1My1cXG5uZXQvY29yZS9za2J1ZmYuYzo1NzU0OlxcdFxcdGlmIChza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy01NzU1LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYz0yMjk9c3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMC17XFxubmV0L2lwdjQvaXBfaW5wdXQuYzoyMzE6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTIzMi1cXHRcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lORElTQ0FSRFMpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTI0PXN0YXRpYyBpbnQgaXA2X2lucHV0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MjUte1xcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjUyNjpcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTUyNy1cXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6MTEuMzU4NzY1ODczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc0NzkzOTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3BiYWNrIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uIGFuZCBob3cgdGhlIGxvb3BiYWNrIG1lY2hhbmlzbSBmdW5jdGlvbnMgdW5kZXIgdGhlIGhvb2QuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgbG9vcGJhY2sgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdGhlIGBsb2AgaW50ZXJmYWNlLCBpcyBmdW5kYW1lbnRhbCB0byBldmVyeSBuZXR3b3JrIG5hbWVzcGFjZS4gV2hlbiBkYXRhIGlzIHRyYW5zbWl0dGVkIHZpYSBgbG9gLCB0aGUgZmxvdyBnb2VzIHJpZ2h0IHRocm91Z2ggYGxvb3BiYWNrX3htaXRgLCB3aGljaCBpcyBlZmZlY3RpdmVseSB0aGUgZnVuY3Rpb24gYm91bmQgdG8gYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0YC5cblxuTm93LCB0aGF0IHBhdGNoLi4uIGl0J3MgYWRkaW5nIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB3aXRoaW4gYGxvb3BiYWNrX3htaXRgLiBUaGUgcHVycG9zZSBoZXJlIGlzIHRvIG1pdGlnYXRlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBBRl9QQUNLRVQgVFggcmluZyB6ZXJvY29weSBmcmFnbWVudHMgd2hlbiBwYWNrZXRzIGFyZSwgd2VsbCwgbG9vcGVkIGJhY2suIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcHJldmVudHMgYSByYWNlLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdmlzaWJpbGl0eSBvZiBgbG9vcGJhY2tfeG1pdGAuIElzIGl0IGEgc3RhdGljIGZ1bmN0aW9uLCBvciBpcyBpdCBleHBvcnRlZCBpbiBzb21lIHdheT8gQWgsIGl0J3MgZGVmaW5lZCBhcyBgc3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoLi4uKWAuIFNvLCBpdCdzIHNjb3BlZCB3aXRoaW4gdGhlIGZpbGUuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaXMgYnVpbHQgaXMgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGluIC5jIGZpbGVzICphcmUqIHN0aWxsIG5vcm1hbCBzeW1ib2xzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBVbmxlc3MgaW5saW5lZCwgd2hpY2ggaXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlLCB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnQgYGxvb3BiYWNrX29wcy5uZG9fc3RhcnRfeG1pdCA9IGxvb3BiYWNrX3htaXRgIHNob3VsZCBiZSBlbm91Z2ggdG8gcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBlbGltaW5hdGluZyBpdCBhcyBkZWFkIGNvZGUuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBsb29wYmFja19vcHNgIHdpdGhpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gZ3Jhc3AgdGhlIHJvbGUgb2YgYGxvb3BiYWNrX3htaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE5MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoxOC4xMDY3MDg4MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2xvb3BiYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcbiAxNjY6XFx0c3RhdGljIHZvaWQgbG9vcGJhY2tfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gMTY3OlxcdHtcXG4gMTY4OlxcdFxcdGRldl9uZXQoZGV2KS1cXHUwMDNlbG9vcGJhY2tfZGV2ID0gTlVMTDtcXG4gMTY5OlxcdH1cXG4gMTcwOlxcdFxcbiAxNzE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsb29wYmFja19vcHMgPSB7XFxuIDE3MjpcXHRcXHQubmRvX2luaXQgICAgICAgID0gbG9vcGJhY2tfZGV2X2luaXQsXFxuIDE3MzpcXHRcXHQubmRvX3N0YXJ0X3htaXQgID0gbG9vcGJhY2tfeG1pdCxcXG4gMTc0OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjQgPSBsb29wYmFja19nZXRfc3RhdHM2NCxcXG4gMTc1OlxcdFxcdC5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLFxcbiAxNzY6XFx0fTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0c3RhdGljIHZvaWQgZ2VuX2xvX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDE3OTpcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG10dSxcXG4gMTgwOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKmV0aF9vcHMsXFxuIDE4MTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgKmhkcl9vcHMsXFxuIDE4MjpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpkZXZfb3BzLFxcbiAxODM6XFx0XFx0XFx0XFx0IHZvaWQgKCpkZXZfZGVzdHJ1Y3Rvcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldikpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRkZXYtXFx1MDAzZW10dVxcdFxcdD0gbXR1O1xcbiAxODY6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5cXHQ9IEVUSF9ITEVOO1xcdC8qIDE0XFx0Ki9cXG4gMTg3OlxcdFxcdGRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW5cXHQ9IEVUSF9ITEVOO1xcdC8qIDE0XFx0Ki9cXG4gMTg4OlxcdFxcdGRldi1cXHUwMDNlYWRkcl9sZW5cXHRcXHQ9IEVUSF9BTEVOO1xcdC8qIDZcXHQqL1xcbiAxODk6XFx0XFx0ZGV2LVxcdTAwM2V0eXBlXFx0XFx0PSBBUlBIUkRfTE9PUEJBQ0s7XFx0LyogMHgwMDAxKi9cXG4gMTkwOlxcdFxcdGRldi1cXHUwMDNlZmxhZ3NcXHRcXHQ9IElGRl9MT09QQkFDSztcXG4gMTkxOlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFnc1xcdFxcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFIHwgSUZGX05PX1FVRVVFO1xcbiAxOTI6XFx0XFx0ZGV2LVxcdTAwM2VsbHR4XFx0XFx0PSB0cnVlO1xcbiAxOTM6XFx0XFx0ZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGVcXHQ9IHRydWU7XFxuIDE5NDpcXHRcXHRuZXRpZl9rZWVwX2RzdChkZXYpO1xcbiAxOTU6XFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlc1xcdD0gTkVUSUZfRl9HU09fU09GVFdBUkU7XFxuIDE5NjpcXHRcXHRkZXYtXFx1MDAzZWZlYXR1cmVzXFx0XFx0PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVFxcbiAxOTc6XFx0XFx0XFx0fCBORVRJRl9GX0dTT19TT0ZUV0FSRVxcbiAxOTg6XFx0XFx0XFx0fCBORVRJRl9GX0hXX0NTVU1cXG4gMTk5OlxcdFxcdFxcdHwgTkVUSUZfRl9SWENTVU1cXG4gMjAwOlxcdFxcdFxcdHwgTkVUSUZfRl9TQ1RQX0NSQ1xcbiAyMDE6XFx0XFx0XFx0fCBORVRJRl9GX0hJR0hETUFcXG4gMjAyOlxcdFxcdFxcdHwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRURcXG4gMjAzOlxcdFxcdFxcdHwgTkVUSUZfRl9MT09QQkFDSztcXG4gMjA0OlxcdFxcdGRldi1cXHUwMDNlZXRodG9vbF9vcHNcXHQ9IGV0aF9vcHM7XFxuIDIwNTpcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHNcXHRcXHQ9IGhkcl9vcHM7XFxuIDIwNjpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHNcXHRcXHQ9IGRldl9vcHM7XFxuIDIwNzpcXHRcXHRkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2XFx0PSB0cnVlO1xcbiAyMDg6XFx0XFx0ZGV2LVxcdTAwM2VwY3B1X3N0YXRfdHlwZVxcdD0gTkVUREVWX1BDUFVfU1RBVF9MU1RBVFM7XFxuIDIwOTpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvclxcdD0gZGV2X2Rlc3RydWN0b3I7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdG5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LCBHU09fTUFYX1NJWkUpO1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHQvKiBUaGUgbG9vcGJhY2sgZGV2aWNlIGlzIHNwZWNpYWwuIFRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjE4LjEwNjg2MTg3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzYxODkwMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYGxvb3BiYWNrX3htaXRgIGFzIGEgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgbG9vcGJhY2tfeG1pdGAgaXMgYmVpbmcgdXNlZCBhcyB0aGUgYC5uZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBpbmZvcm1hdGlvbiwgaXQgbG9va3MgcHJvbWlzaW5nLlxuXG4qICAgWWVzLCBpdCdzIG1vZGlmeWluZyB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgd2l0aGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydDsgbW9kaWZ5aW5nIGNvcmUgY29kZSBpcyBhbHdheXMgYSBoaWdoLXZhbHVlIHRhcmdldC5cbiogICBUaGUgZmFjdCB0aGF0IGl0J3MgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB3aXRob3V0IHJlcXVpcmluZyBhbnkgc3BlY2lhbCBoYXJkd2FyZSBpcyBhbHNvIGV4Y2VsbGVudC4gVGhpcyBzaW1wbGlmaWVzIHRoZSBmdXp6aW5nIHNldHVwIGNvbnNpZGVyYWJseS4gTGVzcyBlZmZvcnQgbWVhbnMgbW9yZSBlZmZlY3RpdmUgZnV6emluZyBydW5zLlxuKiAgIE5vdywgdGhlIGtleSBwYXJ0OiBpdCBoYW5kbGVzIG9ycGhhbmluZyB6ZXJvY29weSBmcmFncyBpbiBgbG9vcGJhY2tfeG1pdGAuIFRoaXMgYWx0ZXJhdGlvbiBvZiBob3cgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBpcyBwcm9jZXNzZWQgZHVyaW5nIGxvb3BiYWNrIHRyYW5zbWlzc2lvbiBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGludHJpY2F0ZSBkYXRhIGhhbmRsaW5nIHRoYXQgb2Z0ZW4gcmV2ZWFscyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBsb2dpYyBlcnJvcnMgZHVyaW5nIGZ1enppbmcuIFRoaXMgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgY3Jhc2hlcy5cIlxuKiAgIFRoZSBmb2NhbCBwb2ludCBpcywgb2YgY291cnNlLCBgbG9vcGJhY2tfeG1pdGAgaXRzZWxmLiBUaGF0J3Mgb3VyIHRhcmdldC5cbiogICBGaW5hbGx5LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbi4gV2UgbmVlZCB0aGUgYE5FVGAgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGxvb3BiYWNrLiBJIHNob3VsZCBkb3VibGUgY2hlY2ssIHRob3VnaCwgYW5kIHZlcmlmeSBpZiBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgTkVUREVWSUNFU2AsIGFyZSBhbHNvIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRpZyBpbnRvIGBuZXQvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoyMS44Njg3NTQ4ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTcxMTA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX01ESU8pICs9IG1kaW8ub1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVQpICs9IGxvb3BiYWNrLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0yNC1vYmotJChDT05GSUdfTkVUQ09OU09MRSkgKz0gbmV0Y29uc29sZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjIyLjE3MDQ3MzQ0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI5MjE1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbmV0d29yayBkcml2ZXJzIGFyZSBiZWluZyBjb21waWxlZC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgYXBwcm9hY2ggZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIHRvcC1sZXZlbCBidWlsZCBydWxlcyBmb3IgdGhlIGBkcml2ZXJzL2AgZGlyZWN0b3J5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZC4gVGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBwcm9iYWJseSBoYXMgaXRzIG93biBNYWtlZmlsZSwgYnV0IHRoZSBwYXJlbnQgb25lIHNob3VsZCBnaXZlIG1lIHRoZSBiaWcgcGljdHVyZSwgZXNwZWNpYWxseSBpbiBob3cgYENPTkZJR19ORVRgIGFmZmVjdHMgdGhpbmdzLlxuXG5JJ20gYmV0dGluZyB0aGUgbWFrZWZpbGUgd2lsbCBoYXZlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLiBJIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIGxpa2UgYG9iai0kKENPTkZJR19ORVQpICs9IG5ldC9gIG9yIHNpbWlsYXIuIElmIGl0ICppcyogc2V0IHVwIHRoYXQgd2F5LCB0aGUgZXhpc3RlbmNlIGFuZCB2YWx1ZSBvZiB0aGUgYENPTkZJR19ORVRgIGtjb25maWcgdmFyaWFibGUgd2lsbCBkaXJlY3RseSBjb250cm9sIHdoZXRoZXIgdGhlIGBuZXQvYCBzdWJkaXJlY3RvcnkgKGFuZCBpdHMgY29udGVudHMsIGkuZS4sIHRoZSBuZXR3b3JrIGRyaXZlcnMpIGFyZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBzZWN0aW9uIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIHRoZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjI1LjE5OTY5MjE0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MTc3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9OTE9b2JqLSQoQ09ORklHX1NMSU1CVVMpXFx0XFx0Kz0gc2xpbWJ1cy9cXG5kcml2ZXJzL01ha2VmaWxlOjkyOm9iai15XFx0XFx0XFx0XFx0Kz0gbmV0L1xcbmRyaXZlcnMvTWFrZWZpbGUtOTMtb2JqLSQoQ09ORklHX0FUTSlcXHRcXHQrPSBhdG0vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjI1LjI4NjYxNDMyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTA2NDU3MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBMb29wYmFjayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBtYWtlZmlsZXMgYXJlIHRlbGxpbmcgbWUgdGhhdCBpbmNsdWRpbmcgYG5ldC9gIGluIGBkcml2ZXJzL01ha2VmaWxlYCBhbG9uZyB3aXRoIGBvYmotJChDT05GSUdfTkVUKSArPSBsb29wYmFjay5vYCBpbiBgZHJpdmVycy9uZXQvTWFrZWZpbGVgIG1lYW5zIGBORVRgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIHRoZSBsb29wYmFjayBkcml2ZXIuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5MZXQncyBzZWXigKYgTm8gb3RoZXIgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyBzZWVtIHJlbGV2YW50LCBsb29raW5nIGF0IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCwgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgaXMgbm90IGltcG9ydGFudCBoZXJlLCBhbmQgYGxvb3BiYWNrX3htaXRgIGlzIGluZGVlZCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuXG5cblRoZXJlZm9yZSwgdGhlIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBvbmx5IGBsb29wYmFja194bWl0YCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYE5FVGAgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYHRydWVgIGJlY2F1c2UgdGhpcyBjb2RlIGFsdGVycyB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYywgZXZlbiB3aGVuIHVzaW5nIHplcm9jb3B5IHBhY2tldHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdmVyaWZ5IHRoaXMgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lcy4gUmVhY2hhYmlsaXR5IGlzIGNsZWFybHkgdW5pdmVyc2FsIGJlY2F1c2UgbG9vcGJhY2sgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBMaW51eCBuZXR3b3JrIHN0YWNrLiBUaGUgYFdvcnRoRnV6emluZ2AgcHJvcGVydHkgaXMgY29uZmlybWVkLiBgRm9jdXNTeW1ib2xzYCBpcyBjb3JyZWN0LCBwb2ludGluZyB0byB0aGUgZW50cnlwb2ludCBvZiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljLiBBbmQgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYE5FVGAsIG5vIHByZWZpeCBpcyBuZWVkZWQuXG5cbkFscmlnaHQsIHRoYXQncyBjcnlzdGFsIGNsZWFyLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTYsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjI4Ljc5MzA3NDA3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjIzMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcGJhY2tfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb29wYmFja194bWl0YCBpbiBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AgdG8gb3JwaGFuIHplcm9jb3B5IHNrYiBmcmFnbWVudHMgKGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCkgYmVmb3JlIGludm9raW5nIGBza2Jfb3JwaGFuKClgLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24vcmFjZSBjb25kaXRpb25zIHdoZW4gdHJhbnNtaXR0aW5nIHBhY2tldHMgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIChlLmcuLCB3aXRoIEFGX1BBQ0tFVCBUWCByaW5ncykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wYmFja194bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvb3BiYWNrX3htaXRgIGluIGBkcml2ZXJzL25ldC9sb29wYmFjay5jYCB0byBvcnBoYW4gemVyb2NvcHkgc2tiIGZyYWdtZW50cyAoYHNrYl9vcnBoYW5fZnJhZ3NfcnhgKSBiZWZvcmUgaW52b2tpbmcgYHNrYl9vcnBoYW4oKWAsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbi9yYWNlIGNvbmRpdGlvbnMgd2hlbiB0cmFuc21pdHRpbmcgcGFja2V0cyBvdmVyIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgKGUuZy4sIHdpdGggQUZfUEFDS0VUIFRYIHJpbmdzKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoyOC45MTkzMTg3MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzIwMzQyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6MjguOTIwMjY3Mzc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE3MTkzODgyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGluIGBsb29wYmFja194bWl0KClgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB6ZXJvY29weSBmcmFncyAoZS5nLiBBRl9QQUNLRVQgVFggcmluZykgYmVpbmcgbW9kaWZpZWQgYnkgdXNlcnNwYWNlIGJlZm9yZSB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZSBhbGxvY2F0ZWQgcGFnZXMgZm9yIGZyYWcgY29weWluZyBhcmUgZnVsbHkgd3JpdHRlbiBieSBgbWVtY3B5YCB3aXRoaW4gYHNrYl9jb3B5X3VidWZzKClgLiBBbnkgZmFpbHVyZSBwYXRocyBzYWZlbHkgZHJvcCB0aGUgcGFja2V0IHZpYSBga2ZyZWVfc2tiX3JlYXNvbigpYC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU2MWU1NDI4ZWNlN2M0YTdhZjBiMDMzMTRiOTdjYjNkZTE3YWY0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MzE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suY1xuaW5kZXggMWZiNmNlNjg0M2FkZS4uMzFhZTEwYTlkNzkxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmNcbisrKyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmNcbkBAIC03Miw2ICs3MiwyMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdGludCBsZW47XG4gXG4rXHQvKiBUaGUgc2tiX29ycGhhbigpIGJlbG93IHdpbGwgcnVuIHRoZSBza2IncyBkZXN0cnVjdG9yLCB3aGljaFxuK1x0ICogZm9yIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMgbWFya3MgdGhlIHNsb3QgYXMgVFBfU1RBVFVTX0FWQUlMQUJMRVxuK1x0ICogYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IHN0aWxsIGhhcyB6ZXJvY29weSBmcmFncyBwb2ludGluZyB0byBpdCB0aGF0XG4rXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgnc1xuK1x0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXG4rXHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXG4rXHQgKiBhIHJhY2Ugd2hlcmUgdXNlcnNwYWNlIG1heSBmaWxsIGluIG5ldyBkYXRhIGludG8gdGhlIGZyYWcgYmVmb3JlIHRoZVxuK1x0ICogb2xkIGRhdGEgZ2V0cyBjb3BpZWQgb3V0LlxuK1x0ICpcbitcdCAqIFRha2UgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xuK1x0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuK1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XG4rXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4rXHR9XG4rXG4gXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XG4gXG4gXHQvKiBkbyBub3QgZm9vbCBuZXRfdGltZXN0YW1wX2NoZWNrKCkgd2l0aCB2YXJpb3VzIGNsb2NrIGJhc2VzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjoyOC45MjAyNjkwNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQwODY1MzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3BiYWNrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIHNlZSBhIHBhdGNoIG1vZGlmeWluZyBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhZCB0aGUgY29kZSBpbiB0aGUgY29udGV4dCBvZiBpdHMgc3Vycm91bmRpbmcgY29kZSwgc28gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBgbG9vcGJhY2suY2AsIGFzIHdlbGwgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YC4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgemVyby1jb3B5IGZyYWcgaGFuZGxpbmcgaW4gdGhlIHRyYW5zbWl0IHBhdGggYW5kIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlY2VpdmUgcGF0aCBpcyBkZWZlcnJlZCwgcGVyaGFwcyBkdWUgdG8gUlBTIHN0ZWVyaW5nLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBjb2RlIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIHdpdGggYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9vcGJhY2sgZGV2aWNlLiBJdCBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgdGhlIGBza2Jfb3JwaGFuKClgIGRlc3RydWN0b3IgYW5kIEFGX1BBQ0tFVCBUWC1yaW5nIHNlbmRlcnMsIHdoaWNoIGxpa2VseSB1c2VzIGEgc2hhcmVkIG1lbW9yeSByZWdpb24gd2l0aCB1c2Vyc3BhY2UuIFRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIHJhY2UgY29uZGl0aW9uIG1pZ2h0IGJlIGhhcHBlbmluZzogdGhlIGRlc3RydWN0b3IgbWFrZXMgdGhlIGJ1ZmZlciBhdmFpbGFibGUgdG8gdXNlcnNwYWNlIGFnYWluLCBidXQgdGhlIHJlY2VpdmUgcGF0aCBtaWdodCBzdGlsbCBiZSByZWZlcmVuY2luZyB0aGUgb2xkIGRhdGEgaW4gdGhlIGZyYWcuXG5cblRoZSBmaXgsIGl0IHNlZW1zLCBpcyB0aGUgY2FsbCB0byBgc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpYC4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGl0IGFwcGVhcnMgdGhlcmUncyBhIHByb2JsZW0gKGxpa2VseSBhIGNvcHkgZmFpbHVyZSksIGFuZCB0aGUgcGFja2V0IGlzIGRyb3BwZWQsIGluZGljYXRlZCBieSB0aGUgaW5jcmVtZW50IG9mIGEgZHJvcHBlZCBzdGF0cyBjb3VudGVyIGFuZCBhIGNhbGwgdG8gYGtmcmVlX3NrYl9yZWFzb25gLiBPdGhlcndpc2UsIHRoZSBjb2RlIHByb2NlZWRzIG5vcm1hbGx5IGFuZCBhZGRzIGEgdGltZXN0YW1wLlxuXG5UbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgb3JkZXJpbmcgYW5kIHdoYXQgZXhhY3RseSBgc2tiX29ycGhhbl9mcmFnc19yeGAgZG9lcy4gSXQncyBsaWtlbHkgYSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIHRha2VuLCB3aGljaCBpcyB0aGUgZml4LiBUaGUgdXNlIG9mIGBHRlBfQVRPTUlDYCBpcyBpbXBvcnRhbnQgaGVyZSBhcyBpdCBpbmRpY2F0ZXMgdGhlIGFsbG9jYXRpb24gbXVzdCBiZSBub24tYmxvY2tpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBrZXJuZWwtcHJpdmF0ZSBjb3B5IGlzIGF0b21pYyBvciBub3QuIFRoaXMgaXMgbGlrZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIHRoZSBjcnV4IG9mIHRoZSByYWNlIGNvbmRpdGlvbiBpcyByZXNvbHZlZC4gSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIHJpZ2h0IGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODYsIk91dHB1dFRva2VucyI6NTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjozNi4zMjg5MjY1MTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2xvb3BiYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0LyogYmxhY2tob2xlX25ldGRldiAtIGEgZGV2aWNlIHVzZWQgZm9yIGRzdHMgdGhhdCBhcmUgbWFya2VkIGV4cGlyZWQhXFxuICA2MTpcXHQgKiBUaGlzIGlzIGdsb2JhbCBkZXZpY2UgKGluc3RlYWQgb2YgcGVyLW5ldC1ucykgc2luY2UgaXQncyBub3QgbmVlZGVkXFxuICA2MjpcXHQgKiB0byBiZSBwZXItbnMgYW5kIGdldHMgaW5pdGlhbGl6ZWQgYXQgYm9vdCB0aW1lLlxcbiAgNjM6XFx0ICovXFxuICA2NDpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYmxhY2tob2xlX25ldGRldjtcXG4gIDY1OlxcdEVYUE9SVF9TWU1CT0woYmxhY2tob2xlX25ldGRldik7XFxuICA2NjpcXHRcXG4gIDY3OlxcdC8qIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCdzXFxuICA2ODpcXHQgKiBjYWxsZWQgd2l0aCBiaCdzIGRpc2FibGVkKS5cXG4gIDY5OlxcdCAqL1xcbiAgNzA6XFx0c3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNzI6XFx0e1xcbiAgNzM6XFx0XFx0aW50IGxlbjtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0LyogVGhlIHNrYl9vcnBoYW4oKSBiZWxvdyB3aWxsIHJ1biB0aGUgc2tiJ3MgZGVzdHJ1Y3Rvciwgd2hpY2hcXG4gIDc2OlxcdFxcdCAqIGZvciBBRl9QQUNLRVQgVFgtcmluZyBzZW5kZXJzIG1hcmtzIHRoZSBzbG90IGFzIFRQX1NUQVRVU19BVkFJTEFCTEVcXG4gIDc3OlxcdFxcdCAqIGFnYWluLCBldmVuIHRob3VnaCBpdCBzdGlsbCBoYXMgemVyb2NvcHkgZnJhZ3MgcG9pbnRpbmcgdG8gaXQgdGhhdFxcbiAgNzg6XFx0XFx0ICogd2lsbCBvbmx5IGJlIGNvcGllZCBsYXRlciBpbiB0aGUgcmVjZWl2ZSBwYXRoJ3NcXG4gIDc5OlxcdFxcdCAqIHNrYl9vcnBoYW5fZnJhZ3NfcngoKS4gQXMgc3VjaCwgaWYgdGhlIHJlY2VpdmUgcGF0aCBnZXRzIGRlZmVycmVkLFxcbiAgODA6XFx0XFx0ICogZm9yIGV4YW1wbGUgYnkgUlBTIHN0ZWVyaW5nIHRoZSBwYWNrZXQgdG8gYW5vdGhlciBDUFUsIHRoaXMgY3JlYXRlc1xcbiAgODE6XFx0XFx0ICogYSByYWNlIHdoZXJlIHVzZXJzcGFjZSBtYXkgZmlsbCBpbiBuZXcgZGF0YSBpbnRvIHRoZSBmcmFnIGJlZm9yZSB0aGVcXG4gIDgyOlxcdFxcdCAqIG9sZCBkYXRhIGdldHMgY29waWVkIG91dC5cXG4gIDgzOlxcdFxcdCAqXFxuICA4NDpcXHRcXHQgKiBUYWtlIGEga2VybmVsLXByaXZhdGUgY29weS5cXG4gIDg1OlxcdFxcdCAqL1xcbiAgODY6XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG4gIDg3OlxcdFxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuICA4ODpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVCk7XFxuICA4OTpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRza2JfdHhfdGltZXN0YW1wKHNrYik7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIGRvIG5vdCBmb29sIG5ldF90aW1lc3RhbXBfY2hlY2soKSB3aXRoIHZhcmlvdXMgY2xvY2sgYmFzZXMgKi9cXG4gIDk1OlxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0c2tiX29ycGhhbihza2IpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQvKiBCZWZvcmUgcXVldWVpbmcgdGhpcyBwYWNrZXQgdG8gX19uZXRpZl9yeCgpLFxcbiAxMDA6XFx0XFx0ICogbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkLlxcbiAxMDE6XFx0XFx0ICovXFxuIDEwMjpcXHRcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiAxMDc6XFx0XFx0aWYgKGxpa2VseShfX25ldGlmX3J4KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbiAxMDg6XFx0XFx0XFx0ZGV2X2xzdGF0c19hZGQoZGV2LCBsZW4pO1xcbiAxMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjM2LjMyOTA2MzEwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MzkwMjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2Jfb3JwaGFuX2ZyYWdzX3J4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0PTI2MT1sb29wYmFjayByZXN0cmljdGlvbiBjYW4gYmUgdGVtcG9yYXJpbHkgcmVsYXhlZCBieSBtYWtpbmdcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdDoyNjI6c2tiX29ycGhhbl9mcmFnc19yeCBpZGVudGljYWwgdG8gc2tiX29ycGhhbl9mcmFncy5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXNnX3plcm9jb3B5LnJzdC0yNjMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3Q9MjE5PW1zZ196ZXJvY29weS5zaCDohJrmnKzlnKjot6jlkb3lkI3nqbrpl7TnmoTomZrmi5/ku6XlpKrnvZHvvIh2ZXRo77yJ5a+55LmL6Ze06L+Q6KGM5pe277yM5rWL6K+V5bCG5LiN5Lya5pi+56S65Ye65Lu75L2V5oCn6IO9XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9tc2dfemVyb2NvcHkucnN0OjIyMDrmj5DljYfjgILkuLrkuobkvr/kuo7mtYvor5XvvIzlj6/ku6XpgJrov4forqkgc2tiX29ycGhhbl9mcmFnc19yeCDkuI4gc2tiX29ycGhhbl9mcmFncyDnm7jlkIzvvIzmnaXmmoLml7bmlL7lrr1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL21zZ196ZXJvY29weS5yc3QtMjIxLeeOr+WbnumZkOWItuOAglxcbi0tXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYz03MD1zdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy03OC1cXHQgKiB3aWxsIG9ubHkgYmUgY29waWVkIGxhdGVyIGluIHRoZSByZWNlaXZlIHBhdGgnc1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6Nzk6XFx0ICogc2tiX29ycGhhbl9mcmFnc19yeCgpLiBBcyBzdWNoLCBpZiB0aGUgcmVjZWl2ZSBwYXRoIGdldHMgZGVmZXJyZWQsXFxuZHJpdmVycy9uZXQvbG9vcGJhY2suYy04MC1cXHQgKiBmb3IgZXhhbXBsZSBieSBSUFMgc3RlZXJpbmcgdGhlIHBhY2tldCB0byBhbm90aGVyIENQVSwgdGhpcyBjcmVhdGVzXFxuLS1cXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTg1LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2xvb3BiYWNrLmM6ODY6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG5kcml2ZXJzL25ldC9sb29wYmFjay5jLTg3LVxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMDU5PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDctXFxuZHJpdmVycy9uZXQvdHVuLmM6MTEwODpcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSkge1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDktXFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDM4PXN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTM0NDctLyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDQ4OnN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Nfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDQ5LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTItXFx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oOjQxMzpcXHQgKiBlLmcuLCB2aWEgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkgb3Igc2tiX29ycGhhbl9mcmFnc19yeCgpXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUxMT1zdGF0aWMgaW50IGRlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yNTE0LXtcXG5uZXQvY29yZS9kZXYuYzoyNTE1OlxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKVxcbm5ldC9jb3JlL2Rldi5jLTI1MTYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yNTc0PXZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yNjMwLVxcdGlmIChwdF9wcmV2KSB7XFxubmV0L2NvcmUvZGV2LmM6MjYzMTpcXHRcXHRpZiAoIXNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiMiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvZGV2LmMtMjYzMi1cXHRcXHRcXHRwdF9wcmV2LVxcdTAwM2VmdW5jKHNrYjIsIHNrYi1cXHUwMDNlZGV2LCBwdF9wcmV2LCBza2ItXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz01NzEzPXZvaWQgX19za2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU3NTMtXFxubmV0L2NvcmUvc2tidWZmLmM6NTc1NDpcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFnc19yeChza2IsIEdGUF9BVE9NSUMpKSB7XFxubmV0L2NvcmUvc2tidWZmLmMtNTc1NS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MjI5PXN0YXRpYyBpbnQgaXBfbG9jYWxfZGVsaXZlcl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzAte1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6MjMxOlxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQykpKSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yMzItXFx0XFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTUyND1zdGF0aWMgaW50IGlwNl9pbnB1dF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTI1LXtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1MjY6XFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01MjctXFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjM4LjY4Mjk3MDQxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU5NzI4OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCB3b3Jrcywgc28gSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGRlY2xhcmF0aW9uLCB0aGUgY3J1Y2lhbCBidWlsZGluZyBibG9jayB0aGF0IG90aGVyIGZ1bmN0aW9ucyBkZXBlbmQgb24uIEkgd2FudCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgb3JwaGFuIGZyYWdtZW50cyBpbiB0aGUgcmVjZWl2ZSBwYXRoLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29yayBzdGFjaydzIGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgcHJvY2Vzc2VzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjQwLjc0MjcwNTIzM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTAwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNDM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDM1OlxcdCAqXFx0b3duZXIpIGNyZWF0ZSBhIGNvcHkgb2YgdGhhdCBmcmFnIGFuZCByZWxlYXNlIHRoZSBvcmlnaW5hbFxcbjM0MzY6XFx0ICpcXHRwYWdlIGJ5IGNhbGxpbmcgdGhlIGRlc3RydWN0b3IuXFxuMzQzNzpcXHQgKi9cXG4zNDM4OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNrYl9vcnBoYW5fZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxuMzQzOTpcXHR7XFxuMzQ0MDpcXHRcXHRpZiAobGlrZWx5KCFza2JfemNvcHkoc2tiKSkpXFxuMzQ0MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zNDQyOlxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0tCRkxfRE9OVF9PUlBIQU4pXFxuMzQ0MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zNDQ0OlxcdFxcdHJldHVybiBza2JfY29weV91YnVmcyhza2IsIGdmcF9tYXNrKTtcXG4zNDQ1OlxcdH1cXG4zNDQ2OlxcdFxcbjM0NDc6XFx0LyogRnJhZ3MgbXVzdCBiZSBvcnBoYW5lZCwgZXZlbiBpZiByZWZjb3VudGVkLCBpZiBza2IgbWlnaHQgbG9vcCB0byByeCBwYXRoICovXFxuMzQ0ODpcXHRzdGF0aWMgaW5saW5lIGludCBza2Jfb3JwaGFuX2ZyYWdzX3J4KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbjM0NDk6XFx0e1xcbjM0NTA6XFx0XFx0aWYgKGxpa2VseSghc2tiX3pjb3B5KHNrYikpKVxcbjM0NTE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzQ1MjpcXHRcXHRyZXR1cm4gc2tiX2NvcHlfdWJ1ZnMoc2tiLCBnZnBfbWFzayk7XFxuMzQ1MzpcXHR9XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdC8qKlxcbjM0NTY6XFx0ICpcXHRfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24gLSBlbXB0eSBhIGxpc3RcXG4zNDU3OlxcdCAqXFx0QGxpc3Q6IGxpc3QgdG8gZW1wdHlcXG4zNDU4OlxcdCAqXFx0QHJlYXNvbjogZHJvcCByZWFzb25cXG4zNDU5OlxcdCAqXFxuMzQ2MDpcXHQgKlxcdERlbGV0ZSBhbGwgYnVmZmVycyBvbiBhbiBcXHUwMDI2c2tfYnVmZiBsaXN0LiBFYWNoIGJ1ZmZlciBpcyByZW1vdmVkIGZyb21cXG4zNDYxOlxcdCAqXFx0dGhlIGxpc3QgYW5kIG9uZSByZWZlcmVuY2UgZHJvcHBlZC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZVxcbjM0NjI6XFx0ICpcXHRsaXN0IGxvY2sgYW5kIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSByZWxldmFudCBsb2NrcyB0byB1c2UgaXQuXFxuMzQ2MzpcXHQgKi9cXG4zNDY0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4zNDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuMzQ2NjpcXHR7XFxuMzQ2NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjM0Njg6XFx0XFxuMzQ2OTpcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpXFxuMzQ3MDpcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4zNDcxOlxcdH1cXG4zNDcyOlxcdFxcbjM0NzM6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuMzQ3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjQwLjc0MzM5OTk3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDEyNzkxMzkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2tiX2NvcHlfdWJ1ZnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIGBza2JfY29weV91YnVmc2AgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGRldGFpbHMgb2YgaG93IHVzZXItc3BhY2UgYnVmZmVycyBnZXQgY29waWVkIGludG8gU0tCcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGlmIGl0J3MgYSB6ZXJvLWNvcHkgbWVjaGFuaXNtIG9yIGluY3VycyBhIHRyYWRpdGlvbmFsIGNvcHkuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVzaW5nIHNjYXR0ZXItZ2F0aGVyIHRvIGltcHJvdmUgRE1BIGVmZmljaWVuY3ksIGVzcGVjaWFsbHkgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGludm9sdmVkIGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBpbnRlcnJ1cHQgY29udGV4dHMuIFdoYXQga2luZCBvZiBtZW1vcnkgYmFycmllcnMgb3IgYXRvbWljcyBhcmUgdXNlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZXM/IEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBwYXJ0aWN1bGFyIG5ldHdvcmsgY2FyZHMgb3IgYnVmZmVyIHNpemVzLiBJbiBteSBoZWFkLCBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGxpa2VseSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjUwLjg3MTMxNjU1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNTI0MTU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc2tiX2NvcHlfdWJ1ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNDM4PXZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE0Mzk6aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE0NDAtc3RydWN0IHNrX2J1ZmYgKnNrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmlvcml0eSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTY1PXN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5OTktICovXFxubmV0L2NvcmUvc2tidWZmLmM6MjAwMDppbnQgc2tiX2NvcHlfdWJ1ZnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXFxubmV0L2NvcmUvc2tidWZmLmMtMjAwMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMyOjUzLjAwNjU2NTc3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjQwMzEyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgc2tiX2NvcHlfdWJ1ZnNgIGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHNrYl9jb3B5X3VidWZzKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCBgc2tiX2NvcHlfdWJ1ZnNgIGZyb20gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gSXQncyBvYnZpb3VzbHkgaW52b2x2ZWQgaW4gY29weWluZyBVc2VyIEJ1ZmZlciBGcmFtZXMgKFVCdWZzKSB3aXRoaW4gYW4gU0tCLCBzbyB0aGlzIGlzIGNyaXRpY2FsIGZvciBlZmZpY2llbmN5IHdoZW4gcGFzc2luZyBkYXRhIGJldHdlZW4gdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlLCBvciB3aGVuIGNsb25pbmcgU0tCcy4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgZGF0YSBwb2ludGVyLCBkYXRhIGxlbmd0aCwgaGVhZHJvb20sIGFuZCB0YWlscm9vbSBhZGp1c3RtZW50cy4gQXJlIHRoZXkgdXNpbmcgRE1BLWNhcGFibGUgYnVmZmVycywgb3IgaXMgaXQgYWx3YXlzIENQVSBjb3BpZXM/IFdoYXQncyB0aGUgc3RyYXRlZ3kgaWYgYSBjb3B5IG9mIHRoZSB1YnVmIGlzIG5lZWRlZD8gSXMgaXQgY29weWluZyB0aGUgdWJ1Ziwgb3IgbWFraW5nIHRoZSBTS0IgcG9pbnQgdG8gdGhlIHNhbWUgVUJ1ZiwgaW5jcmVhc2luZyB0aGUgcmVmZXJlbmNlIGNvdW50LCBvciB1c2luZyB0aGUgZGF0YSBhcyBhIENPVyBidWZmZXI/IEknbSBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYywgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocywgdG9vLiBXZSBkb24ndCB3YW50IGFueSBtZW1vcnkgbGVha3Mgb3IgdW5leHBlY3RlZCBzZWdtZW50YXRpb24gZmF1bHRzIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgbG9ja2luZywgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW4gZGVwdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMjo1Ny4yNDY4ODE1MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMDA6XFx0aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbjIwMDE6XFx0e1xcbjIwMDI6XFx0XFx0aW50IG51bV9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7XFxuMjAwMzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgKmhlYWQgPSBOVUxMO1xcbjIwMDQ6XFx0XFx0aW50IGksIG9yZGVyLCBwc2l6ZSwgbmV3X2ZyYWdzO1xcbjIwMDU6XFx0XFx0dTMyIGRfb2ZmO1xcbjIwMDY6XFx0XFxuMjAwNzpcXHRcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbjIwMDg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjAwOTpcXHRcXG4yMDEwOlxcdFxcdGlmIChza2Jfc2hhcmVkKHNrYikgfHwgc2tiX3VuY2xvbmUoc2tiLCBnZnBfbWFzaykpXFxuMjAxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMDEyOlxcdFxcbjIwMTM6XFx0XFx0aWYgKCFudW1fZnJhZ3MpXFxuMjAxNDpcXHRcXHRcXHRnb3RvIHJlbGVhc2U7XFxuMjAxNTpcXHRcXG4yMDE2OlxcdFxcdC8qIFdlIG1pZ2h0IGhhdmUgdG8gYWxsb2NhdGUgaGlnaCBvcmRlciBwYWdlcywgc28gY29tcHV0ZSB3aGF0IG1pbmltdW1cXG4yMDE3OlxcdFxcdCAqIHBhZ2Ugb3JkZXIgaXMgbmVlZGVkLlxcbjIwMTg6XFx0XFx0ICovXFxuMjAxOTpcXHRcXHRvcmRlciA9IDA7XFxuMjAyMDpcXHRcXHR3aGlsZSAoKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikgKiBNQVhfU0tCX0ZSQUdTIFxcdTAwM2MgX19za2JfcGFnZWxlbihza2IpKVxcbjIwMjE6XFx0XFx0XFx0b3JkZXIrKztcXG4yMDIyOlxcdFxcdHBzaXplID0gKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuMjAyMzpcXHRcXG4yMDI0OlxcdFxcdG5ld19mcmFncyA9IChfX3NrYl9wYWdlbGVuKHNrYikgKyBwc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIChQQUdFX1NISUZUICsgb3JkZXIpO1xcbjIwMjU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ld19mcmFnczsgaSsrKSB7XFxuMjAyNjpcXHRcXHRcXHRwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9DT01QLCBvcmRlcik7XFxuMjAyNzpcXHRcXHRcXHRpZiAoIXBhZ2UpIHtcXG4yMDI4OlxcdFxcdFxcdFxcdHdoaWxlIChoZWFkKSB7XFxuMjAyOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqbmV4dCA9IChzdHJ1Y3QgcGFnZSAqKXBhZ2VfcHJpdmF0ZShoZWFkKTtcXG4yMDMwOlxcdFxcdFxcdFxcdFxcdHB1dF9wYWdlKGhlYWQpO1xcbjIwMzE6XFx0XFx0XFx0XFx0XFx0aGVhZCA9IG5leHQ7XFxuMjAzMjpcXHRcXHRcXHRcXHR9XFxuMjAzMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDM0OlxcdFxcdFxcdH1cXG4yMDM1OlxcdFxcdFxcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgKHVuc2lnbmVkIGxvbmcpaGVhZCk7XFxuMjAzNjpcXHRcXHRcXHRoZWFkID0gcGFnZTtcXG4yMDM3OlxcdFxcdH1cXG4yMDM4OlxcdFxcbjIwMzk6XFx0XFx0cGFnZSA9IGhlYWQ7XFxuMjA0MDpcXHRcXHRkX29mZiA9IDA7XFxuMjA0MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2ZyYWdzOyBpKyspIHtcXG4yMDQyOlxcdFxcdFxcdHNrYl9mcmFnX3QgKmYgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXTtcXG4yMDQzOlxcdFxcdFxcdHUzMiBwX29mZiwgcF9sZW4sIGNvcGllZDtcXG4yMDQ0OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbjIwNDU6XFx0XFx0XFx0dTggKnZhZGRyO1xcbjIwNDY6XFx0XFxuMjA0NzpcXHRcXHRcXHRza2JfZnJhZ19mb3JlYWNoX3BhZ2UoZiwgc2tiX2ZyYWdfb2ZmKGYpLCBza2JfZnJhZ19zaXplKGYpLFxcbjIwNDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgcCwgcF9vZmYsIHBfbGVuLCBjb3BpZWQpIHtcXG4yMDQ5OlxcdFxcdFxcdFxcdHUzMiBjb3B5LCBkb25lID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzI6NTcuMjQ3MjU3MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjgyNTA2MTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHNrYl9jb3B5X3VidWZzYCBGdXJ0aGVyKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSByZXN0IG9mIGBza2JfY29weV91YnVmc2AuIEkndmUgbG9va2VkIGF0IHRoZSBzZXR1cCwgYW5kIG5vdyBJIG5lZWQgdG8gZmxlc2ggb3V0IHRoZSBmdW5jdGlvbiBpbiBteSBtaW5kLiBXaGF0IGFyZSB0aGUgY29yZSBtZWNoYW5pY3Mgb2YgY29weWluZyB1c2VyLXNwYWNlIGJ1ZmZlcnMgaW50byBhbiBgc2tiYD8gV2UndmUgZ290IHRoZSBkYXRhIHBvaW50ZXIsIHRoZSBsZW5ndGgsIGFuZCB0aGUgZGVzdGluYXRpb24gYHNrYmAgYWxsIHByZXBwZWQsIGJ1dCB3aGF0IGhhcHBlbnMgKndpdGhpbiogdGhpcyBjcnVjaWFsIGZ1bmN0aW9uP1xuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBpdC4gSSBzdXNwZWN0IHRoZXJlJ3MgbGlrZWx5IHNvbWUga2luZCBvZiBsb29wIG9yIGl0ZXJhdGl2ZSBwcm9jZXNzIHRvIGhhbmRsZSBwb3RlbnRpYWxseSBmcmFnbWVudGVkIHVzZXItc3BhY2UgbWVtb3J5LiBXZSBjYW4ndCBhc3N1bWUgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgYmxvY2ssIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY2xldmVybmVzcyBsaWVzIGluIHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMuIEhvdyBkb2VzIGl0IGRlYWwgd2l0aCB0aGUgbnVhbmNlcyBvZiBwYWdlIGZhdWx0cyBhbmQgYWNjZXNzIHBlcm1pc3Npb25zIHdoZW4gcmVhZGluZyBmcm9tIHVzZXIgc3BhY2U/IEFyZSB0aGVyZSBvcHRpbWl6YXRpb25zIGZvciBjb21tb24gc2l6ZXMgb3IgYWxpZ25tZW50IHNjZW5hcmlvcz8gQXJlIHRoZXkgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIGNvcHk/IERvZXMgaXQgZ3JhY2VmdWxseSBoYW5kbGUgcGFydGlhbCBjb3BpZXMsIG9yIGRvZXMgaXQgYmFpbCBvdXQ/XG5cbkknbSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBhdGggaW4gbWFueSBuZXR3b3JraW5nIG9wZXJhdGlvbnMsIHNvIGV2ZXJ5IGluc3RydWN0aW9uIGNvdW50cy4gRG9lcyBpdCBlbXBsb3kgYW55IGNsZXZlciB0cmlja3MgbGlrZSBwcmVmZXRjaGluZywgb3IgcGVyaGFwcyB1c2UgYSBkZWRpY2F0ZWQgRE1BIGVuZ2luZSB0byBieXBhc3MgdGhlIENQVT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBwb3RlbnRpYWwgaW1wcm92ZW1lbnQsIHBlcmhhcHMgdXNpbmcgdmVjdG9yIGluc3RydWN0aW9ucyBvciBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaWYgYXZhaWxhYmxlP1xuXG5SaWdodCBub3cgSSdtIGZvcm11bGF0aW5nIHRoZSBwb3NzaWJpbGl0aWVzIGFzIEkgY29uc2lkZXIgdGhlIGZ1bmN0aW9uIGNhbGwuIFdpdGggbXkgZmFtaWxpYXJpdHkgb2Yga2VybmVsIGNvZGUsIEkgYW50aWNpcGF0ZSB0aGUgbmVlZCBmb3Igc2FmZXR5IGNoZWNrcyB0byBlbnN1cmUgdGhlIHZhbGlkaXR5IG9mIHRoZSB1c2VyLXNwYWNlIHBvaW50ZXJzIGFuZCB0aGUgcmVxdWVzdGVkIGNvcHkgc2l6ZSwgYXMgd2VsbCBhcyBjb25zaWRlcmluZyBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMuIFRpbWUgdG8gc3RhcnQgZ29pbmcgZGVlcGVyIGFuZCBhbmFseXppbmcgdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjMzOjA0LjA3MjMyMDY2MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA1MDpcXHRcXHRcXHRcXHR2YWRkciA9IGttYXBfYXRvbWljKHApO1xcbjIwNTE6XFx0XFxuMjA1MjpcXHRcXHRcXHRcXHR3aGlsZSAoZG9uZSBcXHUwMDNjIHBfbGVuKSB7XFxuMjA1MzpcXHRcXHRcXHRcXHRcXHRpZiAoZF9vZmYgPT0gcHNpemUpIHtcXG4yMDU0OlxcdFxcdFxcdFxcdFxcdFxcdGRfb2ZmID0gMDtcXG4yMDU1OlxcdFxcdFxcdFxcdFxcdFxcdHBhZ2UgPSAoc3RydWN0IHBhZ2UgKilwYWdlX3ByaXZhdGUocGFnZSk7XFxuMjA1NjpcXHRcXHRcXHRcXHRcXHR9XFxuMjA1NzpcXHRcXHRcXHRcXHRcXHRjb3B5ID0gbWluX3QodTMyLCBwc2l6ZSAtIGRfb2ZmLCBwX2xlbiAtIGRvbmUpO1xcbjIwNTg6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KHBhZ2VfYWRkcmVzcyhwYWdlKSArIGRfb2ZmLFxcbjIwNTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZhZGRyICsgcF9vZmYgKyBkb25lLCBjb3B5KTtcXG4yMDYwOlxcdFxcdFxcdFxcdFxcdGRvbmUgKz0gY29weTtcXG4yMDYxOlxcdFxcdFxcdFxcdFxcdGRfb2ZmICs9IGNvcHk7XFxuMjA2MjpcXHRcXHRcXHRcXHR9XFxuMjA2MzpcXHRcXHRcXHRcXHRrdW5tYXBfYXRvbWljKHZhZGRyKTtcXG4yMDY0OlxcdFxcdFxcdH1cXG4yMDY1OlxcdFxcdH1cXG4yMDY2OlxcdFxcbjIwNjc6XFx0XFx0Lyogc2tiIGZyYWdzIHJlbGVhc2UgdXNlcnNwYWNlIGJ1ZmZlcnMgKi9cXG4yMDY4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZnJhZ3M7IGkrKylcXG4yMDY5OlxcdFxcdFxcdHNrYl9mcmFnX3VucmVmKHNrYiwgaSk7XFxuMjA3MDpcXHRcXG4yMDcxOlxcdFxcdC8qIHNrYiBmcmFncyBwb2ludCB0byBrZXJuZWwgYnVmZmVycyAqL1xcbjIwNzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5ld19mcmFncyAtIDE7IGkrKykge1xcbjIwNzM6XFx0XFx0XFx0X19za2JfZmlsbF9uZXRtZW1fZGVzYyhza2IsIGksIHBhZ2VfdG9fbmV0bWVtKGhlYWQpLCAwLCBwc2l6ZSk7XFxuMjA3NDpcXHRcXHRcXHRoZWFkID0gKHN0cnVjdCBwYWdlICopcGFnZV9wcml2YXRlKGhlYWQpO1xcbjIwNzU6XFx0XFx0fVxcbjIwNzY6XFx0XFx0X19za2JfZmlsbF9uZXRtZW1fZGVzYyhza2IsIG5ld19mcmFncyAtIDEsIHBhZ2VfdG9fbmV0bWVtKGhlYWQpLCAwLFxcbjIwNzc6XFx0XFx0XFx0XFx0ICAgICAgIGRfb2ZmKTtcXG4yMDc4OlxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3MgPSBuZXdfZnJhZ3M7XFxuMjA3OTpcXHRcXG4yMDgwOlxcdHJlbGVhc2U6XFxuMjA4MTpcXHRcXHRza2JfemNvcHlfY2xlYXIoc2tiLCBmYWxzZSk7XFxuMjA4MjpcXHRcXHRyZXR1cm4gMDtcXG4yMDgzOlxcdH1cXG4yMDg0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3B5X3VidWZzKTtcXG4yMDg1OlxcdFxcbjIwODY6XFx0LyoqXFxuMjA4NzpcXHQgKlxcdHNrYl9jbG9uZVxcdC1cXHRkdXBsaWNhdGUgYW4gc2tfYnVmZlxcbjIwODg6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gY2xvbmVcXG4yMDg5OlxcdCAqXFx0QGdmcF9tYXNrOiBhbGxvY2F0aW9uIHByaW9yaXR5XFxuMjA5MDpcXHQgKlxcbjIwOTE6XFx0ICpcXHREdXBsaWNhdGUgYW4gXFx1MDAyNnNrX2J1ZmYuIFRoZSBuZXcgb25lIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldC4gQm90aFxcbjIwOTI6XFx0ICpcXHRjb3BpZXMgc2hhcmUgdGhlIHNhbWUgcGFja2V0IGRhdGEgYnV0IG5vdCBzdHJ1Y3R1cmUuIFRoZSBuZXdcXG4yMDkzOlxcdCAqXFx0YnVmZmVyIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLiBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscyB0aGVcXG4yMDk0OlxcdCAqXFx0ZnVuY3Rpb24gcmV0dXJucyAlTlVMTCBvdGhlcndpc2UgdGhlIG5ldyBidWZmZXIgaXMgcmV0dXJuZWQuXFxuMjA5NTpcXHQgKlxcbjIwOTY6XFx0ICpcXHRJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBnZnBfbWFzaygpIG11c3QgYmVcXG4yMDk3OlxcdCAqXFx0JUdGUF9BVE9NSUMuXFxuMjA5ODpcXHQgKi9cXG4yMDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMzowNC4wNzI1Nzc1OTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU2NzA0NTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3BiYWNrIEludGVyZmFjZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9uZXQvbG9vcGJhY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3BiYWNrX3htaXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGUga2V5IGNoYW5nZSBpcyBhZGRpbmcgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWVkZWQgYW5kIGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgS01TQU4gd291bGQgZmxhZy5cblxuVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHByb2JsZW06ICBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIGFuZCB6ZXJvLWNvcHkgZnJhZ3MgZnJvbSB1c2Vyc3BhY2UgKGxpa2UgQUZfUEFDS0VUIFRYIHJpbmdzKSwgYHNrYl9vcnBoYW5gIHdhcyBydW5uaW5nIHRoZSBzb2NrZXQncyBkZXN0cnVjdG9yIHByZW1hdHVyZWx5LiBUaGlzIG1lYW50IHVzZXIgc3BhY2UgY291bGQgb3ZlcndyaXRlIHRoZSBtZW1vcnkgdGhlIGBza2JgJ3MgZnJhZ3Mgd2VyZSBwb2ludGluZyB0byAqYmVmb3JlKiB0aGUgbG9vcGVkLWJhY2sgcGFja2V0IHdhcyBhY3R1YWxseSBwcm9jZXNzZWQsIGxlYWRpbmcgdG8gZGF0YSBjb3JydXB0aW9uLiBUaGUgYHNrYl9vcnBoYW5fZnJhZ3NfcnhgIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHByZXZlbnQgdGhpcy4gSXQgY29waWVzIHRoZSB1c2VyLXNwYWNlIGZyYWdzIGludG8ga2VybmVsIHBhZ2VzIGJlZm9yZSBvcnBoYW5pbmcgdGhlIGBza2JgLiBJZiB0aGlzIGNvcHkgZmFpbHMgKGFsbG9jYXRpb24gb3IgZmF1bHQpLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY291bnRlcnMuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIEtNU0FOIGltcGxpY2F0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBzeXN0ZW1hdGljYWxseSBnbyB0aHJvdWdoIGNvbW1vbiBLTVNBTiBzY2VuYXJpb3M6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHb29kLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIGBza2Jfb3JwaGFuX2ZyYWdzX3J4YCBvcGVyYXRlcyBvbiAqaW5pdGlhbGl6ZWQqIGBza2JgIGZpZWxkcyBhbmQgcmV0dXJucyBhbiBlcnJvciBjb2RlIHRoYXQgd2UgaGFuZGxlLiBTbywgbm8gcmlzayB0aGVyZS5cbjMuICAqKkFsbG9jYXRpb24vSW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBPa2F5LCBsZXQncyB0aGluayBhYm91dCB0aGlzIG9uZSBjYXJlZnVsbHkuIGBza2JfY29weV91YnVmc2AgZ2V0cyBjYWxsZWQgaW4gYHNrYl9vcnBoYW5fZnJhZ3NfcnhgLiBOZXdseSBhbGxvY2F0ZWQgcGFnZXMgKmFyZSogZmlsbGVkIHdpdGggYG1lbWNweWAgZnJvbSB1c2VyIGZyYWdzLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBwcmV2ZW50cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBubyBpc3N1ZSBoZXJlLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vLCB0aGUgY29kZSdzIGxvZ2ljIGlzIHNvdW5kLiBXZSBhcmUgbm90IGFjY2Vzc2luZyBhbnl0aGluZyB1bmluaXRpYWxpemVkLlxuNS4gICoqRGF0YSBSYWNlcyoqOiBZZXMsIHRoaXMgYWN0dWFsbHkgKmZpeGVzKiB0aGUgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byB1c2VyIHNwYWNlIG92ZXJ3cml0aW5nIG1lbW9yeS5cblxuU28sIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBpdCBzZWVtcyB0aGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGZpeCwgYnV0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgZXhwbGljaXRseSBjb3B5aW5nIHRoZSByZWxldmFudCB1c2VyLXNwYWNlIGRhdGEgYmVmb3JlIGFueSBvcnBoYW5pbmcgb2NjdXJzLCBwcmV2ZW50aW5nIGFjY2VzcyB0byBwb3RlbnRpYWxseSBmcmVlZCBtZW1vcnkuIEV2ZW4gdGhlIGVycm9yIHBhdGgsIHdoZXJlIHRoZSBjb3B5IGZhaWxzLCBjb3JyZWN0bHkgZHJvcHMgdGhlIHBhY2tldC5cblxuT2theSwgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlIGluIGBsb29wYmFja194bWl0YDpcblxuYGBgY1xuK1x0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKSkpIHtcbitcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQpO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0fVxuYGBgXG5cblRoaXMgaXMgdGhlIHN0YW5kYXJkIHBhdHRlcm4gd2Ugc2VlIGluIHBsYWNlcyBzdWNoIGFzIGB0dW5fbmV0X3htaXRgLiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vdGhpbmcgdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5JbiBjb25jbHVzaW9uOiAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqIFRoaXMgaXMgYSBmaXggZm9yIG1lbW9yeSBzYWZldHkgYW5kIGEgcmFjZSBjb25kaXRpb24sIGJ1dCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgY29uY2VybmVkIGFib3V0LiBUaGUgY29kZSBpcyBjbGVhbiBhbmQgcHJvcGVybHkgaGFuZGxlcyBhbGwgY2FzZXMuIFRoaXMgaXMgYSBzb2xpZCBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozMzoxMC42Mzk2MjcyOTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBza2Jfb3JwaGFuX2ZyYWdzX3J4KHNrYiwgR0ZQX0FUT01JQylgIGluIGBsb29wYmFja194bWl0KClgIGJlZm9yZSBgc2tiX29ycGhhbihza2IpYCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB6ZXJvY29weSBmcmFncyAoZS5nLiBBRl9QQUNLRVQgVFggcmluZykgYmVpbmcgbW9kaWZpZWQgYnkgdXNlcnNwYWNlIGJlZm9yZSB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZSBhbGxvY2F0ZWQgcGFnZXMgZm9yIGZyYWcgY29weWluZyBhcmUgZnVsbHkgd3JpdHRlbiBieSBgbWVtY3B5YCB3aXRoaW4gYHNrYl9jb3B5X3VidWZzKClgLiBBbnkgZmFpbHVyZSBwYXRocyBzYWZlbHkgZHJvcCB0aGUgcGFja2V0IHZpYSBga2ZyZWVfc2tiX3JlYXNvbigpYC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYHNrYl9vcnBoYW5fZnJhZ3Nfcngoc2tiLCBHRlBfQVRPTUlDKWAgaW4gYGxvb3BiYWNrX3htaXQoKWAgYmVmb3JlIGBza2Jfb3JwaGFuKHNrYilgIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHplcm9jb3B5IGZyYWdzIChlLmcuIEFGX1BBQ0tFVCBUWCByaW5nKSBiZWluZyBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYmVmb3JlIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlIGFsbG9jYXRlZCBwYWdlcyBmb3IgZnJhZyBjb3B5aW5nIGFyZSBmdWxseSB3cml0dGVuIGJ5IGBtZW1jcHlgIHdpdGhpbiBgc2tiX2NvcHlfdWJ1ZnMoKWAuIEFueSBmYWlsdXJlIHBhdGhzIHNhZmVseSBkcm9wIHRoZSBwYWNrZXQgdmlhIGBrZnJlZV9za2JfcmVhc29uKClgLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5ck9r[1] Phase: Succeeded StartedAt: 2026-09-09 11:33:21 +0000 UTC FinishedAt: 2026-09-09 11:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 11:33:21 +0000 UTC FinishedAt: 2026-09-09 11:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2] Phase: Succeeded StartedAt: 2026-09-09 11:33:21 +0000 UTC FinishedAt: 2026-09-09 15:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 11:33:21 +0000 UTC FinishedAt: 2026-09-09 15:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 11:33:21 +0000 UTC FinishedAt: 2026-09-09 11:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 11:33:21 +0000 UTC FinishedAt: 2026-09-09 11:33:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-convert-artifact-3729552823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 11:33:32 +0000 UTC FinishedAt: 2026-09-09 11:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 11:33:32 +0000 UTC FinishedAt: 2026-09-09 11:53:18 +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:*fdd06c1f-cff4-4aeb-9247-3482faa62820,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-workflow5ck9r/series-workflow5ck9r-convert-artifact-3729552823/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": "f2b6b30d-1e68-4cec-af70-0547b5a3f232", "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-workflow5ck9r/series-workflow5ck9r-build-action-124900621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 11:33:32 +0000 UTC FinishedAt: 2026-09-09 11:53:08 +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:*fdd06c1f-cff4-4aeb-9247-3482faa62820,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-workflow5ck9r/series-workflow5ck9r-convert-artifact-3729552823/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": "f2b6b30d-1e68-4cec-af70-0547b5a3f232", "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-workflow5ck9r/series-workflow5ck9r-build-action-124900621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 11:53:18 +0000 UTC FinishedAt: 2026-09-09 11:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 11:53:18 +0000 UTC FinishedAt: 2026-09-09 11:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 11:53:18 +0000 UTC FinishedAt: 2026-09-09 11:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 11:53:18 +0000 UTC FinishedAt: 2026-09-09 11:53:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-convert-artifact-1891943142/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 11:53:28 +0000 UTC FinishedAt: 2026-09-09 11:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 11:53:28 +0000 UTC FinishedAt: 2026-09-09 11:55:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2b6b30d-1e68-4cec-af70-0547b5a3f232,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-workflow5ck9r/series-workflow5ck9r-build-action-124900621/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-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 11:55:32 +0000 UTC FinishedAt: 2026-09-09 11:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 11:55:32 +0000 UTC FinishedAt: 2026-09-09 11:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 11:55:32 +0000 UTC FinishedAt: 2026-09-09 12:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 11:55:32 +0000 UTC FinishedAt: 2026-09-09 12:14:53 +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:*fdd06c1f-cff4-4aeb-9247-3482faa62820,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-workflow5ck9r/series-workflow5ck9r-convert-artifact-1891943142/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": "dfa5e1c2-0394-4bb2-b17d-e73600ea20c7", "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-workflow5ck9r/series-workflow5ck9r-build-action-1637709994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 11:55:32 +0000 UTC FinishedAt: 2026-09-09 12:14:43 +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:*fdd06c1f-cff4-4aeb-9247-3482faa62820,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-workflow5ck9r/series-workflow5ck9r-convert-artifact-1891943142/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": "dfa5e1c2-0394-4bb2-b17d-e73600ea20c7", "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-workflow5ck9r/series-workflow5ck9r-build-action-1637709994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 12:14:53 +0000 UTC FinishedAt: 2026-09-09 12:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 12:14:53 +0000 UTC FinishedAt: 2026-09-09 12:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 12:14:53 +0000 UTC FinishedAt: 2026-09-09 12:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 12:14:53 +0000 UTC FinishedAt: 2026-09-09 12:16:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dfa5e1c2-0394-4bb2-b17d-e73600ea20c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-build-action-1637709994/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-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 15:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 15:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f2b6b30d-1e68-4cec-af70-0547b5a3f232,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dfa5e1c2-0394-4bb2-b17d-e73600ea20c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-build-action-124900621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-build-action-1637709994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 12:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 12:16:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-convert-artifact-4144475691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 12:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 12:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 12:16:43 +0000 UTC FinishedAt: 2026-09-09 12:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 12:16:54 +0000 UTC FinishedAt: 2026-09-09 15:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5ck9r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["loopback_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"6c846d11-fb8f-46fb-b296-948661e26485","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 12:16:54 +0000 UTC FinishedAt: 2026-09-09 15:17:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2b6b30d-1e68-4cec-af70-0547b5a3f232,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dfa5e1c2-0394-4bb2-b17d-e73600ea20c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-build-action-124900621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-build-action-1637709994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5ck9r/series-workflow5ck9r-convert-artifact-4144475691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}