Name: series-workflowkv5g6 Phase: Succeeded StartedAt: 2026-08-06 03:22:02 +0000 UTC FinishedAt: 2026-08-06 07:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[0] Phase: Succeeded StartedAt: 2026-08-06 03:22:02 +0000 UTC FinishedAt: 2026-08-06 03:54:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 03:22:02 +0000 UTC FinishedAt: 2026-08-06 03:54:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZRAM_MULTI_COMP", "ZRAM_MEMORY_TRACKING", "DEBUG_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZRAM_MULTI_COMP", "ZRAM_MEMORY_TRACKING", "DEBUG_FS" ], "series_id": "8438b9ed-e870-44a2-a8b8-a5bedec2a0bb" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "disksize_store", "zram_submit_bio", "read_block_state", "writeback_store", "recompress_store", "reset_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlJBTV9NVUxUSV9DT01QJiMzNDssCiAgICAmIzM0O1pSQU1fTUVNT1JZX1RSQUNLSU5HJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7enJhbV9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JlYWRfYmxvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcHJlc3Nfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVzZXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgenJhbSBzbG90IGluZGV4IGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIHRocm91Z2hvdXQgdGhlIHpyYW0gZHJpdmVyIHRvIHN1cHBvcnQgZGV2aWNlcyBsYXJnZXIgdGhhbiAxNlRCIG9uIDY0LWJpdCBzeXN0ZW1zIGFuZCBwcmV2ZW50IG92ZXJmbG93IG9uIDMyLWJpdCBzeXN0ZW1zLiBJdCBhbHNvIGFkZHMgYSBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgIHRvIHByZXZlbnQgY29uZmlndXJpbmcgYSBkaXNrIHNpemUgdGhhdCB3b3VsZCBvdmVyZmxvdyB0aGUgYHVuc2lnbmVkIGxvbmdgIGluZGV4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBkcml2ZXIgbG9naWMuIFRvIHRlc3QgdGhlc2UgY2hhbmdlcywgd2Ugc2hvdWxkIGZ1enogdGhlIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcyAoYGRpc2tzaXplX3N0b3JlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYHJlc2V0X3N0b3JlYCksIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAoYHJlYWRfYmxvY2tfc3RhdGVgKSwgYW5kIHRoZSBibG9jayBkZXZpY2UgSU8gZW50cnkgcG9pbnQgKGB6cmFtX3N1Ym1pdF9iaW9gKS4gV2UgbmVlZCB0byBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gY29tcGlsZSBhbmQgdGVzdCBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Y2MyYmNkOWI2NmJiY2U1NTBlMDVmNWE0YWVkYzE3NmMzMWNkOWNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMzo1Mjo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCA1NjE4M2M4MjdlMWIzLi42YWY5NzdkYmM2ZmRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNTYsNyAmIzQzOzU2LDcgQEAgc3RhdGljIHNpemVfdCBodWdlX2NsYXNzX3NpemU7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcztcbiBcbi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7XG4mIzQzO3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4gXG4gLypcbiAgKiBlbnRyeSBsb2NraW5nIHJ1bGVzOlxuQEAgLTcwLDcgJiM0Mzs3MCw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KTtcbiAgKiA0KSBVc2UgVFJZIGxvY2sgdmFyaWFudCB3aGVuIGluIGF0b21pYyBjb250ZXh0XG4gICogICAgLSBtdXN0IGNoZWNrIHJldHVybiB2YWx1ZSBhbmQgaGFuZGxlIGxvY2tpbmcgZmFpbGVyc1xuICAqL1xuLXN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIF9fbXVzdF9jaGVjayBib29sIHNsb3RfdHJ5bG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXHUwMDI2enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uX19sb2NrO1xuIFxuQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXHUwMDI2enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uX19sb2NrO1xuIFxuQEAgLTkyLDcgJiM0Mzs5Miw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuIFx0bG9ja19hY3F1aXJlZChcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlX2xvY2tfbWFwLCBfUkVUX0lQXyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNsb3RfdW5sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB2b2lkIHNsb3RfdW5sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmxvY2sgPSBcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XG4gXG5AQCAtMTEwLDU1ICYjNDM7MTEwLDU2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHpyYW0gKmRldl90b196cmFtKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiAoc3RydWN0IHpyYW0gKilkZXZfdG9fZGlzayhkZXYpLVx1MDAzZXByaXZhdGVfZGF0YTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRyZXR1cm4genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uaGFuZGxlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG4mIzQzO3N0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxuIHtcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmhhbmRsZSA9IGhhbmRsZTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcbiYjNDM7c3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4gXHRcdFx0ICAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKVxuIHtcbiBcdHJldHVybiB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFx1MDAyNiBCSVQoZmxhZyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiBcdFx0XHQgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcbiB7XG4gXHR6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IEJJVChmbGFnKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiBcdFx0XHQgICAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKVxuIHtcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXHUwMDI2PSB+QklUKGZsYWcpO1xuIH1cbiBcbi1zdGF0aWMgc2l6ZV90IGdldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIHNpemVfdCBnZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHJldHVybiB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFx1MDAyNiAoQklUKFpSQU1fRkxBR19TSElGVCkgLSAxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzaXplX3Qgc2l6ZSlcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXHUwMDNlXHUwMDNlIFpSQU1fRkxBR19TSElGVDtcbiBcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgPSAoZmxhZ3MgXHUwMDNjXHUwMDNjIFpSQU1fRkxBR19TSElGVCkgfCBzaXplO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2xvdF9hbGxvY2F0ZWQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsb3RfYWxsb2NhdGVkKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHJldHVybiBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSB8fFxuIFx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxuIFx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9XQik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4tXHRcdFx0XHRcdCAgdTMyIHByaW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbylcbiB7XG4gXHRwcmlvIFx1MDAyNj0gWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7XG4gXHQvKlxuQEAgLTE3MCwxNCAmIzQzOzE3MSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxuIFx0enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyB8PSAocHJpbyBcdTAwM2NcdTAwM2MgWlJBTV9DT01QX1BSSU9SSVRZX0JJVDEpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGdldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dTMyIHByaW8gPSB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFx1MDAzZVx1MDAzZSBaUkFNX0NPTVBfUFJJT1JJVFlfQklUMTtcbiBcbiBcdHJldHVybiBwcmlvIFx1MDAyNiBaUkFNX0NPTVBfUFJJT1JJVFlfTUFTSztcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFya19zbG90X2FjY2Vzc2VkKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fUFBfU0xPVCk7XG5AQCAtMjg0LDcgJiM0MzsyODUsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3BwX2N0bChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpXG4gfVxuIFxuIHN0YXRpYyBib29sIHBsYWNlX3BwX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3BwX2N0bCAqY3RsLFxuLVx0XHRcdCAgdTMyIGluZGV4KVxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpyYW1fcHBfc2xvdCAqcHBzO1xuIFx0dTMyIGJpZDtcbkBAIC00MTgsNyAmIzQzOzQxOSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4ge1xuIFx0aW50IGlzX2lkbGUgPSAxO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHpyYW0tXHUwMDNlZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRpbnQgaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcdTAwM2MgbnJfcGFnZXM7IGluZGV4JiM0MzsmIzQzOykge1xuIFx0XHQvKlxuQEAgLTQ4NSw4ICYjNDM7NDg2LDkgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuICNkZWZpbmUgSU5WQUxJRF9CREVWX0JMT0NLXHRcdCh+MFVMKVxuIFxuIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0dTMyIGluZGV4KTtcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpO1xuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xuJiM0MztzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4gXG4gc3RydWN0IHpyYW1fd2JfY3RsIHtcbiBcdC8qIGlkbGUgbGlzdCBpcyBhY2Nlc3NlZCBvbmx5IGJ5IHRoZSB3cml0ZWJhY2sgdGFzaywgbm8gY29uY3VyZW5jeSAqL1xuQEAgLTUyMiw3ICYjNDM7NTI0LDcgQEAgc3RydWN0IHpyYW1fcmJfcmVxIHtcbiBcdFx0LyogZXJyb3Igc3RhdHVzIChzeW5jIHJlYWQpICovXG4gXHRcdGludCBlcnJvcjtcbiBcdH07XG4tXHR1MzIgaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiB9O1xuIFxuICNkZWZpbmUgRk9VUl9LKHgpICgoeCkgKiAoMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMikpKVxuQEAgLTkxMCw3ICYjNDM7OTEyLDcgQEAgc3RhdGljIHZvaWQgenJhbV9hY2NvdW50X3dyaXRlYmFja19zdWJtaXQoc3RydWN0IHpyYW0gKnpyYW0pXG4gXG4gc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19jb21wbGV0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fd2JfcmVxICpyZXEpXG4ge1xuLVx0dTMyIGluZGV4ID0gcmVxLVx1MDAzZXBwcy1cdTAwM2VpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVxLVx1MDAzZXBwcy1cdTAwM2VpbmRleDtcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBibGtfc3RhdHVzX3RvX2Vycm5vKHJlcS1cdTAwM2ViaW8uYmlfc3RhdHVzKTtcbkBAIC0xMDMyLDcgJiM0MzsxMDM0LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcbiBcdHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxID0gTlVMTDtcbiBcdHN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwcztcbiBcdGludCByZXQgPSAwLCBlcnIgPSAwO1xuLVx0dTMyIGluZGV4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gMDtcbiBcbiBcdHdoaWxlICgocHBzID0gc2VsZWN0X3BwX3Nsb3QoY3RsKSkpIHtcbiBcdFx0aWYgKHpyYW0tXHUwMDNld2JfbGltaXRfZW5hYmxlIFx1MDAyNlx1MDAyNiAhenJhbS1cdTAwM2ViZF93Yl9saW1pdCkge1xuQEAgLTExOTgsNyAmIzQzOzEyMDAsNyBAQCBzdGF0aWMgdm9pZCBzY2FuX3Nsb3RzX2Zvcl93cml0ZWJhY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGxvLCB1bnNpZ25lZCBsb25nIGhpLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgenJhbV9wcF9jdGwgKmN0bClcbiB7XG4tXHR1MzIgaW5kZXggPSBsbztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbG87XG4gXG4gXHR3aGlsZSAoaW5kZXggXHUwMDNjIGhpKSB7XG4gXHRcdGJvb2wgb2sgPSB0cnVlO1xuQEAgLTEyMzUsNyAmIzQzOzEyMzcsNyBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xuLVx0dTY0IG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHVuc2lnbmVkIGxvbmcgbG8gPSAwLCBoaSA9IG5yX3BhZ2VzO1xuIFx0c3RydWN0IHpyYW1fcHBfY3RsICpwcF9jdGwgPSBOVUxMO1xuIFx0c3RydWN0IHpyYW1fd2JfY3RsICp3Yl9jdGwgPSBOVUxMO1xuQEAgLTEzMzMsNyAmIzQzOzEzMzUsOCBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xMzc1LDcgJiM0MzsxMzc4LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB6cmFtX3JiX3JlcSwgd29yayk7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJpb19maXJzdF9wYWdlX2FsbChyZXEtXHUwMDNlYmlvKTtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gcmVxLVx1MDAzZXpyYW07XG4tXHR1MzIgaW5kZXggPSByZXEtXHUwMDNlaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS1cdTAwM2VpbmRleDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG5AQCAtMTQyNiw3ICYjNDM7MTQyOSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYXN5bmNfcmVhZF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0dTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuIFx0XHRcdFx0c3RydWN0IGJpbyAqcGFyZW50KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxO1xuQEAgLTE0NzYsOCAmIzQzOzE0NzksOCBAQCBzdGF0aWMgdm9pZCB6cmFtX3N5bmNfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gICogY2hhaW5lZCBJTyB3aXRoIHBhcmVudCBJTyBpbiBzYW1lIGNvbnRleHQsIGl0JiMzOTtzIGEgZGVhZGxvY2suIFRvIGF2b2lkIHRoYXQsXG4gICogdXNlIGEgd29ya2VyIHRocmVhZCBjb250ZXh0LlxuICAqL1xuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbi1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBibGtfaWR4KVxuJiM0MztzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSByZXE7XG4gXG5AQCAtMTQ5Niw4ICYjNDM7MTQ5OSw5IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiBcdHJldHVybiBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGJsa19pZHgsIHN0cnVjdCBiaW8gKnBhcmVudClcbiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuJiM0MztcdFx0XHQgIHN0cnVjdCBiaW8gKnBhcmVudClcbiB7XG4gXHRhdG9taWM2NF9pbmMoXHUwMDI2enJhbS1cdTAwM2VzdGF0cy5iZF9yZWFkcyk7XG4gXHRpZiAoIXBhcmVudCkge1xuQEAgLTE1MDksOCAmIzQzOzE1MTMsOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuIH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9iZGV2KHN0cnVjdCB6cmFtICp6cmFtKSB7fTtcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0cmV0dXJuIC1FSU87XG4gfVxuQEAgLTE1MzgsNyAmIzQzOzE1NDMsOCBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0Y2hhciAqa2J1Zjtcbi1cdHNzaXplX3QgaW5kZXgsIHdyaXR0ZW4gPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1x0c3NpemVfdCB3cml0dGVuID0gMDtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbkBAIC0xNTYwLDcgJiM0MzsxNTY2LDcgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGNvcGllZCA9IHNucHJpbnRmKGtidWYgJiM0Mzsgd3JpdHRlbiwgY291bnQsXG4tXHRcdFx0XCYjMzQ7JTEyemQgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XCYjMzQ7JTEybHUgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwmIzM0OyxcbiBcdFx0XHRpbmRleCwgenJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lLCAwLFxuIFx0XHRcdHRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1NBTUUpID8gJiMzOTtzJiMzOTsgOiAmIzM5Oy4mIzM5OyxcbiBcdFx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9XQikgPyAmIzM5O3cmIzM5OyA6ICYjMzk7LiYjMzk7LFxuQEAgLTE5NjcsOCAmIzQzOzE5NzMsOCBAQCBzdGF0aWMgc3NpemVfdCBkZWJ1Z19zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXG4ge1xuLVx0c2l6ZV90IG51bV9wYWdlcyA9IGRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0c2l6ZV90IGluZGV4O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdGlmICghenJhbS1cdTAwM2V0YWJsZSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE5ODUsNyAmIzQzOzE5OTEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX21ldGFfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIFxuIHN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIHtcbi1cdHNpemVfdCBudW1fcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBudW1fcGFnZXM7XG4gXG4gXHRudW1fcGFnZXMgPSBkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHpyYW0tXHUwMDNldGFibGUgPSB2emFsbG9jKGFycmF5X3NpemUobnVtX3BhZ2VzLCBzaXplb2YoKnpyYW0tXHUwMDNldGFibGUpKSk7XG5AQCAtMjAwOCw3ICYjNDM7MjAxNCw3IEBAIHN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuJiM0MztzdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXG5AQCAtMjA2Miw3ICYjNDM7MjA2OCw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuIH1cbiBcbiBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgdTMyIGluZGV4KVxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHZvaWQgKm1lbTtcbiBcbkBAIC0yMDczLDcgJiM0MzsyMDc5LDcgQEAgc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIH1cbiBcbiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgdTMyIGluZGV4KVxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dm9pZCAqc3JjLCAqZHN0O1xuQEAgLTIwODgsNyAmIzQzOzIwOTQsOCBAQCBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbkBAIC0yMTEzLDcgJiM0MzsyMTIwLDggQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiB9XG4gXG4gI2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG4tc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbkBAIC0yMTQ1LDcgJiM0MzsyMTUzLDggQEAgc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuXG4gICogQ29ycmVzcG9uZGluZyBaUkFNIHNsb3Qgc2hvdWxkIGJlIGxvY2tlZC5cbiAgKi9cbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdGlmICh0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxuIFx0ICAgICFnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpKVxuQEAgLTIxNTcsOCAmIzQzOzIxNjYsOCBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxuJiM0MztzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0aW50IHJldDtcbiBcbkBAIC0yMTgwLDcgJiM0MzsyMTg5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiBcbiBcdC8qIFNob3VsZCBORVZFUiBoYXBwZW4uIFJldHVybiBiaW8gZXJyb3IgaWYgaXQgZG9lcy4gKi9cbiBcdGlmIChXQVJOX09OKHJldCBcdTAwM2MgMCkpXG4tXHRcdHByX2VycihcJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSV1XFxuXCYjMzQ7LCByZXQsIGluZGV4KTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSVsdVxcblwmIzM0OywgcmV0LCBpbmRleCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0yMTkwLDcgJiM0MzsyMTk5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiAgKiBhbHdheXMgZXhwZWN0cyBhIGZ1bGwgcGFnZSBmb3IgdGhlIG91dHB1dC5cbiAgKi9cbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLVx0XHRcdFx0ICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9JTyk7XG4gXHRpbnQgcmV0O1xuQEAgLTIyMDUsNyAmIzQzOzIyMTQsNyBAQCBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuIH1cbiBcbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi1cdFx0XHQgIHUzMiBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKVxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbiBcdFx0cmV0dXJuIHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5AQCAtMjIxMyw3ICYjNDM7MjIyMiw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuIH1cbiBcbiBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcbi1cdFx0XHRcdCAgdTMyIGluZGV4KVxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0c2xvdF9mcmVlKHpyYW0sIGluZGV4KTtcbkBAIC0yMjI4LDcgJiM0MzsyMjM3LDcgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXG4gfVxuIFxuIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgIHUzMiBpbmRleClcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR2b2lkICpzcmM7XG5AQCAtMjI2OCw3ICYjNDM7MjI3Nyw4IEBAIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuQEAgLTIzMzUsNyAmIzQzOzIzNDUsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiAgKiBUaGlzIGlzIGEgcGFydGlhbCBJTy4gUmVhZCB0aGUgZnVsbCBwYWdlIGJlZm9yZSB3cml0aW5nIHRoZSBjaGFuZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLVx0XHRcdFx0ICAgdTMyIGluZGV4LCBpbnQgb2Zmc2V0KVxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTtcbiBcdGludCByZXQ7XG5AQCAtMjM1Myw3ICYjNDM7MjM2Myw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuIH1cbiBcbiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4tXHRcdFx0ICAgdTMyIGluZGV4LCBpbnQgb2Zmc2V0KVxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgb2Zmc2V0KVxuIHtcbiBcdGlmIChpc19wYXJ0aWFsX2lvKGJ2ZWMpKVxuIFx0XHRyZXR1cm4genJhbV9idmVjX3dyaXRlX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5AQCAtMjQyMSw4ICYjNDM7MjQzMSw5IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbyxcbiAgKlxuICAqIENvcnJlc3BvbmRpbmcgWlJBTSBzbG90IHNob3VsZCBiZSBsb2NrZWQuXG4gICovXG4tc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0ICAgdTY0ICpudW1fcmVjb21wX3BhZ2VzLCB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcbiYjNDM7c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBwYWdlICpwYWdlLCB1NjQgKm51bV9yZWNvbXBfcGFnZXMsXG4mIzQzO1x0XHRcdCAgIHUzMiB0aHJlc2hvbGQsIHUzMiBwcmlvKVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZV9vbGQ7XG5AQCAtMjY3NCw3ICYjNDM7MjY4NSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIHN0YXRpYyB2b2lkIHpyYW1fYmlvX2Rpc2NhcmQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzaXplX3QgbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG4tXHR1MzIgaW5kZXggPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgXHUwMDNlXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdHUzMiBvZmZzZXQgPSAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yIFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcdTAwM2NcdTAwM2NcbiBcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXG5AQCAtMjcxNSw3ICYjNDM7MjcyNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiBcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cdTAwM2ViaV9pdGVyO1xuIFxuIFx0ZG8ge1xuLVx0XHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcbkBAIC0yNzQ2LDcgJiM0MzsyNzU3LDcgQEAgc3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiBcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cdTAwM2ViaV9pdGVyO1xuIFxuIFx0ZG8ge1xuLVx0XHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcbkBAIC0yODYwLDYgJiM0MzsyODcxLDcgQEAgc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4gc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFx0dTY0IGRpc2tzaXplO1xuIFx0c3RydWN0IHpjb21wICpjb21wO1xuIFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xuQEAgLTI4NzcsNiAmIzQzOzI4ODksMTEgQEAgc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdH1cbiBcbiBcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XG4mIzQzO1x0bnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXG4mIzQzO1x0aWYgKCFudW1fcGFnZXMgfHwgKCh1NjQpbnVtX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGlmICghenJhbV9tZXRhX2FsbG9jKHpyYW0sIGRpc2tzaXplKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlJBTV9NVUxUSV9DT01QJiMzNDssCiAgICAmIzM0O1pSQU1fTUVNT1JZX1RSQUNLSU5HJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7enJhbV9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JlYWRfYmxvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcHJlc3Nfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVzZXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgenJhbSBzbG90IGluZGV4IGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIHRocm91Z2hvdXQgdGhlIHpyYW0gZHJpdmVyIHRvIHN1cHBvcnQgZGV2aWNlcyBsYXJnZXIgdGhhbiAxNlRCIG9uIDY0LWJpdCBzeXN0ZW1zIGFuZCBwcmV2ZW50IG92ZXJmbG93IG9uIDMyLWJpdCBzeXN0ZW1zLiBJdCBhbHNvIGFkZHMgYSBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgIHRvIHByZXZlbnQgY29uZmlndXJpbmcgYSBkaXNrIHNpemUgdGhhdCB3b3VsZCBvdmVyZmxvdyB0aGUgYHVuc2lnbmVkIGxvbmdgIGluZGV4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBkcml2ZXIgbG9naWMuIFRvIHRlc3QgdGhlc2UgY2hhbmdlcywgd2Ugc2hvdWxkIGZ1enogdGhlIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcyAoYGRpc2tzaXplX3N0b3JlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYHJlc2V0X3N0b3JlYCksIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAoYHJlYWRfYmxvY2tfc3RhdGVgKSwgYW5kIHRoZSBibG9jayBkZXZpY2UgSU8gZW50cnkgcG9pbnQgKGB6cmFtX3N1Ym1pdF9iaW9gKS4gV2UgbmVlZCB0byBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gY29tcGlsZSBhbmQgdGVzdCBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Y2MyYmNkOWI2NmJiY2U1NTBlMDVmNWE0YWVkYzE3NmMzMWNkOWNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwMzo1Mjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKaW5kZXggNTYxODNjODI3ZTFiMy4uNmFmOTc3ZGJjNmZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyBzaXplX3QgaHVnZV9jbGFzc19zaXplOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzOwogCi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7CiYjNDM7c3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKIAogLyoKICAqIGVudHJ5IGxvY2tpbmcgcnVsZXM6CkBAIC03MCw3ICYjNDM7NzAsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7CiAgKiA0KSBVc2UgVFJZIGxvY2sgdmFyaWFudCB3aGVuIGluIGF0b21pYyBjb250ZXh0CiAgKiAgICAtIG11c3QgY2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBoYW5kbGUgbG9ja2luZyBmYWlsZXJzCiAgKi8KLXN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKJiM0MztzdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc2xvdF90cnlsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgKmxvY2sgPSAmYW1wO3pyYW0tJmd0O3RhYmxlW2luZGV4XS5fX2xvY2s7CiAKQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nICpsb2NrID0gJmFtcDt6cmFtLSZndDt0YWJsZVtpbmRleF0uX19sb2NrOwogCkBAIC05Miw3ICYjNDM7OTIsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2xvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKIAlsb2NrX2FjcXVpcmVkKCZhbXA7enJhbS0mZ3Q7dGFibGVfbG9ja19tYXAsIF9SRVRfSVBfKTsKIH0KIAotc3RhdGljIHZvaWQgc2xvdF91bmxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKJiM0MztzdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nICpsb2NrID0gJmFtcDt6cmFtLSZndDt0YWJsZVtpbmRleF0uX19sb2NrOwogCkBAIC0xMTAsNTUgJiM0MzsxMTAsNTYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgenJhbSAqZGV2X3RvX3pyYW0oc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiAoc3RydWN0IHpyYW0gKilkZXZfdG9fZGlzayhkZXYpLSZndDtwcml2YXRlX2RhdGE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlyZXR1cm4genJhbS0mZ3Q7dGFibGVbaW5kZXhdLmhhbmRsZTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQomIzQzO3N0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpCiB7CiAJenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmhhbmRsZSA9IGhhbmRsZTsKIH0KIAotc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwKIAkJCSAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZykKIHsKIAlyZXR1cm4genJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgJmFtcDsgQklUKGZsYWcpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCiYjNDM7c3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwKIAkJCSAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKQogewogCXpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IEJJVChmbGFnKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCiYjNDM7c3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LAogCQkJICAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZykKIHsKIAl6cmFtLSZndDt0YWJsZVtpbmRleF0uYXR0ci5mbGFncyAmYW1wOz0gfkJJVChmbGFnKTsKIH0KIAotc3RhdGljIHNpemVfdCBnZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIHNpemVfdCBnZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXJldHVybiB6cmFtLSZndDt0YWJsZVtpbmRleF0uYXR0ci5mbGFncyAmYW1wOyAoQklUKFpSQU1fRkxBR19TSElGVCkgLSAxKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzaXplX3Qgc2l6ZSkKJiM0MztzdGF0aWMgdm9pZCBzZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0genJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgJmd0OyZndDsgWlJBTV9GTEFHX1NISUZUOwogCiAJenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgPSAoZmxhZ3MgJmx0OyZsdDsgWlJBTV9GTEFHX1NISUZUKSB8IHNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlyZXR1cm4gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCkgfHwKIAkJdGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHwKIAkJdGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LAotCQkJCQkgIHUzMiBwcmlvKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLAomIzQzOwkJCQkJICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbykKIHsKIAlwcmlvICZhbXA7PSBaUkFNX0NPTVBfUFJJT1JJVFlfTUFTSzsKIAkvKgpAQCAtMTcwLDE0ICYjNDM7MTcxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCiAJenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgfD0gKHByaW8gJmx0OyZsdDsgWlJBTV9DT01QX1BSSU9SSVRZX0JJVDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGlubGluZSB1MzIgZ2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1MzIgcHJpbyA9IHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmZsYWdzICZndDsmZ3Q7IFpSQU1fQ09NUF9QUklPUklUWV9CSVQxOwogCiAJcmV0dXJuIHByaW8gJmFtcDsgWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7CiB9CiAKLXN0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAljbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7CiAJY2xlYXJfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1BQX1NMT1QpOwpAQCAtMjg0LDcgJiM0MzsyODUsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3BwX2N0bChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpCiB9CiAKIHN0YXRpYyBib29sIHBsYWNlX3BwX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3BwX2N0bCAqY3RsLAotCQkJICB1MzIgaW5kZXgpCiYjNDM7CQkJICB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwczsKIAl1MzIgYmlkOwpAQCAtNDE4LDcgJiM0Mzs0MTksNyBAQCBzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKQogewogCWludCBpc19pZGxlID0gMTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS0mZ3Q7ZGlza3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKLQlpbnQgaW5kZXg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBucl9wYWdlczsgaW5kZXgmIzQzOyYjNDM7KSB7CiAJCS8qCkBAIC00ODUsOCAmIzQzOzQ4Niw5IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICNkZWZpbmUgSU5WQUxJRF9CREVWX0JMT0NLCQkofjBVTCkKIAogc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJdTMyIGluZGV4KTsKLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCk7CiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpOwomIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogCiBzdHJ1Y3QgenJhbV93Yl9jdGwgewogCS8qIGlkbGUgbGlzdCBpcyBhY2Nlc3NlZCBvbmx5IGJ5IHRoZSB3cml0ZWJhY2sgdGFzaywgbm8gY29uY3VyZW5jeSAqLwpAQCAtNTIyLDcgJiM0Mzs1MjQsNyBAQCBzdHJ1Y3QgenJhbV9yYl9yZXEgewogCQkvKiBlcnJvciBzdGF0dXMgKHN5bmMgcmVhZCkgKi8KIAkJaW50IGVycm9yOwogCX07Ci0JdTMyIGluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwogfTsKIAogI2RlZmluZSBGT1VSX0soeCkgKCh4KSAqICgxICZsdDsmbHQ7IChQQUdFX1NISUZUIC0gMTIpKSkKQEAgLTkxMCw3ICYjNDM7OTEyLDcgQEAgc3RhdGljIHZvaWQgenJhbV9hY2NvdW50X3dyaXRlYmFja19zdWJtaXQoc3RydWN0IHpyYW0gKnpyYW0pCiAKIHN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKQogewotCXUzMiBpbmRleCA9IHJlcS0mZ3Q7cHBzLSZndDtpbmRleDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS0mZ3Q7cHBzLSZndDtpbmRleDsKIAlpbnQgZXJyOwogCiAJZXJyID0gYmxrX3N0YXR1c190b19lcnJubyhyZXEtJmd0O2Jpby5iaV9zdGF0dXMpOwpAQCAtMTAzMiw3ICYjNDM7MTAzNCw3IEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfc2xvdHMoc3RydWN0IHpyYW0gKnpyYW0sCiAJc3RydWN0IHpyYW1fd2JfcmVxICpyZXEgPSBOVUxMOwogCXN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwczsKIAlpbnQgcmV0ID0gMCwgZXJyID0gMDsKLQl1MzIgaW5kZXggPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4ID0gMDsKIAogCXdoaWxlICgocHBzID0gc2VsZWN0X3BwX3Nsb3QoY3RsKSkpIHsKIAkJaWYgKHpyYW0tJmd0O3diX2xpbWl0X2VuYWJsZSAmYW1wOyZhbXA7ICF6cmFtLSZndDtiZF93Yl9saW1pdCkgewpAQCAtMTE5OCw3ICYjNDM7MTIwMCw3IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3dyaXRlYmFjayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvLCB1bnNpZ25lZCBsb25nIGhpLAogCQkJCSAgICAgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpCiB7Ci0JdTMyIGluZGV4ID0gbG87CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXggPSBsbzsKIAogCXdoaWxlIChpbmRleCAmbHQ7IGhpKSB7CiAJCWJvb2wgb2sgPSB0cnVlOwpAQCAtMTIzNSw3ICYjNDM7MTIzNyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTsKLQl1NjQgbnJfcGFnZXMgPSB6cmFtLSZndDtkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS0mZ3Q7ZGlza3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIGxvID0gMCwgaGkgPSBucl9wYWdlczsKIAlzdHJ1Y3QgenJhbV9wcF9jdGwgKnBwX2N0bCA9IE5VTEw7CiAJc3RydWN0IHpyYW1fd2JfY3RsICp3Yl9jdGwgPSBOVUxMOwpAQCAtMTMzMyw3ICYjNDM7MTMzNSw4IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCkKJiM0MztzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xMzc1LDcgJiM0MzsxMzc4LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAlzdHJ1Y3QgenJhbV9yYl9yZXEgKnJlcSA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgenJhbV9yYl9yZXEsIHdvcmspOwogCXN0cnVjdCBwYWdlICpwYWdlID0gYmlvX2ZpcnN0X3BhZ2VfYWxsKHJlcS0mZ3Q7YmlvKTsKIAlzdHJ1Y3QgenJhbSAqenJhbSA9IHJlcS0mZ3Q7enJhbTsKLQl1MzIgaW5kZXggPSByZXEtJmd0O2luZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVxLSZndDtpbmRleDsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOwpAQCAtMTQyNiw3ICYjNDM7MTQyOSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYXN5bmNfcmVhZF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pCiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCXUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsCiAJCQkJc3RydWN0IGJpbyAqcGFyZW50KQogewogCXN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxOwpAQCAtMTQ3Niw4ICYjNDM7MTQ3OSw4IEBAIHN0YXRpYyB2b2lkIHpyYW1fc3luY19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKICAqIGNoYWluZWQgSU8gd2l0aCBwYXJlbnQgSU8gaW4gc2FtZSBjb250ZXh0LCBpdCYjMzk7cyBhIGRlYWRsb2NrLiBUbyBhdm9pZCB0aGF0LAogICogdXNlIGEgd29ya2VyIHRocmVhZCBjb250ZXh0LgogICovCi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBibGtfaWR4KQomIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCkKIHsKIAlzdHJ1Y3QgenJhbV9yYl9yZXEgcmVxOwogCkBAIC0xNDk2LDggJiM0MzsxNDk5LDkgQEAgc3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LAogCXJldHVybiBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCwgc3RydWN0IGJpbyAqcGFyZW50KQomIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LAomIzQzOwkJCSAgc3RydWN0IGJpbyAqcGFyZW50KQogewogCWF0b21pYzY0X2luYygmYW1wO3pyYW0tJmd0O3N0YXRzLmJkX3JlYWRzKTsKIAlpZiAoIXBhcmVudCkgewpAQCAtMTUwOSw4ICYjNDM7MTUxMyw5IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsCiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2JkZXYoc3RydWN0IHpyYW0gKnpyYW0pIHt9Owotc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCwKLQkJCSAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpCiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsCiYjNDM7CQkJICBzdHJ1Y3QgYmlvICpwYXJlbnQpCiB7CiAJcmV0dXJuIC1FSU87CiB9CkBAIC0xNTM4LDcgJiM0MzsxNTQzLDggQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyICprYnVmOwotCXNzaXplX3QgaW5kZXgsIHdyaXR0ZW4gPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwlzc2l6ZV90IHdyaXR0ZW4gPSAwOwogCXN0cnVjdCB6cmFtICp6cmFtID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLSZndDtkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCkBAIC0xNTYwLDcgJiM0MzsxNTY2LDcgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCWdvdG8gbmV4dDsKIAogCQljb3BpZWQgPSBzbnByaW50ZihrYnVmICYjNDM7IHdyaXR0ZW4sIGNvdW50LAotCQkJJiMzNDslMTJ6ZCAlMTJ1LiUwNmQgJWMlYyVjJWMlYyVjXG4mIzM0OywKJiM0MzsJCQkmIzM0OyUxMmx1ICUxMnUuJTA2ZCAlYyVjJWMlYyVjJWNcbiYjMzQ7LAogCQkJaW5kZXgsIHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUsIDAsCiAJCQl0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSA/ICYjMzk7cyYjMzk7IDogJiMzOTsuJiMzOTssCiAJCQl0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9XQikgPyAmIzM5O3cmIzM5OyA6ICYjMzk7LiYjMzk7LApAQCAtMTk2Nyw4ICYjNDM7MTk3Myw4IEBAIHN0YXRpYyBzc2l6ZV90IGRlYnVnX3N0YXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpCiB7Ci0Jc2l6ZV90IG51bV9wYWdlcyA9IGRpc2tzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0Jc2l6ZV90IGluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IGRpc2tzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAlpZiAoIXpyYW0tJmd0O3RhYmxlKQogCQlyZXR1cm47CkBAIC0xOTg1LDcgJiM0MzsxOTkxLDcgQEAgc3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSkKIAogc3RhdGljIGJvb2wgenJhbV9tZXRhX2FsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpCiB7Ci0Jc2l6ZV90IG51bV9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7CiAKIAludW1fcGFnZXMgPSBkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXpyYW0tJmd0O3RhYmxlID0gdnphbGxvYyhhcnJheV9zaXplKG51bV9wYWdlcywgc2l6ZW9mKCp6cmFtLSZndDt0YWJsZSkpKTsKQEAgLTIwMDgsNyAmIzQzOzIwMTQsNyBAQCBzdGF0aWMgYm9vbCB6cmFtX21ldGFfYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCkBAIC0yMDYyLDcgJiM0MzsyMDY4LDcgQEAgc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgdTMyIGluZGV4KQomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl2b2lkICptZW07CiAKQEAgLTIwNzMsNyAmIzQzOzIwNzksNyBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgdTMyIGluZGV4KQomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl2b2lkICpzcmMsICpkc3Q7CkBAIC0yMDg4LDcgJiM0MzsyMDk0LDggQEAgc3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKQEAgLTIxMTMsNyAmIzQzOzIxMjAsOCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogfQogCiAjaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0sKLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiAJc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwpAQCAtMjE0NSw3ICYjNDM7MjE1Myw4IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuCiAgKiBDb3JyZXNwb25kaW5nIFpSQU0gc2xvdCBzaG91bGQgYmUgbG9ja2VkLgogICovCi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlpZiAodGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHwKIAkgICAgIWdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCkpCkBAIC0yMTU3LDggJiM0MzsyMTY2LDggQEAgc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogCQlyZXR1cm4gcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTsKIH0KIAotc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCwKLQkJCSAgc3RydWN0IGJpbyAqcGFyZW50KQomIzQzO3N0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgc3RydWN0IGJpbyAqcGFyZW50KQogewogCWludCByZXQ7CiAKQEAgLTIxODAsNyAmIzQzOzIxODksNyBAQCBzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LAogCiAJLyogU2hvdWxkIE5FVkVSIGhhcHBlbi4gUmV0dXJuIGJpbyBlcnJvciBpZiBpdCBkb2VzLiAqLwogCWlmIChXQVJOX09OKHJldCAmbHQ7IDApKQotCQlwcl9lcnIoJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSV1XG4mIzM0OywgcmV0LCBpbmRleCk7CiYjNDM7CQlwcl9lcnIoJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSVsdVxuJiMzNDssIHJldCwgaW5kZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxOTAsNyAmIzQzOzIxOTksNyBAQCBzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LAogICogYWx3YXlzIGV4cGVjdHMgYSBmdWxsIHBhZ2UgZm9yIHRoZSBvdXRwdXQuCiAgKi8KIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWRfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCi0JCQkJICB1MzIgaW5kZXgsIGludCBvZmZzZXQpCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8pOwogCWludCByZXQ7CkBAIC0yMjA1LDcgJiM0MzsyMjE0LDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZF9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKIH0KIAogc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCi0JCQkgIHUzMiBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKQomIzQzOwkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKQogewogCWlmIChpc19wYXJ0aWFsX2lvKGJ2ZWMpKQogCQlyZXR1cm4genJhbV9idmVjX3JlYWRfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTsKQEAgLTIyMTMsNyAmIzQzOzIyMjIsNyBAQCBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKIH0KIAogc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsCi0JCQkJICB1MzIgaW5kZXgpCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzbG90X2xvY2soenJhbSwgaW5kZXgpOwogCXNsb3RfZnJlZSh6cmFtLCBpbmRleCk7CkBAIC0yMjI4LDcgJiM0MzsyMjM3LDcgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsCiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgICB1MzIgaW5kZXgpCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl2b2lkICpzcmM7CkBAIC0yMjY4LDcgJiM0MzsyMjc3LDggQEAgc3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CkBAIC0yMzM1LDcgJiM0MzsyMzQ1LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAgKiBUaGlzIGlzIGEgcGFydGlhbCBJTy4gUmVhZCB0aGUgZnVsbCBwYWdlIGJlZm9yZSB3cml0aW5nIHRoZSBjaGFuZ2VzLgogICovCiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKLQkJCQkgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTsKIAlpbnQgcmV0OwpAQCAtMjM1Myw3ICYjNDM7MjM2Myw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLAogfQogCiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCi0JCQkgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpCiYjNDM7CQkJICAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldCkKIHsKIAlpZiAoaXNfcGFydGlhbF9pbyhidmVjKSkKIAkJcmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpOwpAQCAtMjQyMSw4ICYjNDM7MjQzMSw5IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbywKICAqCiAgKiBDb3JyZXNwb25kaW5nIFpSQU0gc2xvdCBzaG91bGQgYmUgbG9ja2VkLgogICovCi1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCSAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pCiYjNDM7c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsCiYjNDM7CQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHU2NCAqbnVtX3JlY29tcF9wYWdlcywKJiM0MzsJCQkgICB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbykKIHsKIAlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlX29sZDsKQEAgLTI2NzQsNyAmIzQzOzI2ODUsNyBAQCBzdGF0aWMgc3NpemVfdCByZWNvbXByZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHN0YXRpYyB2b2lkIHpyYW1fYmlvX2Rpc2NhcmQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzaXplX3QgbiA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplOwotCXUzMiBpbmRleCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgJmd0OyZndDsgU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgJmd0OyZndDsgU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKIAl1MzIgb2Zmc2V0ID0gKGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgJmFtcDsgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgJmx0OyZsdDsKIAkJCVNFQ1RPUl9TSElGVDsKIApAQCAtMjcxNSw3ICYjNDM7MjcyNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKIAlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIgPSBiaW8tJmd0O2JpX2l0ZXI7CiAKIAlkbyB7Ci0JCXUzMiBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yICZndDsmZ3Q7IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgJmd0OyZndDsgU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKIAkJdTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciAmYW1wOyAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSAmbHQ7Jmx0OwogCQkJCVNFQ1RPUl9TSElGVDsKIAkJc3RydWN0IGJpb192ZWMgYnYgPSBiaW9faXRlcl9pb3ZlYyhiaW8sIGl0ZXIpOwpAQCAtMjc0Niw3ICYjNDM7Mjc1Nyw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pCiAJc3RydWN0IGJ2ZWNfaXRlciBpdGVyID0gYmlvLSZndDtiaV9pdGVyOwogCiAJZG8gewotCQl1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciAmZ3Q7Jmd0OyBTRUNUT1JTX1BFUl9QQUdFX1NISUZUOwomIzQzOwkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yICZndDsmZ3Q7IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7CiAJCXUzMiBvZmZzZXQgPSAoaXRlci5iaV9zZWN0b3IgJmFtcDsgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgJmx0OyZsdDsKIAkJCQlTRUNUT1JfU0hJRlQ7CiAJCXN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTsKQEAgLTI4NjAsNiAmIzQzOzI4NzEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSkKIHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwogCXU2NCBkaXNrc2l6ZTsKIAlzdHJ1Y3QgemNvbXAgKmNvbXA7CiAJc3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpOwpAQCAtMjg3Nyw2ICYjNDM7Mjg4OSwxMSBAQCBzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCX0KIAogCWRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7CiYjNDM7CW51bV9wYWdlcyA9IGRpc2tzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CS8qIFNsb3RzIGFyZSBhZGRyZXNzZWQgYnkgYW4gdW5zaWduZWQgbG9uZyBpbmRleCAqLwomIzQzOwlpZiAoIW51bV9wYWdlcyB8fCAoKHU2NCludW1fcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCkgIT0gZGlza3NpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBacmFtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYGluZGV4YCB0eXBlIGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIGluIHRoZSBjb2RlLCB3aGljaCBpcyBhIGZhaXJseSBzaWduaWZpY2FudCBjaGFuZ2UuIEFsb25nc2lkZSB0aGlzIGNoYW5nZSBpcyBhIG5ldyBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKVGhlIG5ldyBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgOgpgYGBjCglkaXNrc2l6ZSA9IFBBR0VfQUxJR04oZGlza3NpemUpOwomIzQzOwludW1fcGFnZXMgPSBkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkvKiBTbG90cyBhcmUgYWRkcmVzc2VkIGJ5IGFuIHVuc2lnbmVkIGxvbmcgaW5kZXggKi8KJiM0MzsJaWYgKCFudW1fcGFnZXMgfHwgKCh1NjQpbnVtX3BhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQpICE9IGRpc2tzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CmBgYApUaGlzIGFkZGl0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGBkaXNrc2l6ZWAgZnJvbSBleGNlZWRpbmcgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBgdW5zaWduZWQgbG9uZ2AgY2FuIHJlcHJlc2VudCB3aGVuIHNoaWZ0ZWQgYnkgYFBBR0VfU0hJRlRgLCBhcyB3ZWxsIGFzIHByZXZlbnRpbmcgYSBgZGlza3NpemVgIG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCBhbiBvdmVyZmxvdyBzb21ld2hlcmUuCgpXYWl0LCBvbiAzMi1iaXQgc3lzdGVtcywgYHVuc2lnbmVkIGxvbmdgIGlzIDMyIGJpdHMsIHJpZ2h0PyBTbyB0aGUgc2l6ZSBsaW1pdCBpcyA0R0IgKDJeMzIpLCBhbmQgb24gNjQtYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCBpcyA2NCBiaXRzLCBtZWFuaW5nIHRoZSBzaXplIGxpbWl0IGlzIHRoZW9yZXRpY2FsbHkgbXVjaCBsYXJnZXIsIHJpZ2h0PyBUaHVzLCBpZiBgZGlza3NpemVgIGlzIGxhcmdlciB0aGFuIGAweGZmZmZmZmZmICZsdDsmbHQ7IFBBR0VfU0hJRlRgLCB3aGljaCBpcyAxNlRCLCBpdCB3aWxsIG92ZXJmbG93IG9uIDMyIGJpdCBzeXN0ZW1zLgoKSXQgc2VlbXMgbGlrZSB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgYGluZGV4YCB3YXMgYSBgdTMyYCBidXQgdGhlIGBkaXNrc2l6ZWAgY291bGQgYmUgbGFyZ2VyIHRoYW4gYHUzMiAmbHQ7Jmx0OyBQQUdFX1NISUZUYCBvbiA2NC1iaXQgc3lzdGVtcy4gT3IgcGVyaGFwcywgdGhpcyBpcyBhIGZpeCBmb3IgMzIgYml0IHN5c3RlbXMuCgpOb3csIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGUgY2hhbmdlIHRvIGB1bnNpZ25lZCBsb25nYCBlZmZlY3RpdmVseSBtYWtlcyBgaW5kZXhgIDY0IGJpdHMsIGFsbG93aW5nIGZvciB6cmFtIGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiwgd2hpY2ggaXMgYDB4ZmZmZmZmZmYgKiA0MDk2YC4gSG93ZXZlciwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCBpcyBzdGlsbCAzMiBiaXRzLCBidXQgdGhlIGNoZWNrIGVuc3VyZXMgdGhhdCBgZGlza3NpemVgIGRvZXNuJiMzOTt0IGV4Y2VlZCAxNlRCLiBFc3NlbnRpYWxseSwgaXQgbm9ybWFsaXplcyB0aGlzIGJlaGF2aW9yIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgoKT2theSwgaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gWWVzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8genJhbSwgd2hpY2ggbWVhbnMgaXQgaXMgYW4gaW1wb3J0YW50IGNoYW5nZSBmb3IgZnV6emluZy4gWnJhbSBpcyBjb25maWd1cmVkIHZpYSBzeXNmcy4gKkNhbiogc3l6a2FsbGVyIGZ1enogenJhbSBzeXNmcz8gWWVzLCBJJiMzOTttIHByZXR0eSBzdXJlIHN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciBzeXNmcywgaW5jbHVkaW5nIHpyYW0uIExldCBtZSBjaGVjayB0aGUgY29uZmlnLiBZZXMsIGl0JiMzOTtzIGBDT05GSUdfWlJBTWAuIEkgc2hvdWxkIGNoZWNrIGBkaXNrc2l6ZV9zdG9yZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NTQ9c3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg3MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4NzE6c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NzItXHRcdFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxMjg9c3RhdGljIGludCB6cmFtX3JlbW92ZShzdHJ1Y3QgenJhbSAqenJhbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY0LVx0LypcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMxNjU6XHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY2LVx0ICogYW5kIGRlbF9nZW5kaXNrKCksIHNvIHJ1biB0aGUgbGFzdCByZXNldCB0byBhdm9pZCBsZWFraW5nXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTY3Olx0ICogYW55dGhpbmcgYWxsb2NhdGVkIHdpdGggZGlza3NpemVfc3RvcmUoKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2OC1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzE4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGl2aW5nIGludG8gdGhlIFpyYW0gQ29kZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB6cmFtX2Rydi5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGRyaXZlciBmb3IgenJhbS4gTXkgZmlyc3QgbW92ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgenJhbS4gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIGFyZSBiZWluZyBhbHRlcmVkIGhlcmU/IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1c3QgYmxpbmRseSBhcHBseSBhIHBhdGNoIHRvIHRoZSBkcml2ZXIgaXRzZWxmIHdpdGhvdXQga25vd2luZyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgenJhbSBzdWJzeXN0ZW0gYW5kIHdoYXQgdGhlICppbnRlbmRlZCogbW9kaWZpY2F0aW9uIGlzLiBUaW1lIHRvIHRyYWNlIHRoZSBjb25maWcgb3B0aW9ucywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMgdG8gZ2V0IGEgZmlybSBncmFzcC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8genJhbSBhbmQgdGhlbiB0cmFjZSB0aGlzIGRvd24gdG8gdGhpcyBzb3VyY2UgZmlsZSwgdW5kZXJzdGFuZGluZyB3aGF0IHZhbHVlcyBtaWdodCBiZSBzZXQgdG8gY2hhbmdlIHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnJhbSBQYXRjaCBmb3IgTGFyZ2UgRGV2aWNlIFN1cHBvcnQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50OiBpdCYjMzk7cyBjaGFuZ2luZyBgdTMyIGluZGV4YCB0byBgdW5zaWduZWQgbG9uZyBpbmRleGAgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UsIGFuZCBpdCBpbmNsdWRlcyBhIG5ldyBjaGVjayB3aXRoaW4gYGRpc2tzaXplX3N0b3JlYC4gVGhlIGltbWVkaWF0ZSBpbXBsaWNhdGlvbiBpcyBjbGVhciDigJMgdGhpcyBlbmFibGVzIFpyYW0gdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIGFuZCBpdCYjMzk7cyBhbHNvIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9uIDMyLWJpdCBzeXN0ZW1zLgoKV2FpdCBhIHNlY29uZCwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCAqaXMqIDMyLWJpdCwgcmlnaHQ/IFNvLCBgbnVtX3BhZ2VzYCBpcyBsaW1pdGVkIHRvIDMyIGJpdHMuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBJZiB0aGUgcmVxdWVzdGVkIGBkaXNrc2l6ZWAgZXhjZWVkcyB0aGUgY2FwYWNpdHkgb2YgYSAzMi1iaXQgaW50ZWdlciBzaGlmdGVkIGxlZnQgYnkgdGhlIHBhZ2Ugc2l6ZSAoYDB4ZmZmZmZmZmYgJmx0OyZsdDsgMTJgLCBvciBgMHhmZmZmZmZmZjAwMGApLCBgbnVtX3BhZ2VzYCB3aWxsIGdldCB0cnVuY2F0ZWQgZHVlIHRvIG92ZXJmbG93LiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWRkcmVzcy4gVGhlIG5ldyBjaGVjazogYCgodTY0KW51bV9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZWAsIHdpbGwgY2F0Y2ggdGhpcyB0cnVuY2F0aW9uIHNjZW5hcmlvIGFuZCByZXR1cm4gYC1FSU5WQUxgIHRvIGluZGljYXRlIGFuIGludmFsaWQgZGlzayBzaXplLgoKTGV0IG1lIGNvbmZpcm0gdGhhdCBieSB0YWtpbmcgYSBsb29rIGF0IGBkaXNrc2l6ZV9zdG9yZWAgaW4gYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYW5kIGEgY2FyZWZ1bCBleGFtaW5hdGlvbiB3aWxsIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzA6XHRcbjI4NzE6XHRzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMjg3MjpcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjI4NzM6XHR7XG4yODc0Olx0XHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbjI4NzU6XHRcdHU2NCBkaXNrc2l6ZTtcbjI4NzY6XHRcdHN0cnVjdCB6Y29tcCAqY29tcDtcbjI4Nzc6XHRcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbjI4Nzg6XHRcdGludCBlcnI7XG4yODc5Olx0XHR1MzIgcHJpbztcbjI4ODA6XHRcbjI4ODE6XHRcdGRpc2tzaXplID0gbWVtcGFyc2UoYnVmLCBOVUxMKTtcbjI4ODI6XHRcdGlmICghZGlza3NpemUpXG4yODgzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg4NDpcdFxuMjg4NTpcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnpyYW0tXHUwMDNlZGV2X2xvY2spO1xuMjg4NjpcdFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xuMjg4NzpcdFx0XHRwcl9pbmZvKFwmIzM0O0Nhbm5vdCBjaGFuZ2UgZGlza3NpemUgZm9yIGluaXRpYWxpemVkIGRldmljZVxcblwmIzM0Oyk7XG4yODg4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4yODg5Olx0XHR9XG4yODkwOlx0XG4yODkxOlx0XHRkaXNrc2l6ZSA9IFBBR0VfQUxJR04oZGlza3NpemUpO1xuMjg5MjpcdFx0bnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4yODkzOlx0XHQvKiBTbG90cyBhcmUgYWRkcmVzc2VkIGJ5IGFuIHVuc2lnbmVkIGxvbmcgaW5kZXggKi9cbjI4OTQ6XHRcdGlmICghbnVtX3BhZ2VzIHx8ICgodTY0KW51bV9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgIT0gZGlza3NpemUpXG4yODk1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg5NjpcdFxuMjg5NzpcdFx0aWYgKCF6cmFtX21ldGFfYWxsb2MoenJhbSwgZGlza3NpemUpKVxuMjg5ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4OTk6XHRcbjI5MDA6XHRcdGZvciAocHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QOyBwcmlvIFx1MDAzYyBaUkFNX01BWF9DT01QUzsgcHJpbyYjNDM7JiM0MzspIHtcbjI5MDE6XHRcdFx0aWYgKCF6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSlcbjI5MDI6XHRcdFx0XHRjb250aW51ZTtcbjI5MDM6XHRcbjI5MDQ6XHRcdFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSxcbjI5MDU6XHRcdFx0XHRcdCAgICBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXSk7XG4yOTA2Olx0XHRcdGlmIChJU19FUlIoY29tcCkpIHtcbjI5MDc6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Q2Fubm90IGluaXRpYWxpc2UgJXMgY29tcHJlc3NpbmcgYmFja2VuZFxcblwmIzM0OyxcbjI5MDg6XHRcdFx0XHQgICAgICAgenJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10pO1xuMjkwOTpcdFx0XHRcdGVyciA9IFBUUl9FUlIoY29tcCk7XG4yOTEwOlx0XHRcdFx0Z290byBvdXRfZnJlZV9jb21wcztcbjI5MTE6XHRcdFx0fVxuMjkxMjpcdFxuMjkxMzpcdFx0XHR6cmFtLVx1MDAzZWNvbXBzW3ByaW9dID0gY29tcDtcbjI5MTQ6XHRcdH1cbjI5MTU6XHRcdHpyYW0tXHUwMDNlZGlza3NpemUgPSBkaXNrc2l6ZTtcbjI5MTY6XHRcdHNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KHpyYW0tXHUwMDNlZGlzaywgenJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUKTtcbjI5MTc6XHRcbjI5MTg6XHRcdHJldHVybiBsZW47XG4yOTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjIKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnJhbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvdmVyZmxvdyBjaGVja3MgaW4gYGRpc2tzaXplX3N0b3JlYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYnVtcGVkIGBpbmRleGAgdG8gYW4gYHVuc2lnbmVkIGxvbmdgIGluIGEgYnVuY2ggb2YgZnVuY3Rpb25zLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gZnV6eiB0aGlzIHRoaW5nIHRob3JvdWdobHkuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydC4uLgoKV2FpdCBhIHNlY29uZCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBzeXNmcywgcmlnaHQ/IEFuZCBgZGlza3NpemVfc3RvcmVgICppcyogYSBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gQmluZ28hIFRoaXMgaXMgcGVyZmVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGl0dGluZyBpdC4gVGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB0YXJnZXQgYXJlOiBgZGlza3NpemVfc3RvcmVgLCB0aGVuIGB6cmFtX21ldGFfYWxsb2NgLCBgenJhbV9tZXRhX2ZyZWVgLCBgenJhbV9yZWFkX3BhZ2VgLCBgenJhbV93cml0ZV9wYWdlYCwgYHpyYW1fYnZlY19yZWFkYCwgYW5kIGB6cmFtX2J2ZWNfd3JpdGVgLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBgZGlza3NpemVfc3RvcmVgIGlzbiYjMzk7dCBzdGF0aWMuIFllcCwgaXQgaXMuIEJ1dCwgaXQmIzM5O3MgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgc28gdGhlIGNvbXBpbGVyICpzaG91bGRuJiMzOTt0KiBpbmxpbmUgaXQgYXdheSwgaXQmIzM5O3MgcmVhY2hhYmxlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHJlYWNoYWJsZS4gVGhlIGluc3RydWN0aW9ucyBzYWlkIHNvbWV0aGluZyBhYm91dCB0aGF0Li4uCgpBaCwgcmlnaHQsIGhlcmUgaXQgaXM6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLiYjMzQ7IFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBjYXNlLiBgZGlza3NpemVfc3RvcmVgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzICpub3QqIGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBhIHN5c2ZzIGNhbGxiYWNrLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bXmEtekEtWl0qW2EtekEtWl8wLTldJiM0MzsgW2EtekEtWl8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1OiNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7enJhbTogXCYjMzQ7IGZtdFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTYtXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MDpzdGF0aWMgREVGSU5FX0lEUih6cmFtX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgoenJhbV9pbmRleF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00My1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNTQ9c3RhdGljIGlubGluZSBib29sIHNsb3RfYWxsb2NhdGVkKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU1LXtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1NjpcdHJldHVybiBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSB8fFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU3LVx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTM1NT1zdGF0aWMgc3NpemVfdCBpbml0c3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTM2My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjM2NDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIHZhbCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zNjUtfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTM2Nz1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zNzEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozNzI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsbHVcXG5cJiMzNDssIHpyYW0tXHUwMDNlZGlza3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzczLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz01MTQ9c3RydWN0IHpyYW1fcmJfcmVxIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MjktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1MzA6I2RlZmluZSBGT1VSX0soeCkgKCh4KSAqICgxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEyKSkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MzEtc3RhdGljIHNzaXplX3QgYmRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NTY3PXN0YXRpYyBzc2l6ZV90IGNvbXByZXNzZWRfd3JpdGViYWNrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU3Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjU3NzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHZhbCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01NzgtfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTU5Nj1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfbGltaXRfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTYwNS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjYwNjpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHZhbCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02MDctfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTYzNT1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfbGltaXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjQzLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NjQ0Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbGx1XFxuXCYjMzQ7LCB2YWwpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjQ1LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz02NjY9c3RhdGljIHNzaXplX3Qgd3JpdGViYWNrX2JhdGNoX3NpemVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjc1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Njc2Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgdmFsKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTY3Ny19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjkzPXN0YXRpYyBzc2l6ZV90IGJhY2tpbmdfZGV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTcwOS1cdGlmIChJU19FUlIocCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo3MTA6XHRcdHJldHVybiBQVFJfRVJSKHApO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNzExLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0ODI9c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDk4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQ5OTpcdHJldHVybiBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTAwLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNTAyPXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktXHRcdFx0cmV0dXJuIC1FSU87XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTEwOlx0XHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTExLVx0fVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUxMjpcdHJldHVybiByZWFkX2Zyb21fYmRldl9hc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCwgcGFyZW50KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MTMtfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxNTY9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTYwLVx0ICAgICFnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE2MTpcdFx0cmV0dXJuIHJlYWRfc2FtZV9maWxsZWRfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTYyLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2My1cdGlmICghdGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSFVHRSkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTY0Olx0XHRyZXR1cm4gcmVhZF9jb21wcmVzc2VkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2NS1cdGVsc2VcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxNjY6XHRcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2Ny19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIxNj1zdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjE5LVx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIwOlx0XHRyZXR1cm4genJhbV9idmVjX3JlYWRfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMjE6XHRyZXR1cm4genJhbV9yZWFkX3BhZ2UoenJhbSwgYnZlYy1cdTAwM2Vidl9wYWdlLCBpbmRleCwgYmlvKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjItfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMzk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUzLVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI1NDpcdFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1NS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgwPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk0LVx0aWYgKHNhbWVfZmlsbGVkKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5NTpcdFx0cmV0dXJuIHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgZWxlbWVudCwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEwLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTE6XHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTItXHR9XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxOC1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE5Olx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzIwLVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNjU9c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjgtXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNjk6XHRcdHJldHVybiB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNzA6XHRyZXR1cm4genJhbV93cml0ZV9wYWdlKHpyYW0sIGJ2ZWMtXHUwMDNlYnZfcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3MS19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzND1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTIzLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MjQ6XHRcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlX25ldyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTI1LVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4NTpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW9fc3RhdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg2OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbV9zdGF0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODc6c3RhdGljIERFVklDRV9BVFRSX1JPKGRlYnVnX3N0YXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4ODpzdGF0aWMgREVWSUNFX0FUVFJfV08oY29tcGFjdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg5OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkaXNrc2l6ZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkwOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhpbml0c3RhdGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MTpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVzZXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MjpzdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX2xpbWl0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTM6c3RhdGljIERFVklDRV9BVFRSX1dPKG1lbV91c2VkX21heCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk0OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhpZGxlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTU6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5OTYtI2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5NzpzdGF0aWMgREVWSUNFX0FUVFJfUk8oYmRfc3RhdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk4OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhiYWNraW5nX2Rldik7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyh3cml0ZWJhY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwMDpzdGF0aWMgREVWSUNFX0FUVFJfUlcod3JpdGViYWNrX2xpbWl0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDE6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdF9lbmFibGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwMjpzdGF0aWMgREVWSUNFX0FUVFJfUlcod3JpdGViYWNrX2JhdGNoX3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwMzpzdGF0aWMgREVWSUNFX0FUVFJfUlcoY29tcHJlc3NlZF93cml0ZWJhY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNC0jZW5kaWZcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMDUtI2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDY6c3RhdGljIERFVklDRV9BVFRSX1JXKHJlY29tcF9hbGdvcml0aG0pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNzpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb21wcmVzcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA4LSNlbmRpZlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwOTpzdGF0aWMgREVWSUNFX0FUVFJfV08oYWxnb3JpdGhtX3BhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxMjg9c3RhdGljIGludCB6cmFtX3JlbW92ZShzdHJ1Y3QgenJhbSAqenJhbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY1LVx0ICogZGlza3NpemVfc3RvcmUoKSBtYXkgYmUgY2FsbGVkIGluIGJldHdlZW4genJhbV9yZXNldF9kZXZpY2UoKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2NjpcdCAqIGFuZCBkZWxfZ2VuZGlzaygpLCBzbyBydW4gdGhlIGxhc3QgcmVzZXQgdG8gYXZvaWQgbGVha2luZ1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2Ny1cdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMTg0PXN0YXRpYyBzc2l6ZV90IGhvdF9hZGRfc2hvdyhjb25zdCBzdHJ1Y3QgY2xhc3MgKmNsYXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxOTUtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTk2Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxOTctfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMyMDI9c3RhdGljIHNzaXplX3QgaG90X3JlbW92ZV9zdG9yZShjb25zdCBzdHJ1Y3QgY2xhc3MgKmNsYXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMyMzAtfVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzIzMTpzdGF0aWMgQ0xBU1NfQVRUUl9XTyhob3RfcmVtb3ZlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMyMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODY1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aXRoaW4gdGhlIFpSQU0gY29kZS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHdlIGhhbmRsZSBkaXNrIHNpemUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgd2UgaW5kZXggZGF0YS4gU3BlY2lmaWNhbGx5LCB0aGUgYGRpc2tzaXplX3N0b3JlYCBpcyBnZXR0aW5nIHR3ZWFrZWQsIGFuZCB0aGUgYGluZGV4YCB2YXJpYWJsZSBpcyBiZWluZyBwcm9tb3RlZCB0byBhbiBgdW5zaWduZWQgbG9uZ2AgaW4gYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zLiBUaGlzIGlzIGltbWVkaWF0ZWx5IG1ha2luZyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgYWRkcmVzc2luZyBhbmQgb3ZlcmFsbCBjYXBhY2l0eSBsaW1pdHMgd2l0aGluIHRoZSBaUkFNIGRldmljZS4KCkkmIzM5O20gc2VlaW5nIHRoYXQgZnVuY3Rpb25zIGxpa2UgYHpyYW1fYnZlY19yZWFkYCwgYHpyYW1fYnZlY193cml0ZWAsIGB6cmFtX3JlYWRfcGFnZWAsIGB6cmFtX3dyaXRlX3BhZ2VgLCBgenJhbV9iaW9fcmVhZGAsIGB6cmFtX2Jpb193cml0ZWAsIGFuZCBgenJhbV9iaW9fZGlzY2FyZGAgYXJlIGVpdGhlciBkaXJlY3RseSBtb2RpZmllZCBvciBhcmUgdXRpbGl6aW5nIHRoaXMgbmV3IGBpbmRleGAgdHlwZS4gVGhhdCYjMzk7cyBhIHByZXR0eSBicm9hZCBzY29wZSwgd2hpY2ggbWVhbnMgdGhpcyBjaGFuZ2UgaXMgZm91bmRhdGlvbmFsIHRvIGhvdyBaUkFNIGludGVyYWN0cyB3aXRoIGJvdGggdGhlIGJsb2NrIGRldmljZSBhbmQgcGFnZS1sZXZlbCBvcGVyYXRpb25zLgoKTm93LCB0aG9zZSBgenJhbV9iaW9fLi4uYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgcmlnaHQ/IFllcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgYXJlIGNhbGxlZC4gQWgsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBBbmQgd2FpdCBhIG1pbnV0ZS4uLiBgenJhbV9zdWJtaXRfYmlvYCBpcyAqKm5vdCoqIHN0YXRpYy4gSXQmIzM5O3MgdGhlIGBzdWJtaXRfYmlvYCBjYWxsYmFjayBmb3IgdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBTbywgYW55IGNoYW5nZSB0aGVyZSBpcyBwcmV0dHkgY3JpdGljYWwuIFRoaXMgaXMgbWFraW5nIG1lIHRoaW5rIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgd2hhdCBoYXBwZW5zIGF0IHRoZSBiaW8gc3VibWlzc2lvbiBsZXZlbCBpbiByZWxhdGlvbiB0byB0aGVzZSBpbmRleCBjaGFuZ2VzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBwb3RlbnRpYWwgaW1wYWN0IHRoaXMgaGFzIG9uIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV9zdWJtaXRfYmlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjc1ND1zdGF0aWMgdm9pZCB6cmFtX2Jpb193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODYtICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNzg3OnN0YXRpYyB2b2lkIHpyYW1fc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzg4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yOTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTc5LVx0Lm9wZW4gPSB6cmFtX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTgwOlx0LnN1Ym1pdF9iaW8gPSB6cmFtX3N1Ym1pdF9iaW8sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTgxLVx0LnN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IHpyYW1fc2xvdF9mcmVlX25vdGlmeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODgKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHJlZ2FyZGluZyB0aGUgYHpyYW1gIGRyaXZlci4uLgoKKipacmFtIERyaXZlciBFbnRyeSBQb2ludCBBbmFseXNpcyoqCgpSaWdodCwgYHpyYW1fc3VibWl0X2Jpb2AgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgZmlsZSwgYSBrZXkgaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBpc24mIzM5O3QgZGlyZWN0bHkgZXhwb3NlZCBleHRlcm5hbGx5LiBUaGVyZWZvcmUsIGl0IHdvbiYjMzk7dCBiZSBjYWxsZWQgZGlyZWN0bHkuIE9rYXksIGdvb2QuCgpTbywgaWYgYHpyYW1fc3VibWl0X2Jpb2AgaXMgdGhlIHdvcmtob3JzZSBpbnRlcm5hbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGV4dGVybmFsbHkgZXhwb3NlZCBlbnRyeSBwb2ludHMgYW5kIGNvbnNpZGVyIGhvdyB0aGUgZGF0YSBmbG93cyBhcm91bmQgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbi4gTGV0IG1lIGpvdCBkb3duIHRoZSBwb3RlbnRpYWwgY2FuZGlkYXRlczogYGRpc2tzaXplX3N0b3JlYCwgYHpyYW1fbWV0YV9hbGxvY2AsIGFuZCBgenJhbV9tZXRhX2ZyZWVgLiBUaG9zZSAqZmVlbCogbGlrZSB0aGUgcGxhY2VzIHdoZXJlIGludGVyYWN0aW9uIHdpdGggdGhlIGRyaXZlciB3b3VsZCB0cnVseSBvcmlnaW5hdGUuIGBkaXNrc2l6ZV9zdG9yZWAsIHRoZSBzaXplIG9mIHRoZSBkaXNrLCB0aGVuIHRoZSBhbGxvY2F0aW9uLCB0aGVuIGZyZWVpbmcsIHNlZW1zIGxpa2UgYSB2YWxpZCwgYW5kIHR5cGljYWwsIGxpZmVjeWNsZS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGFyZSAqYW55KiBmdW5jdGlvbnMgaW4gYHpyYW1fZHJ2LmNgICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYz8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gYXNjZXJ0YWluIGF0IHRoaXMgcG9pbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB0cmFjaW5nIHRoZSBwYXRoIG9mIGNvbW1hbmQgZmxvdy4gSWYgdGhlcmUgYXJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IGNvdWxkIHJlYWxseSBpbXBhY3QgdGhlIGVudGlyZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfMC05XSYjNDM7IFthLXpBLVpfMC05XSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MDpzdGF0aWMgREVGSU5FX0lEUih6cmFtX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgoenJhbV9pbmRleF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00My1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yOTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4NC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODU6c3RhdGljIERFVklDRV9BVFRSX1JPKGlvX3N0YXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4NjpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1fc3RhdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWJ1Z19zdGF0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODg6c3RhdGljIERFVklDRV9BVFRSX1dPKGNvbXBhY3QpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4OTpzdGF0aWMgREVWSUNFX0FUVFJfUlcoZGlza3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MDpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW5pdHN0YXRlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTE6c3RhdGljIERFVklDRV9BVFRSX1dPKHJlc2V0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTI6c3RhdGljIERFVklDRV9BVFRSX1dPKG1lbV9saW1pdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkzOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhtZW1fdXNlZF9tYXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5NDpzdGF0aWMgREVWSUNFX0FUVFJfV08oaWRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk1OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk2LSNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTc6c3RhdGljIERFVklDRV9BVFRSX1JPKGJkX3N0YXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5ODpzdGF0aWMgREVWSUNFX0FUVFJfUlcoYmFja2luZ19kZXYpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5OTpzdGF0aWMgREVWSUNFX0FUVFJfV08od3JpdGViYWNrKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDA6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAxOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyh3cml0ZWJhY2tfbGltaXRfZW5hYmxlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19iYXRjaF9zaXplKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDM6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXByZXNzZWRfd3JpdGViYWNrKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMDQtI2VuZGlmXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA1LSNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA2OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhyZWNvbXBfYWxnb3JpdGhtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDc6c3RhdGljIERFVklDRV9BVFRSX1dPKHJlY29tcHJlc3MpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwOC0jZW5kaWZcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDk6c3RhdGljIERFVklDRV9BVFRSX1dPKGFsZ29yaXRobV9wYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAxMC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMjAyPXN0YXRpYyBzc2l6ZV90IGhvdF9yZW1vdmVfc3RvcmUoY29uc3Qgc3RydWN0IGNsYXNzICpjbGFzcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMwLX1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMyMzE6c3RhdGljIENMQVNTX0FUVFJfV08oaG90X3JlbW92ZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHpyYW1fZHJ2LmNgIGZvciBFbnRyeSBQb2ludHMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhc2lkZSBmcm9tIHRoZSBtb2R1bGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMsIGB6cmFtX2Rydi5jYCBzZWVtZWQgdG8gbGFjayBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhlbiBJIHJlbWVtYmVyZWQgYHpyYW1fc3VibWl0X2Jpb2AgYW5kIGBkaXNrc2l6ZV9zdG9yZWAuIFdhaXQsIHRob3NlIGFyZSBhY3R1YWxseSAqdGhlKiBlbnRyeSBwb2ludHMgZm9yIEkvTyBhbmQgZGV2aWNlIHNpemUgY29uZmlndXJhdGlvbiwgcmVzcGVjdGl2ZWx5LiBJIHdhcyBnb2luZyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSB3aGF0IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLgoKVGhlIGdvb2QgbmV3cyBpcywgc2luY2UgYGRpc2tzaXplX3N0b3JlYCBhbmQgYHpyYW1fc3VibWl0X2Jpb2AgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBzeXNmcyBhbmQgdGhlIGJsb2NrIGxheWVyLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIFRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBzbyB0aGV5IGZpdCB0aGUgY3JpdGVyaWEgcGVyZmVjdGx5LiBJIHdpbGwgaW5jbHVkZSB0aG9zZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2VudCB0aHJvdWdoIHRoZSBjb2RlIHRvIGNoZWNrIGlmIEkgbWlzc2VkIGFueSBvdGhlciBmdW5jdGlvbnMuIEZ1bmN0aW9ucyBzdWNoIGFzIGB6cmFtX2J2ZWNfcmVhZGAsIGB6cmFtX2J2ZWNfd3JpdGVgLCBgenJhbV9yZWFkX3BhZ2VgLCBhbmQgYHpyYW1fd3JpdGVfcGFnZWAgYXJlIGNhbGxlZCBmcm9tIGB6cmFtX2Jpb19yZWFkYCBhbmQgYHpyYW1fYmlvX3dyaXRlYCB3aGljaCBpbiB0dXJuIGFyZSBjYWxsZWQgZnJvbSBgenJhbV9zdWJtaXRfYmlvYC4gVGhleSAqbWlnaHQqIGJlIGlubGluZWQuIEJ1dCwgaXQgaXMgc2FmZSB0byBqdXN0IGluY2x1ZGUgYHpyYW1fc3VibWl0X2Jpb2AgYW5kIGBkaXNrc2l6ZV9zdG9yZWAuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBvYnZpb3VzIHRoYXQgYENPTkZJR19aUkFNYCBpcyBuZWVkZWQuIE5vdywgdGhlIHBhdGNoIG1vZGlmaWVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGxpa2UgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgYHJlYWRfZnJvbV96c3Bvb2xgLCBgenJhbV93cml0ZWJhY2tfY29tcGxldGVgLCBhbmQgbWFueSBtb3JlIHVuZGVyIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLiBBbHNvLCBgcmVjb21wcmVzc19zbG90YCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYW5kIGBaUkFNX01VTFRJX0NPTVBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlJBTV9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBaUkFNX1dSSVRFQkFDS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGBaUkFNX1dSSVRFQkFDS2Agc2V0dGluZyBhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBXaGF0IGV4YWN0bHkgcmVsaWVzIG9uIHRoaXMgZmVhdHVyZT8gSXMgaXQgYSBjb3JlIGNvbXBvbmVudCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG1vZHVsZXMsIGRyaXZlcnMsIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVwZW5kIG9uIGBaUkFNX1dSSVRFQkFDS2AgYmVpbmcgZW5hYmxlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIGxpa2VseSBhIHJpcHBsZSBlZmZlY3Q7IGNoYW5naW5nIHRoaXMgY291bGQgaW1wYWN0IHNldmVyYWwgb3RoZXIgYXJlYXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBjb2RlIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBzeW1ib2wsIHRoZW4gd29yayBvdXR3YXJkcywgdHJhY2luZyB0aGUgY2FsbCBzdGFja3MgYW5kIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwuIFRoaXMgYWxzbyB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNldHVwIGFuZCBpZiBhbnkgY2hhbmdlcyBzaG91bGQgYmUgbWFkZSB0byBvcHRpbWl6ZSB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBtYWtlIGEgbm90ZSB0byBteXNlbGYgdG8gZW5zdXJlIHRoYXQgbXkgaW5mb3JtYXRpb24gZ2F0aGVyaW5nIGlzIGNvbXBsZXRlIGJlZm9yZSBtYWtpbmcgYW55IHN1Z2dlc3Rpb25zLCB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIHNvIEkgc2hvdWxkIGJlIGNvbXByZWhlbnNpdmUgaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRkZWZhdWx0IFwmIzM0O2x6NFwmIzM0OyBpZiBaUkFNX0RFRl9DT01QX0xaNFxuIDEwMTpcdFx0ZGVmYXVsdCBcJiMzNDtsejRoY1wmIzM0OyBpZiBaUkFNX0RFRl9DT01QX0xaNEhDXG4gMTAyOlx0XHRkZWZhdWx0IFwmIzM0O3pzdGRcJiMzNDsgaWYgWlJBTV9ERUZfQ09NUF9aU1REXG4gMTAzOlx0XHRkZWZhdWx0IFwmIzM0O2RlZmxhdGVcJiMzNDsgaWYgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG4gMTA0Olx0XHRkZWZhdWx0IFwmIzM0Ozg0MlwmIzM0OyBpZiBaUkFNX0RFRl9DT01QXzg0MlxuIDEwNTpcdFx0ZGVmYXVsdCBcJiMzNDt1bnNldC12YWx1ZVwmIzM0O1xuIDEwNjpcdFxuIDEwNzpcdGNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuIDEwODpcdCAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4gMTA5Olx0ICAgICAgIGRlcGVuZHMgb24gWlJBTVxuIDExMDpcdCAgICAgICBoZWxwXG4gMTExOlx0XHQgVGhpcyBsZXRzIHpyYW0gZW50cmllcyAoaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlcykgYmUgd3JpdHRlblxuIDExMjpcdFx0IGJhY2sgdG8gYSBiYWNraW5nIGRldmljZSwgaGVscGluZyBzYXZlIG1lbW9yeS5cbiAxMTM6XHRcdCBGb3IgdGhpcyBmZWF0dXJlLCBhZG1pbiBzaG91bGQgc2V0IHVwIGJhY2tpbmcgZGV2aWNlIHZpYVxuIDExNDpcdFx0IC9zeXMvYmxvY2svenJhbVgvYmFja2luZ19kZXYuXG4gMTE1Olx0XG4gMTE2Olx0XHQgV2l0aCAvc3lzL2Jsb2NrL3pyYW1YL3tpZGxlLHdyaXRlYmFja30sIGFwcGxpY2F0aW9uIGNvdWxkIGFza1xuIDExNzpcdFx0IGlkbGUgcGFnZSYjMzk7cyB3cml0ZWJhY2sgdG8gdGhlIGJhY2tpbmcgZGV2aWNlIHRvIHNhdmUgaW4gbWVtb3J5LlxuIDExODpcdFxuIDExOTpcdFx0IFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDEyMDpcdFxuIDEyMTpcdGNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuIDEyMjpcdFx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbiAxMjM6XHRcdGRlcGVuZHMgb24gWlJBTVxuIDEyNDpcdFx0aGVscFxuIDEyNTpcdFx0ICBXaXRoIHRoaXMgZmVhdHVyZSB6cmFtIHRyYWNrcyBhY2Nlc3MgdGltZSBvZiBldmVyeSBzdG9yZWRcbiAxMjY6XHRcdCAgZW50cnkgKHBhZ2UpLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBtb3JlIGZpbmUgZ3JhaW5lZCBJRExFXG4gMTI3Olx0XHQgIHBhZ2VzIHdyaXRlYmFjay5cbiAxMjg6XHRcbiAxMjk6XHRjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbiAxMzA6XHRcdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbiAxMzE6XHRcdGRlcGVuZHMgb24gWlJBTSBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbiAxMzI6XHRcdHNlbGVjdCBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuIDEzMzpcdFx0aGVscFxuIDEzNDpcdFx0ICBXaXRoIHRoaXMgZmVhdHVyZSwgYWRtaW4gY2FuIHRyYWNrIHRoZSBzdGF0ZSBvZiBhbGxvY2F0ZWQgYmxvY2tzXG4gMTM1Olx0XHQgIG9mIHpSQU0uIEFkbWluIGNvdWxkIHNlZSB0aGUgaW5mb3JtYXRpb24gdmlhXG4gMTM2Olx0XHQgIC9zeXMva2VybmVsL2RlYnVnL3pyYW0venJhbVgvYmxvY2tfc3RhdGUuXG4gMTM3Olx0XG4gMTM4Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDEzOTpcdFxuIDE0MDpcdGNvbmZpZyBaUkFNX01VTFRJX0NPTVBcbiAxNDE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcJiMzNDtcbiAxNDI6XHRcdGRlcGVuZHMgb24gWlJBTVxuIDE0MzpcdFx0aGVscFxuIDE0NDpcdFx0ICBUaGlzIHdpbGwgZW5hYmxlIG11bHRpLWNvbXByZXNzaW9uIHN0cmVhbXMsIHNvIHRoYXQgWlJBTSBjYW5cbiAxNDU6XHRcdCAgcmUtY29tcHJlc3MgcGFnZXMgdXNpbmcgYSBwb3RlbnRpYWxseSBzbG93ZXIgYnV0IG1vcmUgZWZmZWN0aXZlXG4gMTQ2Olx0XHQgIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gTm90ZSwgdGhhdCBJRExFIHBhZ2UgcmVjb21wcmVzc2lvblxuIDE0NzpcdFx0ICByZXF1aXJlcyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyODkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFpSQU0gQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBaUkFNIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuIEhtbSwgd2FpdCwgaXQgbG9va3MgbGlrZSBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgIGlzIGFsc28gYmVpbmcgdG91Y2hlZCBieSB0aGlzIHBhdGNoPyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIGByZWFkX2Jsb2NrX3N0YXRlYC4gTG9va2luZyBhdCB0aGUgY29kZSBkaWZmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBgaW5kZXhgIHZhcmlhYmxlIHR5cGUsIGNoYW5naW5nIGl0IGZyb20gYHNzaXplX3RgIHRvIGB1bnNpZ25lZCBsb25nYC4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYSBmb3JtYXQgc3RyaW5nIGNoYW5nZSBpbiBgc25wcmludGZgIGZyb20gYCV6ZGAgdG8gYCVsdWAuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsYXJnZXIgdmFsdWVzIHBvdGVudGlhbGx5LiBUaGUgYHJlYWRfYmxvY2tfc3RhdGVgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBibG9jayB0byB0aGUgdXNlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWVkZWQuIFRoZSBwdXJwb3NlIGlzIHRvIGNoZWNrIHRoZSBhY3Rpdml0eSBzdGF0ZSBhbmQgd2hldGhlciB3cml0ZWJhY2sgaXMgZW5hYmxlZCBmb3IgZWFjaCBibG9jay4KClNpbmNlIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgYmVpbmcgbW9kaWZpZWQsIHRoYXQgY29uZmlnIG5lZWRzIHRvIGJlIGVuYWJsZWQgdG9vLiBJdCBsb29rcyBsaWtlIGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgaXMgc2VsZWN0ZWQgYnkgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBpbXBvcnRhbnQgc3ltYm9scy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2U6IGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBhbmQgYHJlY29tcHJlc3Nfc3RvcmVgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIGB3cml0ZWJhY2tfc3RvcmVgIGFuZCBgcmVjb21wcmVzc19zdG9yZWAgYXJlIGFjdHVhbGx5IHByZXNlbnQsIEkgdGhpbmsgdGhhdCBpcyB0aGUgbmV4dCBzdGVwIHRvIHJldmlldyB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlYmFja19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUzMT1zdGF0aWMgc3NpemVfdCBiZF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01NDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1NDc6c3RhdGljIHNzaXplX3QgY29tcHJlc3NlZF93cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTQ4LVx0XHRcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTExOTk9c3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3Jfd3JpdGViYWNrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMjM0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTIzNTpzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTIzNi1cdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQWNrbm93bGVkZ21lbnQgb2YgYHdyaXRlYmFja19zdG9yZWAqKgoKUmlnaHQsIHNvLCB0aGUgaW5pdGlhbCBwcmVtaXNlIGlzIGNsZWFyIC0gdGhlIGB3cml0ZWJhY2tfc3RvcmVgIGV4aXN0cy4gTm8gbmVlZCB0byBiZWxhYm9yIHRoZSBwb2ludC4gV2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGNvbXBvbmVudCwgb3IgZGF0YSBzdHJ1Y3R1cmUsIGlzIGluZGVlZCBwcmVzZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgc3lzdGVtIHdlJiMzOTtyZSBhbmFseXppbmcuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBnaXZlbi4gV2UmIzM5O3JlIG5vdCBkZWJhdGluZyBpdHMgZXhpc3RlbmNlOyB3ZSYjMzk7cmUgcHJvY2VlZGluZyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0JiMzOTtzIHRoZXJlIGFuZCBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIFdlIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvbXByZXNzX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzND1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTQwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjU0MTpzdGF0aWMgc3NpemVfdCByZWNvbXByZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1NDItXHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVmVyaWZ5aW5nIEtleSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaW5kaWNhdGVkIHRoZSBwcmVzZW5jZSBvZiBgcmVjb21wcmVzc19zdG9yZWAsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIG9mIHRoZSBgcmVhZF9ibG9ja19zdGF0ZWAgZnVuY3Rpb24uIEl0cyBjb3JyZWN0IG9wZXJhdGlvbiBpcyBjcml0aWNhbCBmb3IgZXZlcnl0aGluZyB0byB3b3JrIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrIHN0YXRlIGlzIGJlaW5nIHJlYWQgY29ycmVjdGx5LCBvdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHN0b3JlIHdpbGwganVzdCByZXR1cm4gZ2FyYmFnZS4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGFsbCB0aGUgcG9zc2libGUgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9ibG9ja19zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE1Mzc9c3RhdGljIHZvaWQgenJhbV9kZWJ1Z2ZzX2Rlc3Ryb3kodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTQxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTU0MjpzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU0My1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY196cmFtX2Jsb2NrX3N0YXRlX29wID0ge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU5OC1cdC5vcGVuID0gc2ltcGxlX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTk5Olx0LnJlYWQgPSByZWFkX2Jsb2NrX3N0YXRlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTYwMC1cdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uKioKCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgY29uZmlybXMgdGhhdCBgcmVhZF9ibG9ja19zdGF0ZWAgaXMgZGVmaW5pdGVseSBhdmFpbGFibGUuIEdvb2QsIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gYW5kIHdlIG5lZWQgdG8gaGF2ZSB0aGF0IHJlYWR5LgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIHRvbyBmYXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWV0YWRhdGEgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB3b3JrIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gYHpyYW1fbWV0YV9hbGxvY2AgYW5kIGB6cmFtX21ldGFfZnJlZWAuIEkgd2lsbCB3YW50IHRvIGJlIGNvbWZvcnRhYmxlIHdpdGggdGhpcyBjb2RlLCBhbmQga25vdyB0aGF0IGl0IGlzIG5vdCBidWdneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV9tZXRhX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTk3ND1zdGF0aWMgdm9pZCB6cmFtX21ldGFfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE5OTEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxOTkyOnN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTk5My17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg3MT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4OTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODk3Olx0aWYgKCF6cmFtX21ldGFfYWxsb2MoenJhbSwgZGlza3NpemUpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg5OC1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzAzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1czogSW5saW5pbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYCBhcmUgaW5kZWVkIHByZXNlbnQgaW4gdGhlIGNvZGUgYmFzZS4gTXkgaW5pdGlhbCBsaXN0IG9mIEZvY3VzU3ltYm9scyBpbmNsdWRlZCB0aG9zZSwgYW5kIGl0IHNlZW1lZCBsaWtlIGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuCgpCdXQgbm93IEkmIzM5O20gdGhpbmtpbmcsIGhvbGQgb24gYSBzZWNvbmQuLi4gdGhlc2UgZnVuY3Rpb25zLCBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYCwgYXJlIHN0YXRpYywgYW5kIHRoZSBvbmx5IGNhbGwgc2l0ZXMgSSYjMzk7bSBzZWVpbmcgYXJlIGZyb20gYGRpc2tzaXplX3N0b3JlYCBhbmQgYHpyYW1fcmVzZXRfZGV2aWNlYC4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGlubGluaW5nIGlzIGEgbGlrZWx5IG9wdGltaXphdGlvbi4gSWYgdGhleSAqYXJlKiBpbmxpbmVkLCB0aGVuIGZvY3VzaW5nIG9uIHRoZSAqY2FsbGVycyogb2YgdGhvc2UgZnVuY3Rpb25zIChzcGVjaWZpY2FsbHkgYGRpc2tzaXplX3N0b3JlYCBhbmQgYHpyYW1fcmVzZXRfZGV2aWNlYCkgaXMgdGhlIGJldHRlciBhcHByb2FjaC4KCkxldCBtZSBjb25maXJtIHRoZSBjYWxsIHNpdGVzOiBgenJhbV9tZXRhX2FsbG9jYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSB3aXRoaW4gYGRpc2tzaXplX3N0b3JlYCwgc3VnZ2VzdGluZyBpdCYjMzk7cyByaXBlIGZvciBpbmxpbmluZy4gYHpyYW1fbWV0YV9mcmVlYCBpcyBjYWxsZWQgZnJvbSBgenJhbV9yZXNldF9kZXZpY2VgIGFuZCBhbHNvLCBpbXBvcnRhbnRseSwgZnJvbSBgZGlza3NpemVfc3RvcmVgIChsaWtlbHkgb24gdGhlIGVycm9yIHBhdGgpLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgc2ltcGxpZnkgbXkgZm9jdXMuIEluc3RlYWQgb2YgbGlzdGluZyBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYCwgaXQmIzM5O3MgbXVjaCBtb3JlIHJlbGV2YW50IHRvIGluY2x1ZGUgYGRpc2tzaXplX3N0b3JlYCBhbmQgZWl0aGVyIGB6cmFtX3Jlc2V0X2RldmljZWAgb3IsIHBlcmhhcHMgbW9yZSBnZW5lcmljYWxseSwgdGhlIGByZXNldF9zdG9yZWAgZnVuY3Rpb24sIGlmIHRoYXQmIzM5O3MgYSBtb3JlIGFjY3VyYXRlIG5hbWUgd2l0aGluIHRoZSBjb2RlJiMzOTtzIGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jlc2V0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg3MT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5MjUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTI2OnN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5MjctXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzEyOD1zdGF0aWMgaW50IHpyYW1fcmVtb3ZlKHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDYtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ3Olx0XHQgKiBJZiB3ZSB3ZXJlIGNsYWltZWQgYnkgcmVzZXRfc3RvcmUoKSwgZGVsX2dlbmRpc2soKSB3aWxsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ4Olx0XHQgKiB3YWl0IHVudGlsIHJlc2V0X3N0b3JlKCkgaXMgZG9uZSwgc28gbm90aGluZyBuZWVkIHRvIGRvLlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE0OS1cdFx0ICovXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMxNjE6XHQvKiBkZWxfZ2VuZGlzayBkcmFpbnMgcGVuZGluZyByZXNldF9zdG9yZSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2Mi1cdFdBUk5fT05fT05DRShjbGFpbWVkIFx1MDAyNlx1MDAyNiB6cmFtLVx1MDAzZWNsYWltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBaUkFNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGByZXNldF9zdG9yZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50IGluIHRoZSBjb2RlLiBHaXZlbiB0aGF0LCBhbmQgYWZ0ZXIgZXhhbWluaW5nIHRoZSBjb2RlLCBJIHRoaW5rIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZTogYGRpc2tzaXplX3N0b3JlYCwgYHpyYW1fc3VibWl0X2Jpb2AsIGByZWFkX2Jsb2NrX3N0YXRlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGByZXNldF9zdG9yZWAuICBUaGV5IHNlZW0gdG8gY292ZXIgdGhlIGtleSBhcmVhcyBvZiB0aGUgY2hhbmdlcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSSBpbml0aWFsbHkgdGhvdWdodCBgQ09ORklHX1pSQU1gIG1pZ2h0IGJlIGVub3VnaCwgYnV0IGEgY2xvc2VyIGxvb2sgdGVsbHMgbWUgd2UgYWxzbyBuZWVkIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLCBgQ09ORklHX1pSQU1fTVVMVElfQ09NUGAsIGFuZCBgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYC4gIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIHNvIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQgYXMgd2VsbC4gIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgZGVwZW5kZW5jeS4uLlllcCwgaXQgZGVwZW5kcyBvbiBib3RoIGBaUkFNYCBhbmQgYERFQlVHX0ZTYC4gQW5kIEkgc2VlIHRoYXQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCBpcyBzZWxlY3RlZCBieSBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLgoKU28sIHRoZSBkZWZpbml0aXZlIGVuYWJsZSBjb25maWdzIHNob3VsZCBiZTogYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AuCgpJJiMzOTtsbCBxdWlja2x5IHNjYW4gdGhlIHBhdGNoIGFnYWluIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBjb25maWdzLiAgUmlnaHQsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGNvdmVyIGZ1bmN0aW9ucyB1bmRlciBgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCBsaWtlIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGByZWFkX2Zyb21fenNwb29sYCwgYHpyYW1fd3JpdGViYWNrX2NvbXBsZXRlYCwgYHpyYW1fd3JpdGViYWNrX3Nsb3RzYCwgYHNjYW5fc2xvdHNfZm9yX3dyaXRlYmFja2AsIGB3cml0ZWJhY2tfc3RvcmVgLCBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzYCwgYHJlYWRfZnJvbV9iZGV2X2FzeW5jYCwgYHJlYWRfZnJvbV9iZGV2X3N5bmNgLCBhbmQgYHJlYWRfZnJvbV9iZGV2YCwgYW5kIGByZWFkX2Jsb2NrX3N0YXRlYCB1bmRlciBgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGByZWNvbXByZXNzX3Nsb3RgIGFuZCBgcmVjb21wcmVzc19zdG9yZWAgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiAgU28gbXkgZWFybGllciBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiBpcyBzb2xpZC4KCkFscmlnaHQsIGxldCYjMzk7cyByZXZpc2l0IHRob3NlIGZvY3VzIHN5bWJvbHM6IGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgLiAgVGhleSYjMzk7cmUgYWxsIGVpdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBBUEkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgc3lzZnMsIGJsb2NrIGxheWVyLCBvciBkZWJ1Z2ZzLiAgQ3J1Y2lhbGx5LCB0aGV5JiMzOTtyZSAqbm90KiBpbmxpbmVkIGFuZCBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gVGhhdCBsb29rcyBnb29kLgoKTm93LCBsZXQgbWUgY29uZmlybSB0aGF0IGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSBjb3JyZWN0IGJsb2NrIGxheWVyIGVudHJ5IHBvaW50LiAgWWVzLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgenJhbV9kZXZvcHMuc3VibWl0X2Jpb2AuICBBcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBgenJhbV9idmVjX3JlYWRgIGFuZCBgenJhbV9idmVjX3dyaXRlYCBhcmUgY2FsbGVkIGZyb20gYHpyYW1fYmlvX3JlYWRgIGFuZCBgenJhbV9iaW9fd3JpdGVgLCB3aGljaCBhcmUgKmluIHR1cm4qIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBTbywgYHpyYW1fc3VibWl0X2Jpb2AgYWN0cyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3MgY3J5c3RhbGxpemUgdGhlIHRlc3QgcmF0aW9uYWxlLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgdGhlIHpyYW0gc2xvdCBpbmRleCB0eXBlIGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gVGhpcyBpcyB0byBzdXBwb3J0IGxhcmdlciBkZXZpY2VzIChvdmVyIDE2VEIpIG9uIDY0LWJpdCBzeXN0ZW1zIGFuZCBhdm9pZCBvdmVyZmxvdyBpc3N1ZXMgb24gMzItYml0LiBJdCAqYWxzbyogYWRkcyBhIHNpemUgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYCB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIGEgZGlzayBzaXplIHRoYXQgd291bGQgZXhjZWVkIHRoZSBsaW1pdHMgb2YgYW4gYHVuc2lnbmVkIGxvbmdgIGluZGV4LiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSB6cmFtIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5IHNob3VsZCBmb2N1cyBvbiBmdXp6aW5nIHRoZSBzeXNmcyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgKGBkaXNrc2l6ZV9zdG9yZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGByZXNldF9zdG9yZWApLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgKGByZWFkX2Jsb2NrX3N0YXRlYCksIGFuZCB0aGUgYmxvY2sgZGV2aWNlIElPIGVudHJ5IHBvaW50IChgenJhbV9zdWJtaXRfYmlvYCkuICBUbyBmYWNpbGl0YXRlIHRoaXMsIHdlJiMzOTtsbCBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gZW5zdXJlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzLCBhcmUgY29tcGlsZWQgYW5kIGV4ZXJjaXNlZC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgcmlnaHQgZm9yIGByZWFkX2Jsb2NrX3N0YXRlYC4gWXVwLCBpdCBpcy4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTIxPWNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgWlJBTSBNZW1vcnkgVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHNpbXBsZSBlbm91Z2gsIGFuZCB0aGUgY29udGV4dCBpcyBjbGVhci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7WWVzLCBpdCBpcy4mIzM0OyBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9uLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciBgcmVhZF9ibG9ja19zdGF0ZWAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZy4gTXkgbmV4dCBzdGVwLCBhcyBhbiBleHBlcnQgaW4gdGhpcywgaXMgdG8gY29uZmlybSBpdHMgaW5jbHVzaW9uIHVuZGVyIGAjaWZkZWYgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYC4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIHVuZGVyIGRpZmZlcmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaW4gWlJBTS4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyBub3QgYmVlbiBzZXQgYnkgc29tZSBvdGhlciBtZWFucyB0aGF0IEkgaGF2ZW4mIzM5O3QgY29tZSBhY3Jvc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTUyMz1zdGF0aWMgdm9pZCB6cmFtX3JlbGVhc2VfYmRldl9ibG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBibGtfaWR4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MjctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTI4OiNpZmRlZiBDT05GSUdfWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MjktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9MTA3PXN0cnVjdCB6cmFtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xNDItI2VuZGlmXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxNDM6I2lmZGVmIENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQ0LVx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIFJlY29tcHJlc3Npb24gTG9naWMqKgoKT2theSwgeWVzLCB0aGF0JiMzOTtzIHJpZ2h0LiBOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBtdWx0aS1jb21wcmVzc2lvbiBaUkFNIGNvbmZpZ3VyYXRpb24uIFRvIHZlcmlmeSB0aGlzLCBJIG5lZWQgdG8gY29uZmlybSBpdHMgcGxhY2VtZW50LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiBpcyBuZXN0ZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QYC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgdG8gZW5zdXJlIHRoYXQgdGhlIGxvZ2ljIGlzIGNvcnJlY3RseSBjb21waWxlZCBhbmQgaGFuZGxlZCB3aGVuIG11bHRpLWNvbXByZXNzaW9uIGlzIGVuYWJsZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGF0IGl0IGlzbiYjMzk7dCBjYXVzaW5nIGFueSBjb25mbGljdHMgaWYgdGhhdCYjMzk7cyBub3QgdGhlIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2FuaXR5IGNoZWNrIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gYW55IHJlbGF0ZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1pSQU1fTVVMVElfQ09NUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjE4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYXJ0aWFsX2lvKHN0cnVjdCBiaW9fdmVjICpidmVjKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMy1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDojaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0sgfHwgZGVmaW5lZCBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUtc3RydWN0IHpyYW1fcHBfc2xvdCB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgxOT1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgzMC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MzE6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MzItc3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzY1PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzcyLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM3MzojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3NC0jZGVmaW5lIFJFQ09NUFJFU1NfSURMRVx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDAzPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wcmVzc2VkX3dyaXRlYmFjayk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA0LSNlbmRpZlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNTojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNi1zdGF0aWMgREVWSUNFX0FUVFJfUlcocmVjb21wX2FsZ29yaXRobSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzAxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqenJhbV9kaXNrX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAzMS1cdFx1MDAyNmRldl9hdHRyX2RlYnVnX3N0YXQuYXR0cixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMzI6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMzMtXHRcdTAwMjZkZXZfYXR0cl9yZWNvbXBfYWxnb3JpdGhtLmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9Nzk9c3RydWN0IHpyYW1fc3RhdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk2LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg6OTc6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk4LSNkZWZpbmUgWlJBTV9QUklNQVJZX0NPTVBcdDBVXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCB0aGVzZSB3ZXJlIG15IG93biB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBXcml0ZWJhY2sgU3RvcmUqKgoKWWVzLCB0aGF0JiMzOTtzIHJpZ2h0LCBpdCBkZWZpbml0ZWx5IGlzLiAKCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGB3cml0ZWJhY2tfc3RvcmVgIGlzIGNvcnJlY3RseSBndWFyZGVkIGJ5IHRoZSBgI2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGJlaGF2aW9yLiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3Mgb25seSBpbmNsdWRlZCB3aGVuIHdyaXRlYmFjayBzdXBwb3J0IGlzIGVuYWJsZWQuIE90aGVyd2lzZSwgdGhlcmUgY291bGQgYmUgYWxsIHNvcnRzIG9mIHByb2JsZW1zLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIHNvdW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWlJBTV9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mj1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg1OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ4Ni0jZGVmaW5lIElOVkFMSURfQkRFVl9CTE9DS1x0XHQofjBVTClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDk3PXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTIyOiNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEyMy1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yOTk1PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5OTctc3RhdGljIERFVklDRV9BVFRSX1JPKGJkX3N0YXQpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTktXHRcdTAwMjZkZXZfYXR0cl9jb21wX2FsZ29yaXRobS5hdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAyMDojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDIxLVx0XHUwMDI2ZGV2X2F0dHJfYmRfc3RhdC5hdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNDY9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwODQtXHRpbml0X3J3c2VtKFx1MDAyNnpyYW0tXHUwMDNlZGV2X2xvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzA4NTojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDg2LVx0enJhbS1cdTAwM2V3Yl9iYXRjaF9zaXplID0gMzI7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9Nzk9c3RydWN0IHpyYW1fc3RhdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTg5LVx0YXRvbWljNjRfdCBtaXNzX2ZyZWU7XHRcdC8qIG5vLiBvZiBtaXNzZWQgZnJlZSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg6OTA6I2lmZGVmXHRDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTkxLVx0YXRvbWljNjRfdCBiZF9jb3VudDtcdFx0Lyogbm8uIG9mIHBhZ2VzIGluIGJhY2tpbmcgZGV2aWNlICovXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9MTA3PXN0cnVjdCB6cmFtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xMzItXHRib29sIGNsYWltOyAvKiBQcm90ZWN0ZWQgYnkgZGlzay1cdTAwM2VvcGVuX211dGV4ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxMzM6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTM0LVx0c3RydWN0IGZpbGUgKmJhY2tpbmdfZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQyMgoJCQkJCQkJb3V0cHV0OiAzMTYKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWlJBTSBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBpdCYjMzk7cyBhbGwgc3RhcnRpbmcgdG8gY29tZSB0b2dldGhlci4gSSYjMzk7dmUgZ290IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gbWluZDogYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AuIE5vdyBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scyBJJiMzOTttIGRlYWxpbmcgd2l0aC4gSSBoYXZlIGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgIHRoYXQgbmVlZCB0byBiZSB2ZXJpZmllZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IG5hbWVzIGFuZCBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGVhY2guCgpGaXJzdCwgbGV0JiMzOTtzIGNvbmZpcm0gYHJlc2V0X3N0b3JlYC4gWWVzLCBsb29rcyBnb29kIOKAkyB0aGUgc2lnbmF0dXJlIG1hdGNoZXM6IGBzdGF0aWMgc3NpemVfdCByZXNldF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gRXhjZWxsZW50LgoKTm93LCBvbiB0byBgenJhbV9zdWJtaXRfYmlvYC4gWWVwLCB0aGUgZGVmaW5pdGlvbiBpcyBjb3JyZWN0OiBgc3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylgLgoKQ2hlY2tpbmcgYGRpc2tzaXplX3N0b3JlYDogYHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilgLiBBbGwgaW4gb3JkZXIuCgpOZXh0LCBgcmVhZF9ibG9ja19zdGF0ZWA6IGBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylgLiBDb25maXJtZWQuCgpgd3JpdGViYWNrX3N0b3JlYDogYHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gUmlnaHQgb24gdGFyZ2V0LgoKRmluYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgOiBgc3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gUGVyZmVjdC4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGhlIG5hbWVzIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzIGFyZSBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIEkmIzM5O20gc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OywKICAgICYjMzQ7WlJBTV9NRU1PUllfVFJBQ0tJTkcmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX3N1Ym1pdF9iaW8mIzM0OywKICAgICYjMzQ7cmVhZF9ibG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wcmVzc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OywKICAgICYjMzQ7WlJBTV9NRU1PUllfVFJBQ0tJTkcmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX3N1Ym1pdF9iaW8mIzM0OywKICAgICYjMzQ7cmVhZF9ibG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wcmVzc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUyOjQ1LjUxNzY4NDM2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODcyNDg2MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fV1JJVEVCQUNLXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIixcbiAgICBcIlpSQU1fTUVNT1JZX1RSQUNLSU5HXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJ6cmFtX3N1Ym1pdF9iaW9cIixcbiAgICBcInJlYWRfYmxvY2tfc3RhdGVcIixcbiAgICBcIndyaXRlYmFja19zdG9yZVwiLFxuICAgIFwicmVjb21wcmVzc19zdG9yZVwiLFxuICAgIFwicmVzZXRfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NDUuNTE3Njk3Nzg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4MzIwODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWNjMmJjZDliNjZiYmNlNTUwZTA1ZjVhNGFlZGMxNzZjMzFjZDljYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDAzOjUyOjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5pbmRleCA1NjE4M2M4MjdlMWIzLi42YWY5NzdkYmM2ZmRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5AQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgc2l6ZV90IGh1Z2VfY2xhc3Nfc2l6ZTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHM7XFxuIFxcbi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7XFxuK3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCk7XFxuIFxcbiAvKlxcbiAgKiBlbnRyeSBsb2NraW5nIHJ1bGVzOlxcbkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KTtcXG4gICogNCkgVXNlIFRSWSBsb2NrIHZhcmlhbnQgd2hlbiBpbiBhdG9taWMgY29udGV4dFxcbiAgKiAgICAtIG11c3QgY2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBoYW5kbGUgbG9ja2luZyBmYWlsZXJzXFxuICAqL1xcbi1zdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc2xvdF90cnlsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyAqbG9jayA9IFxcdTAwMjZ6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uX19sb2NrO1xcbiBcXG5AQCAtODMsNyArODMsNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc2xvdF90cnlsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXFx1MDAyNnpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XFxuIFxcbkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbiBcXHRsb2NrX2FjcXVpcmVkKFxcdTAwMjZ6cmFtLVxcdTAwM2V0YWJsZV9sb2NrX21hcCwgX1JFVF9JUF8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbitzdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXFx1MDAyNnpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XFxuIFxcbkBAIC0xMTAsNTUgKzExMCw1NiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB6cmFtICpkZXZfdG9fenJhbShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiAoc3RydWN0IHpyYW0gKilkZXZfdG9fZGlzayhkZXYpLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5oYW5kbGU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpXFxuIHtcXG4gXFx0enJhbS1cXHUwMDNldGFibGVbaW5kZXhdLmhhbmRsZSA9IGhhbmRsZTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcXG4rc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsXFxuIFxcdFxcdFxcdCAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcXG4ge1xcbiBcXHRyZXR1cm4genJhbS1cXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXFx1MDAyNiBCSVQoZmxhZyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4gXFx0XFx0XFx0ICBlbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpXFxuIHtcXG4gXFx0enJhbS1cXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgfD0gQklUKGZsYWcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjbGVhcl9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcXG4rc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbiBcXHRcXHRcXHQgICAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKVxcbiB7XFxuIFxcdHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFxcdTAwMjY9IH5CSVQoZmxhZyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzaXplX3QgZ2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbitzdGF0aWMgc2l6ZV90IGdldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFxcdTAwMjYgKEJJVChaUkFNX0ZMQUdfU0hJRlQpIC0gMSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc2l6ZV90IHNpemUpXFxuK3N0YXRpYyB2b2lkIHNldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSB6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcXHUwMDNlXFx1MDAzZSBaUkFNX0ZMQUdfU0hJRlQ7XFxuIFxcbiBcXHR6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyA9IChmbGFncyBcXHUwMDNjXFx1MDAzYyBaUkFNX0ZMQUdfU0hJRlQpIHwgc2l6ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHNsb3RfYWxsb2NhdGVkKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCkgfHxcXG4gXFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHxcXG4gXFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgIHUzMiBwcmlvKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbylcXG4ge1xcbiBcXHRwcmlvIFxcdTAwMjY9IFpSQU1fQ09NUF9QUklPUklUWV9NQVNLO1xcbiBcXHQvKlxcbkBAIC0xNzAsMTQgKzE3MSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxcbiBcXHR6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyB8PSAocHJpbyBcXHUwMDNjXFx1MDAzYyBaUkFNX0NPTVBfUFJJT1JJVFlfQklUMSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcXG4rc3RhdGljIGlubGluZSB1MzIgZ2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1MzIgcHJpbyA9IHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFxcdTAwM2VcXHUwMDNlIFpSQU1fQ09NUF9QUklPUklUWV9CSVQxO1xcbiBcXG4gXFx0cmV0dXJuIHByaW8gXFx1MDAyNiBaUkFNX0NPTVBfUFJJT1JJVFlfTUFTSztcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWFya19zbG90X2FjY2Vzc2VkKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XFxuIFxcdGNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9QUF9TTE9UKTtcXG5AQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHBfY3RsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgenJhbV9wcF9jdGwgKmN0bClcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgcGxhY2VfcHBfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwsXFxuLVxcdFxcdFxcdCAgdTMyIGluZGV4KVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IHpyYW1fcHBfc2xvdCAqcHBzO1xcbiBcXHR1MzIgYmlkO1xcbkBAIC00MTgsNyArNDE5LDcgQEAgc3RhdGljIHZvaWQgbWFya19pZGxlKHN0cnVjdCB6cmFtICp6cmFtLCBrdGltZV90IGN1dG9mZilcXG4ge1xcbiBcXHRpbnQgaXNfaWRsZSA9IDE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRpbnQgaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcbiBcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBucl9wYWdlczsgaW5kZXgrKykge1xcbiBcXHRcXHQvKlxcbkBAIC00ODUsOCArNDg2LDkgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAjZGVmaW5lIElOVkFMSURfQkRFVl9CTE9DS1xcdFxcdCh+MFVMKVxcbiBcXG4gc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdFxcdHUzMiBpbmRleCk7XFxuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCk7XFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpbmRleCk7XFxuIFxcbiBzdHJ1Y3QgenJhbV93Yl9jdGwge1xcbiBcXHQvKiBpZGxlIGxpc3QgaXMgYWNjZXNzZWQgb25seSBieSB0aGUgd3JpdGViYWNrIHRhc2ssIG5vIGNvbmN1cmVuY3kgKi9cXG5AQCAtNTIyLDcgKzUyNCw3IEBAIHN0cnVjdCB6cmFtX3JiX3JlcSB7XFxuIFxcdFxcdC8qIGVycm9yIHN0YXR1cyAoc3luYyByZWFkKSAqL1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuIFxcdH07XFxuLVxcdHUzMiBpbmRleDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gfTtcXG4gXFxuICNkZWZpbmUgRk9VUl9LKHgpICgoeCkgKiAoMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCAtIDEyKSkpXFxuQEAgLTkxMCw3ICs5MTIsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FjY291bnRfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgenJhbSAqenJhbSlcXG4gXFxuIHN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxcbiB7XFxuLVxcdHUzMiBpbmRleCA9IHJlcS1cXHUwMDNlcHBzLVxcdTAwM2VpbmRleDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS1cXHUwMDNlcHBzLVxcdTAwM2VpbmRleDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGVyciA9IGJsa19zdGF0dXNfdG9fZXJybm8ocmVxLVxcdTAwM2ViaW8uYmlfc3RhdHVzKTtcXG5AQCAtMTAzMiw3ICsxMDM0LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcXG4gXFx0c3RydWN0IHpyYW1fd2JfcmVxICpyZXEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgenJhbV9wcF9zbG90ICpwcHM7XFxuIFxcdGludCByZXQgPSAwLCBlcnIgPSAwO1xcbi1cXHR1MzIgaW5kZXggPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gMDtcXG4gXFxuIFxcdHdoaWxlICgocHBzID0gc2VsZWN0X3BwX3Nsb3QoY3RsKSkpIHtcXG4gXFx0XFx0aWYgKHpyYW0tXFx1MDAzZXdiX2xpbWl0X2VuYWJsZSBcXHUwMDI2XFx1MDAyNiAhenJhbS1cXHUwMDNlYmRfd2JfbGltaXQpIHtcXG5AQCAtMTE5OCw3ICsxMjAwLDcgQEAgc3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3Jfd3JpdGViYWNrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGxvLCB1bnNpZ25lZCBsb25nIGhpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB6cmFtX3BwX2N0bCAqY3RsKVxcbiB7XFxuLVxcdHUzMiBpbmRleCA9IGxvO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbG87XFxuIFxcbiBcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBoaSkge1xcbiBcXHRcXHRib29sIG9rID0gdHJ1ZTtcXG5AQCAtMTIzNSw3ICsxMjM3LDcgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGViYWNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XFxuLVxcdHU2NCBucl9wYWdlcyA9IHpyYW0tXFx1MDAzZWRpc2tzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvID0gMCwgaGkgPSBucl9wYWdlcztcXG4gXFx0c3RydWN0IHpyYW1fcHBfY3RsICpwcF9jdGwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgenJhbV93Yl9jdGwgKndiX2N0bCA9IE5VTEw7XFxuQEAgLTEzMzMsNyArMTMzNSw4IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuQEAgLTEzNzUsNyArMTM3OCw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIFxcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB6cmFtX3JiX3JlcSwgd29yayk7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYmlvX2ZpcnN0X3BhZ2VfYWxsKHJlcS1cXHUwMDNlYmlvKTtcXG4gXFx0c3RydWN0IHpyYW0gKnpyYW0gPSByZXEtXFx1MDAzZXpyYW07XFxuLVxcdHUzMiBpbmRleCA9IHJlcS1cXHUwMDNlaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSByZXEtXFx1MDAzZWluZGV4O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbkBAIC0xNDI2LDcgKzE0MjksNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X2FzeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0XFx0XFx0dTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJpbyAqcGFyZW50KVxcbiB7XFxuIFxcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxO1xcbkBAIC0xNDc2LDggKzE0NzksOCBAQCBzdGF0aWMgdm9pZCB6cmFtX3N5bmNfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuICAqIGNoYWluZWQgSU8gd2l0aCBwYXJlbnQgSU8gaW4gc2FtZSBjb250ZXh0LCBpdCdzIGEgZGVhZGxvY2suIFRvIGF2b2lkIHRoYXQsXFxuICAqIHVzZSBhIHdvcmtlciB0aHJlYWQgY29udGV4dC5cXG4gICovXFxuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4tXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeClcXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeClcXG4ge1xcbiBcXHRzdHJ1Y3QgenJhbV9yYl9yZXEgcmVxO1xcbiBcXG5AQCAtMTQ5Niw4ICsxNDk5LDkgQEAgc3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxcbiBcXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxcbi1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCwgc3RydWN0IGJpbyAqcGFyZW50KVxcbitzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxcbiB7XFxuIFxcdGF0b21pYzY0X2luYyhcXHUwMDI2enJhbS1cXHUwMDNlc3RhdHMuYmRfcmVhZHMpO1xcbiBcXHRpZiAoIXBhcmVudCkge1xcbkBAIC0xNTA5LDggKzE1MTMsOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxcbiB9XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9iZGV2KHN0cnVjdCB6cmFtICp6cmFtKSB7fTtcXG4tc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGJsa19pZHgsIHN0cnVjdCBiaW8gKnBhcmVudClcXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBiaW8gKnBhcmVudClcXG4ge1xcbiBcXHRyZXR1cm4gLUVJTztcXG4gfVxcbkBAIC0xNTM4LDcgKzE1NDMsOCBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4ge1xcbiBcXHRjaGFyICprYnVmO1xcbi1cXHRzc2l6ZV90IGluZGV4LCB3cml0dGVuID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFx0c3NpemVfdCB3cml0dGVuID0gMDtcXG4gXFx0c3RydWN0IHpyYW0gKnpyYW0gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG5AQCAtMTU2MCw3ICsxNTY2LDcgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXG4gXFx0XFx0Y29waWVkID0gc25wcmludGYoa2J1ZiArIHdyaXR0ZW4sIGNvdW50LFxcbi1cXHRcXHRcXHRcXFwiJTEyemQgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFxcIiUxMmx1ICUxMnUuJTA2ZCAlYyVjJWMlYyVjJWNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGluZGV4LCB6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lLCAwLFxcbiBcXHRcXHRcXHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSA/ICdzJyA6ICcuJyxcXG4gXFx0XFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpID8gJ3cnIDogJy4nLFxcbkBAIC0xOTY3LDggKzE5NzMsOCBAQCBzdGF0aWMgc3NpemVfdCBkZWJ1Z19zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXG4gc3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG4ge1xcbi1cXHRzaXplX3QgbnVtX3BhZ2VzID0gZGlza3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0c2l6ZV90IGluZGV4O1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IGRpc2tzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcbiBcXHRpZiAoIXpyYW0tXFx1MDAzZXRhYmxlKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE5ODUsNyArMTk5MSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXFxuIFxcbiBzdGF0aWMgYm9vbCB6cmFtX21ldGFfYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG4ge1xcbi1cXHRzaXplX3QgbnVtX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcXG4gXFxuIFxcdG51bV9wYWdlcyA9IGRpc2tzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHpyYW0tXFx1MDAzZXRhYmxlID0gdnphbGxvYyhhcnJheV9zaXplKG51bV9wYWdlcywgc2l6ZW9mKCp6cmFtLVxcdTAwM2V0YWJsZSkpKTtcXG5AQCAtMjAwOCw3ICsyMDE0LDcgQEAgc3RhdGljIGJvb2wgenJhbV9tZXRhX2FsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcXG4rc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXG5AQCAtMjA2Miw3ICsyMDY4LDcgQEAgc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0XFx0XFx0IHUzMiBpbmRleClcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0dm9pZCAqbWVtO1xcbiBcXG5AQCAtMjA3Myw3ICsyMDc5LDcgQEAgc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICB1MzIgaW5kZXgpXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXHR2b2lkICpzcmMsICpkc3Q7XFxuQEAgLTIwODgsNyArMjA5NCw4IEBAIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuQEAgLTIxMTMsNyArMjEyMCw4IEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIH1cXG4gXFxuICNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbkBAIC0yMTQ1LDcgKzIxNTMsOCBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuXFxuICAqIENvcnJlc3BvbmRpbmcgWlJBTSBzbG90IHNob3VsZCBiZSBsb2NrZWQuXFxuICAqL1xcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdGlmICh0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxcbiBcXHQgICAgIWdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCkpXFxuQEAgLTIxNTcsOCArMjE2Niw4IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcXG4gXFx0XFx0cmV0dXJuIHJlYWRfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXFxuLVxcdFxcdFxcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxcbitzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTIxODAsNyArMjE4OSw3IEBAIHN0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXFxuIFxcbiBcXHQvKiBTaG91bGQgTkVWRVIgaGFwcGVuLiBSZXR1cm4gYmlvIGVycm9yIGlmIGl0IGRvZXMuICovXFxuIFxcdGlmIChXQVJOX09OKHJldCBcXHUwMDNjIDApKVxcbi1cXHRcXHRwcl9lcnIoXFxcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcXFxcblxcXCIsIHJldCwgaW5kZXgpO1xcbitcXHRcXHRwcl9lcnIoXFxcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JWx1XFxcXG5cXFwiLCByZXQsIGluZGV4KTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMjE5MCw3ICsyMTk5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4gICogYWx3YXlzIGV4cGVjdHMgYSBmdWxsIHBhZ2UgZm9yIHRoZSBvdXRwdXQuXFxuICAqL1xcbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi1cXHRcXHRcXHRcXHQgIHUzMiBpbmRleCwgaW50IG9mZnNldClcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgb2Zmc2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9JTyk7XFxuIFxcdGludCByZXQ7XFxuQEAgLTIyMDUsNyArMjIxNCw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWRfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi1cXHRcXHRcXHQgIHUzMiBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcXG4gXFx0XFx0cmV0dXJuIHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XFxuQEAgLTIyMTMsNyArMjIyMiw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4tXFx0XFx0XFx0XFx0ICB1MzIgaW5kZXgpXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xcbiBcXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xcbkBAIC0yMjI4LDcgKzIyMzcsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4gfVxcbiBcXG4gc3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgaW5kZXgpXFxuK1xcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4gXFx0dm9pZCAqc3JjO1xcbkBAIC0yMjY4LDcgKzIyNzcsOCBAQCBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuQEAgLTIzMzUsNyArMjM0NSw3IEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiAgKiBUaGlzIGlzIGEgcGFydGlhbCBJTy4gUmVhZCB0aGUgZnVsbCBwYWdlIGJlZm9yZSB3cml0aW5nIHRoZSBjaGFuZ2VzLlxcbiAgKi9cXG4gc3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuLVxcdFxcdFxcdFxcdCAgIHUzMiBpbmRleCwgaW50IG9mZnNldClcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8pO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0yMzUzLDcgKzIzNjMsNyBAQCBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4gfVxcbiBcXG4gc3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi1cXHRcXHRcXHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXFxuIFxcdFxcdHJldHVybiB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcXG5AQCAtMjQyMSw4ICsyNDMxLDkgQEAgc3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3JfcmVjb21wcmVzcyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsIHUzMiBwcmlvLFxcbiAgKlxcbiAgKiBDb3JyZXNwb25kaW5nIFpSQU0gc2xvdCBzaG91bGQgYmUgbG9ja2VkLlxcbiAgKi9cXG4tc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdCAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pXFxuK3N0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0ICpudW1fcmVjb21wX3BhZ2VzLFxcbitcXHRcXHRcXHQgICB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSBOVUxMO1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZV9vbGQ7XFxuQEAgLTI2NzQsNyArMjY4NSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBzdGF0aWMgdm9pZCB6cmFtX2Jpb19kaXNjYXJkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4gXFx0c2l6ZV90IG4gPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG4tXFx0dTMyIGluZGV4ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcXHUwMDNlXFx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcXHUwMDNlXFx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xcbiBcXHR1MzIgb2Zmc2V0ID0gKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgXFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcXHUwMDNjXFx1MDAzY1xcbiBcXHRcXHRcXHRTRUNUT1JfU0hJRlQ7XFxuIFxcbkBAIC0yNzE1LDcgKzI3MjYsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2Jpb19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cXHUwMDNlYmlfaXRlcjtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0dTMyIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgXFx1MDAzZVxcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XFxuIFxcdFxcdHUzMiBvZmZzZXQgPSAoaXRlci5iaV9zZWN0b3IgXFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcXHUwMDNjXFx1MDAzY1xcbiBcXHRcXHRcXHRcXHRTRUNUT1JfU0hJRlQ7XFxuIFxcdFxcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcXG5AQCAtMjc0Niw3ICsyNzU3LDcgQEAgc3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0c3RydWN0IGJ2ZWNfaXRlciBpdGVyID0gYmlvLVxcdTAwM2ViaV9pdGVyO1xcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcXHUwMDNlXFx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgXFx1MDAzZVxcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcXG4gXFx0XFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcXHUwMDI2IChTRUNUT1JTX1BFUl9QQUdFIC0gMSkpIFxcdTAwM2NcXHUwMDNjXFxuIFxcdFxcdFxcdFxcdFNFQ1RPUl9TSElGVDtcXG4gXFx0XFx0c3RydWN0IGJpb192ZWMgYnYgPSBiaW9faXRlcl9pb3ZlYyhiaW8sIGl0ZXIpO1xcbkBAIC0yODYwLDYgKzI4NzEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcXG4gc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xcbiBcXHR1NjQgZGlza3NpemU7XFxuIFxcdHN0cnVjdCB6Y29tcCAqY29tcDtcXG4gXFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbkBAIC0yODc3LDYgKzI4ODksMTEgQEAgc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0ZGlza3NpemUgPSBQQUdFX0FMSUdOKGRpc2tzaXplKTtcXG4rXFx0bnVtX3BhZ2VzID0gZGlza3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXFxuK1xcdGlmICghbnVtX3BhZ2VzIHx8ICgodTY0KW51bV9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NDYuODU2ODg0NDc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTA1MzMyNzEyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9XUklURUJBQ0tcIixcbiAgICBcIlpSQU1fTVVMVElfQ09NUFwiLFxuICAgIFwiWlJBTV9NRU1PUllfVFJBQ0tJTkdcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpyYW1fc3VibWl0X2Jpb1wiLFxuICAgIFwicmVhZF9ibG9ja19zdGF0ZVwiLFxuICAgIFwid3JpdGViYWNrX3N0b3JlXCIsXG4gICAgXCJyZWNvbXByZXNzX3N0b3JlXCIsXG4gICAgXCJyZXNldF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHpyYW0gc2xvdCBpbmRleCBmcm9tIGB1MzJgIHRvIGB1bnNpZ25lZCBsb25nYCB0aHJvdWdob3V0IHRoZSB6cmFtIGRyaXZlciB0byBzdXBwb3J0IGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiBvbiA2NC1iaXQgc3lzdGVtcyBhbmQgcHJldmVudCBvdmVyZmxvdyBvbiAzMi1iaXQgc3lzdGVtcy4gSXQgYWxzbyBhZGRzIGEgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYCB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIGEgZGlzayBzaXplIHRoYXQgd291bGQgb3ZlcmZsb3cgdGhlIGB1bnNpZ25lZCBsb25nYCBpbmRleC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gZHJpdmVyIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIGNoYW5nZXMsIHdlIHNob3VsZCBmdXp6IHRoZSBzeXNmcyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgKGBkaXNrc2l6ZV9zdG9yZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGByZXNldF9zdG9yZWApLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgKGByZWFkX2Jsb2NrX3N0YXRlYCksIGFuZCB0aGUgYmxvY2sgZGV2aWNlIElPIGVudHJ5IHBvaW50IChgenJhbV9zdWJtaXRfYmlvYCkuIFdlIG5lZWQgdG8gZW5hYmxlIGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpSQU1fTVVMVElfQ09NUGAsIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIGFuZCBgREVCVUdfRlNgIHRvIGNvbXBpbGUgYW5kIHRlc3QgYWxsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Y2MyYmNkOWI2NmJiY2U1NTBlMDVmNWE0YWVkYzE3NmMzMWNkOWNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMzo1Mjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IDU2MTgzYzgyN2UxYjMuLjZhZjk3N2RiYzZmZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBzaXplX3QgaHVnZV9jbGFzc19zaXplO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHM7XG4gXG4tc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpO1xuK3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4gXG4gLypcbiAgKiBlbnRyeSBsb2NraW5nIHJ1bGVzOlxuQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpO1xuICAqIDQpIFVzZSBUUlkgbG9jayB2YXJpYW50IHdoZW4gaW4gYXRvbWljIGNvbnRleHRcbiAgKiAgICAtIG11c3QgY2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBoYW5kbGUgbG9ja2luZyBmYWlsZXJzXG4gICovXG4tc3RhdGljIF9fbXVzdF9jaGVjayBib29sIHNsb3RfdHJ5bG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyAqbG9jayA9IFx1MDAyNnpyYW0tXHUwMDNldGFibGVbaW5kZXhdLl9fbG9jaztcbiBcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4rc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmxvY2sgPSBcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XG4gXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2xvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiBcdGxvY2tfYWNxdWlyZWQoXHUwMDI2enJhbS1cdTAwM2V0YWJsZV9sb2NrX21hcCwgX1JFVF9JUF8pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyB2b2lkIHNsb3RfdW5sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmxvY2sgPSBcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XG4gXG5AQCAtMTEwLDU1ICsxMTAsNTYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgenJhbSAqZGV2X3RvX3pyYW0oc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIChzdHJ1Y3QgenJhbSAqKWRldl90b19kaXNrKGRldiktXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmhhbmRsZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxuK3N0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG4ge1xuIFx0enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uaGFuZGxlID0gaGFuZGxlO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB0ZXN0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxuK3N0YXRpYyBib29sIHRlc3Rfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuIFx0XHRcdCAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcbiB7XG4gXHRyZXR1cm4genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwMjYgQklUKGZsYWcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzZXRfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiBcdFx0XHQgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcbiB7XG4gXHR6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IEJJVChmbGFnKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4rc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuIFx0XHRcdCAgICBlbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpXG4ge1xuIFx0enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwMjY9IH5CSVQoZmxhZyk7XG4gfVxuIFxuLXN0YXRpYyBzaXplX3QgZ2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyBzaXplX3QgZ2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRyZXR1cm4genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwMjYgKEJJVChaUkFNX0ZMQUdfU0hJRlQpIC0gMSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc2l6ZV90IHNpemUpXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXHUwMDNlXHUwMDNlIFpSQU1fRkxBR19TSElGVDtcbiBcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgPSAoZmxhZ3MgXHUwMDNjXHUwMDNjIFpSQU1fRkxBR19TSElGVCkgfCBzaXplO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2xvdF9hbGxvY2F0ZWQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xvdF9hbGxvY2F0ZWQoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpIHx8XG4gXHRcdHRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1NBTUUpIHx8XG4gXHRcdHRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1dCKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcbi1cdFx0XHRcdFx0ICB1MzIgcHJpbylcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbylcbiB7XG4gXHRwcmlvIFx1MDAyNj0gWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7XG4gXHQvKlxuQEAgLTE3MCwxNCArMTcxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4gXHR6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IChwcmlvIFx1MDAzY1x1MDAzYyBaUkFNX0NPTVBfUFJJT1JJVFlfQklUMSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbitzdGF0aWMgaW5saW5lIHUzMiBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHUzMiBwcmlvID0genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwM2VcdTAwM2UgWlJBTV9DT01QX1BSSU9SSVRZX0JJVDE7XG4gXG4gXHRyZXR1cm4gcHJpbyBcdTAwMjYgWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fUFBfU0xPVCk7XG5AQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHBfY3RsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgenJhbV9wcF9jdGwgKmN0bClcbiB9XG4gXG4gc3RhdGljIGJvb2wgcGxhY2VfcHBfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwsXG4tXHRcdFx0ICB1MzIgaW5kZXgpXG4rXHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwcztcbiBcdHUzMiBiaWQ7XG5AQCAtNDE4LDcgKzQxOSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4ge1xuIFx0aW50IGlzX2lkbGUgPSAxO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHpyYW0tXHUwMDNlZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRpbnQgaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuIFxuIFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgaW5kZXgrKykge1xuIFx0XHQvKlxuQEAgLTQ4NSw4ICs0ODYsOSBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gI2RlZmluZSBJTlZBTElEX0JERVZfQkxPQ0tcdFx0KH4wVUwpXG4gXG4gc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHR1MzIgaW5kZXgpO1xuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCk7XG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KTtcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KTtcbiBcbiBzdHJ1Y3QgenJhbV93Yl9jdGwge1xuIFx0LyogaWRsZSBsaXN0IGlzIGFjY2Vzc2VkIG9ubHkgYnkgdGhlIHdyaXRlYmFjayB0YXNrLCBubyBjb25jdXJlbmN5ICovXG5AQCAtNTIyLDcgKzUyNCw3IEBAIHN0cnVjdCB6cmFtX3JiX3JlcSB7XG4gXHRcdC8qIGVycm9yIHN0YXR1cyAoc3luYyByZWFkKSAqL1xuIFx0XHRpbnQgZXJyb3I7XG4gXHR9O1xuLVx0dTMyIGluZGV4O1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiB9O1xuIFxuICNkZWZpbmUgRk9VUl9LKHgpICgoeCkgKiAoMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMikpKVxuQEAgLTkxMCw3ICs5MTIsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FjY291bnRfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgenJhbSAqenJhbSlcbiBcbiBzdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX2NvbXBsZXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgenJhbV93Yl9yZXEgKnJlcSlcbiB7XG4tXHR1MzIgaW5kZXggPSByZXEtXHUwMDNlcHBzLVx1MDAzZWluZGV4O1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS1cdTAwM2VwcHMtXHUwMDNlaW5kZXg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0ZXJyID0gYmxrX3N0YXR1c190b19lcnJubyhyZXEtXHUwMDNlYmlvLmJpX3N0YXR1cyk7XG5AQCAtMTAzMiw3ICsxMDM0LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcbiBcdHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxID0gTlVMTDtcbiBcdHN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwcztcbiBcdGludCByZXQgPSAwLCBlcnIgPSAwO1xuLVx0dTMyIGluZGV4ID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSAwO1xuIFxuIFx0d2hpbGUgKChwcHMgPSBzZWxlY3RfcHBfc2xvdChjdGwpKSkge1xuIFx0XHRpZiAoenJhbS1cdTAwM2V3Yl9saW1pdF9lbmFibGUgXHUwMDI2XHUwMDI2ICF6cmFtLVx1MDAzZWJkX3diX2xpbWl0KSB7XG5AQCAtMTE5OCw3ICsxMjAwLDcgQEAgc3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3Jfd3JpdGViYWNrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBsbywgdW5zaWduZWQgbG9uZyBoaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpXG4ge1xuLVx0dTMyIGluZGV4ID0gbG87XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbG87XG4gXG4gXHR3aGlsZSAoaW5kZXggXHUwMDNjIGhpKSB7XG4gXHRcdGJvb2wgb2sgPSB0cnVlO1xuQEAgLTEyMzUsNyArMTIzNyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XG4tXHR1NjQgbnJfcGFnZXMgPSB6cmFtLVx1MDAzZWRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHpyYW0tXHUwMDNlZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR1bnNpZ25lZCBsb25nIGxvID0gMCwgaGkgPSBucl9wYWdlcztcbiBcdHN0cnVjdCB6cmFtX3BwX2N0bCAqcHBfY3RsID0gTlVMTDtcbiBcdHN0cnVjdCB6cmFtX3diX2N0bCAqd2JfY3RsID0gTlVMTDtcbkBAIC0xMzMzLDcgKzEzMzUsOCBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbitzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTM3NSw3ICsxMzc4LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB6cmFtX3JiX3JlcSwgd29yayk7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJpb19maXJzdF9wYWdlX2FsbChyZXEtXHUwMDNlYmlvKTtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gcmVxLVx1MDAzZXpyYW07XG4tXHR1MzIgaW5kZXggPSByZXEtXHUwMDNlaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVxLVx1MDAzZWluZGV4O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGRlY29tcHJlc3NfYmRldl9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbkBAIC0xNDI2LDcgKzE0MjksNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuIH1cbiBcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X2FzeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0XHRcdHUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuIFx0XHRcdFx0c3RydWN0IGJpbyAqcGFyZW50KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxO1xuQEAgLTE0NzYsOCArMTQ3OSw4IEBAIHN0YXRpYyB2b2lkIHpyYW1fc3luY19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiAgKiBjaGFpbmVkIElPIHdpdGggcGFyZW50IElPIGluIHNhbWUgY29udGV4dCwgaXQncyBhIGRlYWRsb2NrLiBUbyBhdm9pZCB0aGF0LFxuICAqIHVzZSBhIHdvcmtlciB0aHJlYWQgY29udGV4dC5cbiAgKi9cbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeClcbitzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgpXG4ge1xuIFx0c3RydWN0IHpyYW1fcmJfcmVxIHJlcTtcbiBcbkBAIC0xNDk2LDggKzE0OTksOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4gXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXG4rXHRcdFx0ICBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0YXRvbWljNjRfaW5jKFx1MDAyNnpyYW0tXHUwMDNlc3RhdHMuYmRfcmVhZHMpO1xuIFx0aWYgKCFwYXJlbnQpIHtcbkBAIC0xNTA5LDggKzE1MTMsOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuIH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9iZGV2KHN0cnVjdCB6cmFtICp6cmFtKSB7fTtcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXG4rXHRcdFx0ICBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0cmV0dXJuIC1FSU87XG4gfVxuQEAgLTE1MzgsNyArMTU0Myw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlYWRfYmxvY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRjaGFyICprYnVmO1xuLVx0c3NpemVfdCBpbmRleCwgd3JpdHRlbiA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuK1x0c3NpemVfdCB3cml0dGVuID0gMDtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbkBAIC0xNTYwLDcgKzE1NjYsNyBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0Y29waWVkID0gc25wcmludGYoa2J1ZiArIHdyaXR0ZW4sIGNvdW50LFxuLVx0XHRcdFwiJTEyemQgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwiLFxuK1x0XHRcdFwiJTEybHUgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwiLFxuIFx0XHRcdGluZGV4LCB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUsIDAsXG4gXHRcdFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgPyAncycgOiAnLicsXG4gXHRcdFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpID8gJ3cnIDogJy4nLFxuQEAgLTE5NjcsOCArMTk3Myw4IEBAIHN0YXRpYyBzc2l6ZV90IGRlYnVnX3N0YXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcbiB7XG4tXHRzaXplX3QgbnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRzaXplX3QgaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IGRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdGlmICghenJhbS1cdTAwM2V0YWJsZSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE5ODUsNyArMTk5MSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXG4gXG4gc3RhdGljIGJvb2wgenJhbV9tZXRhX2FsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXG4ge1xuLVx0c2l6ZV90IG51bV9wYWdlcztcbitcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFxuIFx0bnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR6cmFtLVx1MDAzZXRhYmxlID0gdnphbGxvYyhhcnJheV9zaXplKG51bV9wYWdlcywgc2l6ZW9mKCp6cmFtLVx1MDAzZXRhYmxlKSkpO1xuQEAgLTIwMDgsNyArMjAxNCw3IEBAIHN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcbkBAIC0yMDYyLDcgKzIwNjgsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiB9XG4gXG4gc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0IHUzMiBpbmRleClcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHZvaWQgKm1lbTtcbiBcbkBAIC0yMDczLDcgKzIwNzksNyBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0XHRcdCAgICB1MzIgaW5kZXgpXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYywgKmRzdDtcbkBAIC0yMDg4LDcgKzIwOTQsOCBAQCBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbitzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG5AQCAtMjExMyw3ICsyMTIwLDggQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiB9XG4gXG4gI2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG4tc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG5AQCAtMjE0NSw3ICsyMTUzLDggQEAgc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuXG4gICogQ29ycmVzcG9uZGluZyBaUkFNIHNsb3Qgc2hvdWxkIGJlIGxvY2tlZC5cbiAgKi9cbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4rc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRpZiAodGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHxcbiBcdCAgICAhZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KSlcbkBAIC0yMTU3LDggKzIxNjYsOCBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxuK3N0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdCAgdW5zaWduZWQgbG9uZyBpbmRleCwgc3RydWN0IGJpbyAqcGFyZW50KVxuIHtcbiBcdGludCByZXQ7XG4gXG5AQCAtMjE4MCw3ICsyMTg5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiBcbiBcdC8qIFNob3VsZCBORVZFUiBoYXBwZW4uIFJldHVybiBiaW8gZXJyb3IgaWYgaXQgZG9lcy4gKi9cbiBcdGlmIChXQVJOX09OKHJldCBcdTAwM2MgMCkpXG4tXHRcdHByX2VycihcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcXG5cIiwgcmV0LCBpbmRleCk7XG4rXHRcdHByX2VycihcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JWx1XFxuXCIsIHJldCwgaW5kZXgpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjE5MCw3ICsyMTk5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiAgKiBhbHdheXMgZXhwZWN0cyBhIGZ1bGwgcGFnZSBmb3IgdGhlIG91dHB1dC5cbiAgKi9cbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLVx0XHRcdFx0ICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTtcbiBcdGludCByZXQ7XG5AQCAtMjIwNSw3ICsyMjE0LDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZF9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbiB9XG4gXG4gc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4tXHRcdFx0ICB1MzIgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbiBcdFx0cmV0dXJuIHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5AQCAtMjIxMyw3ICsyMjIyLDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4gfVxuIFxuIHN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLFxuLVx0XHRcdFx0ICB1MzIgaW5kZXgpXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c2xvdF9sb2NrKHpyYW0sIGluZGV4KTtcbiBcdHNsb3RfZnJlZSh6cmFtLCBpbmRleCk7XG5AQCAtMjIyOCw3ICsyMjM3LDcgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXG4gfVxuIFxuIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgIHUzMiBpbmRleClcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYztcbkBAIC0yMjY4LDcgKzIyNzcsOCBAQCBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuK3N0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG5AQCAtMjMzNSw3ICsyMzQ1LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gICogVGhpcyBpcyBhIHBhcnRpYWwgSU8uIFJlYWQgdGhlIGZ1bGwgcGFnZSBiZWZvcmUgd3JpdGluZyB0aGUgY2hhbmdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi1cdFx0XHRcdCAgIHUzMiBpbmRleCwgaW50IG9mZnNldClcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTtcbiBcdGludCByZXQ7XG5AQCAtMjM1Myw3ICsyMzYzLDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4gfVxuIFxuIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi1cdFx0XHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldClcbiB7XG4gXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbiBcdFx0cmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpO1xuQEAgLTI0MjEsOCArMjQzMSw5IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbyxcbiAgKlxuICAqIENvcnJlc3BvbmRpbmcgWlJBTSBzbG90IHNob3VsZCBiZSBsb2NrZWQuXG4gICovXG4tc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0ICAgdTY0ICpudW1fcmVjb21wX3BhZ2VzLCB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcbitzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbitcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0ICpudW1fcmVjb21wX3BhZ2VzLFxuK1x0XHRcdCAgIHUzMiB0aHJlc2hvbGQsIHUzMiBwcmlvKVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZV9vbGQ7XG5AQCAtMjY3NCw3ICsyNjg1LDcgQEAgc3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgenJhbV9iaW9fZGlzY2FyZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHNpemVfdCBuID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbi1cdHUzMiBpbmRleCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgXHUwMDNlXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XG4gXHR1MzIgb2Zmc2V0ID0gKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0U0VDVE9SX1NISUZUO1xuIFxuQEAgLTI3MTUsNyArMjcyNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiBcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cdTAwM2ViaV9pdGVyO1xuIFxuIFx0ZG8ge1xuLVx0XHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbitcdFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yIFx1MDAzZVx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xuIFx0XHR1MzIgb2Zmc2V0ID0gKGl0ZXIuYmlfc2VjdG9yIFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcdTAwM2NcdTAwM2NcbiBcdFx0XHRcdFNFQ1RPUl9TSElGVDtcbiBcdFx0c3RydWN0IGJpb192ZWMgYnYgPSBiaW9faXRlcl9pb3ZlYyhiaW8sIGl0ZXIpO1xuQEAgLTI3NDYsNyArMjc1Nyw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXG4gXHRzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIgPSBiaW8tXHUwMDNlYmlfaXRlcjtcbiBcbiBcdGRvIHtcbi1cdFx0dTMyIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgXHUwMDNlXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcbkBAIC0yODYwLDYgKzI4NzEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcbiBzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4rXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbiBcdHU2NCBkaXNrc2l6ZTtcbiBcdHN0cnVjdCB6Y29tcCAqY29tcDtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbkBAIC0yODc3LDYgKzI4ODksMTEgQEAgc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdH1cbiBcbiBcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XG4rXHRudW1fcGFnZXMgPSBkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdC8qIFNsb3RzIGFyZSBhZGRyZXNzZWQgYnkgYW4gdW5zaWduZWQgbG9uZyBpbmRleCAqL1xuK1x0aWYgKCFudW1fcGFnZXMgfHwgKCh1NjQpbnVtX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NDYuODU2ODg1Nzk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0NjE5NTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpyYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYGluZGV4YCB0eXBlIGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIGluIHRoZSBjb2RlLCB3aGljaCBpcyBhIGZhaXJseSBzaWduaWZpY2FudCBjaGFuZ2UuIEFsb25nc2lkZSB0aGlzIGNoYW5nZSBpcyBhIG5ldyBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgLiBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cblRoZSBuZXcgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYDpcbmBgYGNcblx0ZGlza3NpemUgPSBQQUdFX0FMSUdOKGRpc2tzaXplKTtcbitcdG51bV9wYWdlcyA9IGRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXG4rXHRpZiAoIW51bV9wYWdlcyB8fCAoKHU2NCludW1fcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpICE9IGRpc2tzaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbmBgYFxuVGhpcyBhZGRpdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIHByZXZlbnRpbmcgdGhlIGBkaXNrc2l6ZWAgZnJvbSBleGNlZWRpbmcgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBgdW5zaWduZWQgbG9uZ2AgY2FuIHJlcHJlc2VudCB3aGVuIHNoaWZ0ZWQgYnkgYFBBR0VfU0hJRlRgLCBhcyB3ZWxsIGFzIHByZXZlbnRpbmcgYSBgZGlza3NpemVgIG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgYSBkZWZlbnNpdmUgbWVhc3VyZSB0byBwcmV2ZW50IGFuIG92ZXJmbG93IHNvbWV3aGVyZS5cblxuV2FpdCwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCBpcyAzMiBiaXRzLCByaWdodD8gU28gdGhlIHNpemUgbGltaXQgaXMgNEdCICgyXjMyKSwgYW5kIG9uIDY0LWJpdCBzeXN0ZW1zLCBgdW5zaWduZWQgbG9uZ2AgaXMgNjQgYml0cywgbWVhbmluZyB0aGUgc2l6ZSBsaW1pdCBpcyB0aGVvcmV0aWNhbGx5IG11Y2ggbGFyZ2VyLCByaWdodD8gVGh1cywgaWYgYGRpc2tzaXplYCBpcyBsYXJnZXIgdGhhbiBgMHhmZmZmZmZmZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVGAsIHdoaWNoIGlzIDE2VEIsIGl0IHdpbGwgb3ZlcmZsb3cgb24gMzIgYml0IHN5c3RlbXMuXG5cbkl0IHNlZW1zIGxpa2UgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgdGhlIGBpbmRleGAgd2FzIGEgYHUzMmAgYnV0IHRoZSBgZGlza3NpemVgIGNvdWxkIGJlIGxhcmdlciB0aGFuIGB1MzIgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlRgIG9uIDY0LWJpdCBzeXN0ZW1zLiBPciBwZXJoYXBzLCB0aGlzIGlzIGEgZml4IGZvciAzMiBiaXQgc3lzdGVtcy5cblxuTm93LCBvbiA2NC1iaXQgc3lzdGVtcywgdGhlIGNoYW5nZSB0byBgdW5zaWduZWQgbG9uZ2AgZWZmZWN0aXZlbHkgbWFrZXMgYGluZGV4YCA2NCBiaXRzLCBhbGxvd2luZyBmb3IgenJhbSBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIsIHdoaWNoIGlzIGAweGZmZmZmZmZmICogNDA5NmAuIEhvd2V2ZXIsIG9uIDMyLWJpdCBzeXN0ZW1zLCBgdW5zaWduZWQgbG9uZ2AgaXMgc3RpbGwgMzIgYml0cywgYnV0IHRoZSBjaGVjayBlbnN1cmVzIHRoYXQgYGRpc2tzaXplYCBkb2Vzbid0IGV4Y2VlZCAxNlRCLiBFc3NlbnRpYWxseSwgaXQgbm9ybWFsaXplcyB0aGlzIGJlaGF2aW9yIGFjcm9zcyBhcmNoaXRlY3R1cmVzLlxuXG5Pa2F5LCBpcyB0aGlzIHBhdGNoIGZ1enphYmxlPyBZZXMsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB6cmFtLCB3aGljaCBtZWFucyBpdCBpcyBhbiBpbXBvcnRhbnQgY2hhbmdlIGZvciBmdXp6aW5nLiBacmFtIGlzIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLiAqQ2FuKiBzeXprYWxsZXIgZnV6eiB6cmFtIHN5c2ZzPyBZZXMsIEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3Igc3lzZnMsIGluY2x1ZGluZyB6cmFtLiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZy4gWWVzLCBpdCdzIGBDT05GSUdfWlJBTWAuIEkgc2hvdWxkIGNoZWNrIGBkaXNrc2l6ZV9zdG9yZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mjo1NC4yMDMwODQ1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczMjA4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlza3NpemVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODU0PXN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg3MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODcxOnN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg3Mi1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMTI4PXN0YXRpYyBpbnQgenJhbV9yZW1vdmUoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY0LVxcdC8qXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2NTpcXHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2Ni1cXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTY3OlxcdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY4LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mjo1NC4yNjA0MTExNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NjE3MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaXZpbmcgaW50byB0aGUgWnJhbSBDb2RlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgenJhbV9kcnYuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGRyaXZlciBmb3IgenJhbS4gTXkgZmlyc3QgbW92ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgenJhbS4gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIGFyZSBiZWluZyBhbHRlcmVkIGhlcmU/IEknbSBub3QgZ29pbmcgdG8ganVzdCBibGluZGx5IGFwcGx5IGEgcGF0Y2ggdG8gdGhlIGRyaXZlciBpdHNlbGYgd2l0aG91dCBrbm93aW5nIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSB6cmFtIHN1YnN5c3RlbSBhbmQgd2hhdCB0aGUgKmludGVuZGVkKiBtb2RpZmljYXRpb24gaXMuIFRpbWUgdG8gdHJhY2UgdGhlIGNvbmZpZyBvcHRpb25zLCB0aGUgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycyB0byBnZXQgYSBmaXJtIGdyYXNwLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHpyYW0gYW5kIHRoZW4gdHJhY2UgdGhpcyBkb3duIHRvIHRoaXMgc291cmNlIGZpbGUsIHVuZGVyc3RhbmRpbmcgd2hhdCB2YWx1ZXMgbWlnaHQgYmUgc2V0IHRvIGNoYW5nZSB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mjo1Ny4zOTcwMzEzOTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MjA4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpSQU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NTcuNDYwNDU2OTU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDc4NzY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpyYW0gUGF0Y2ggZm9yIExhcmdlIERldmljZSBTdXBwb3J0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50OiBpdCdzIGNoYW5naW5nIGB1MzIgaW5kZXhgIHRvIGB1bnNpZ25lZCBsb25nIGluZGV4YCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSwgYW5kIGl0IGluY2x1ZGVzIGEgbmV3IGNoZWNrIHdpdGhpbiBgZGlza3NpemVfc3RvcmVgLiBUaGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIGlzIGNsZWFyIOKAkyB0aGlzIGVuYWJsZXMgWnJhbSB0byBzdXBwb3J0IGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgYW5kIGl0J3MgYWxzbyBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvbiAzMi1iaXQgc3lzdGVtcy5cblxuV2FpdCBhIHNlY29uZCwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCAqaXMqIDMyLWJpdCwgcmlnaHQ/IFNvLCBgbnVtX3BhZ2VzYCBpcyBsaW1pdGVkIHRvIDMyIGJpdHMuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBJZiB0aGUgcmVxdWVzdGVkIGBkaXNrc2l6ZWAgZXhjZWVkcyB0aGUgY2FwYWNpdHkgb2YgYSAzMi1iaXQgaW50ZWdlciBzaGlmdGVkIGxlZnQgYnkgdGhlIHBhZ2Ugc2l6ZSAoYDB4ZmZmZmZmZmYgXHUwMDNjXHUwMDNjIDEyYCwgb3IgYDB4ZmZmZmZmZmYwMDBgKSwgYG51bV9wYWdlc2Agd2lsbCBnZXQgdHJ1bmNhdGVkIGR1ZSB0byBvdmVyZmxvdy4gVGhhdCdzIHByZWNpc2VseSB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWRkcmVzcy4gVGhlIG5ldyBjaGVjazogYCgodTY0KW51bV9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgIT0gZGlza3NpemVgLCB3aWxsIGNhdGNoIHRoaXMgdHJ1bmNhdGlvbiBzY2VuYXJpbyBhbmQgcmV0dXJuIGAtRUlOVkFMYCB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIGRpc2sgc2l6ZS5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCBieSB0YWtpbmcgYSBsb29rIGF0IGBkaXNrc2l6ZV9zdG9yZWAgaW4gYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgYSBjYXJlZnVsIGV4YW1pbmF0aW9uIHdpbGwgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODU5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjAxLjc1NTI0Njc1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODcwOlxcdFxcbjI4NzE6XFx0c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4yODcyOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4yODczOlxcdHtcXG4yODc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xcbjI4NzU6XFx0XFx0dTY0IGRpc2tzaXplO1xcbjI4NzY6XFx0XFx0c3RydWN0IHpjb21wICpjb21wO1xcbjI4Nzc6XFx0XFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbjI4Nzg6XFx0XFx0aW50IGVycjtcXG4yODc5OlxcdFxcdHUzMiBwcmlvO1xcbjI4ODA6XFx0XFxuMjg4MTpcXHRcXHRkaXNrc2l6ZSA9IG1lbXBhcnNlKGJ1ZiwgTlVMTCk7XFxuMjg4MjpcXHRcXHRpZiAoIWRpc2tzaXplKVxcbjI4ODM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg4NDpcXHRcXG4yODg1OlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjI4ODY6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xcbjI4ODc6XFx0XFx0XFx0cHJfaW5mbyhcXFwiQ2Fubm90IGNoYW5nZSBkaXNrc2l6ZSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4yODg4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjg4OTpcXHRcXHR9XFxuMjg5MDpcXHRcXG4yODkxOlxcdFxcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XFxuMjg5MjpcXHRcXHRudW1fcGFnZXMgPSBkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjI4OTM6XFx0XFx0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXFxuMjg5NDpcXHRcXHRpZiAoIW51bV9wYWdlcyB8fCAoKHU2NCludW1fcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgIT0gZGlza3NpemUpXFxuMjg5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODk2OlxcdFxcbjI4OTc6XFx0XFx0aWYgKCF6cmFtX21ldGFfYWxsb2MoenJhbSwgZGlza3NpemUpKVxcbjI4OTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjg5OTpcXHRcXG4yOTAwOlxcdFxcdGZvciAocHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QOyBwcmlvIFxcdTAwM2MgWlJBTV9NQVhfQ09NUFM7IHByaW8rKykge1xcbjI5MDE6XFx0XFx0XFx0aWYgKCF6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10pXFxuMjkwMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yOTAzOlxcdFxcbjI5MDQ6XFx0XFx0XFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10sXFxuMjkwNTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnpyYW0tXFx1MDAzZXBhcmFtc1twcmlvXSk7XFxuMjkwNjpcXHRcXHRcXHRpZiAoSVNfRVJSKGNvbXApKSB7XFxuMjkwNzpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIkNhbm5vdCBpbml0aWFsaXNlICVzIGNvbXByZXNzaW5nIGJhY2tlbmRcXFxcblxcXCIsXFxuMjkwODpcXHRcXHRcXHRcXHQgICAgICAgenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKTtcXG4yOTA5OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoY29tcCk7XFxuMjkxMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2NvbXBzO1xcbjI5MTE6XFx0XFx0XFx0fVxcbjI5MTI6XFx0XFxuMjkxMzpcXHRcXHRcXHR6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSA9IGNvbXA7XFxuMjkxNDpcXHRcXHR9XFxuMjkxNTpcXHRcXHR6cmFtLVxcdTAwM2VkaXNrc2l6ZSA9IGRpc2tzaXplO1xcbjI5MTY6XFx0XFx0c2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkoenJhbS1cXHUwMDNlZGlzaywgenJhbS1cXHUwMDNlZGlza3NpemUgXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUKTtcXG4yOTE3OlxcdFxcbjI5MTg6XFx0XFx0cmV0dXJuIGxlbjtcXG4yOTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzowMS43NTU0NDg1OThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxMDU3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpyYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvdmVyZmxvdyBjaGVja3MgaW4gYGRpc2tzaXplX3N0b3JlYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBidW1wZWQgYGluZGV4YCB0byBhbiBgdW5zaWduZWQgbG9uZ2AgaW4gYSBidW5jaCBvZiBmdW5jdGlvbnMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBmdXp6IHRoaXMgdGhpbmcgdGhvcm91Z2hseS4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQuLi5cblxuV2FpdCBhIHNlY29uZCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBzeXNmcywgcmlnaHQ/IEFuZCBgZGlza3NpemVfc3RvcmVgICppcyogYSBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gQmluZ28hIFRoaXMgaXMgcGVyZmVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBoaXR0aW5nIGl0LiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIHRhcmdldCBhcmU6IGBkaXNrc2l6ZV9zdG9yZWAsIHRoZW4gYHpyYW1fbWV0YV9hbGxvY2AsIGB6cmFtX21ldGFfZnJlZWAsIGB6cmFtX3JlYWRfcGFnZWAsIGB6cmFtX3dyaXRlX3BhZ2VgLCBgenJhbV9idmVjX3JlYWRgLCBhbmQgYHpyYW1fYnZlY193cml0ZWAuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSBgZGlza3NpemVfc3RvcmVgIGlzbid0IHN0YXRpYy4gWWVwLCBpdCBpcy4gQnV0LCBpdCdzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIHRoZSBjb21waWxlciAqc2hvdWxkbid0KiBpbmxpbmUgaXQgYXdheSwgaXQncyByZWFjaGFibGUuIEkgaGF2ZSB0byBtYWtlIHN1cmUgaXQncyByZWFjaGFibGUuIFRoZSBpbnN0cnVjdGlvbnMgc2FpZCBzb21ldGhpbmcgYWJvdXQgdGhhdC4uLlxuXG5BaCwgcmlnaHQsIGhlcmUgaXQgaXM6IFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlwiIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBjYXNlLiBgZGlza3NpemVfc3RvcmVgIGlzIHN0YXRpYywgYnV0IGl0J3MgKm5vdCogaW5saW5lZCBiZWNhdXNlIGl0J3MgYSBzeXNmcyBjYWxsYmFjay5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSB0byBjb25zaWRlciBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjIsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzowNi43MDY1MDk0MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDg2Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bXmEtekEtWl0qW2EtekEtWl8wLTldKyBbYS16QS1aXzAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTU6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwienJhbTogXFxcIiBmbXRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQwOnN0YXRpYyBERUZJTkVfSURSKHpyYW1faW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKHpyYW1faW5kZXhfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQzLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTU0PXN0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTUte1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1NjpcXHRyZXR1cm4gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCkgfHxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTctXFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTM1NT1zdGF0aWMgc3NpemVfdCBpbml0c3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzYzLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjM2NDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zNjUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzY3PXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzcxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjM3MjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbGx1XFxcXG5cXFwiLCB6cmFtLVxcdTAwM2VkaXNrc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzczLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUxND1zdHJ1Y3QgenJhbV9yYl9yZXEge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTI5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjUzMDojZGVmaW5lIEZPVVJfSyh4KSAoKHgpICogKDEgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMikpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUzMS1zdGF0aWMgc3NpemVfdCBiZF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTU2Nz1zdGF0aWMgc3NpemVfdCBjb21wcmVzc2VkX3dyaXRlYmFja19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU3Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1Nzc6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHZhbCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTc4LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTU5Nj1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfbGltaXRfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjA1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjYwNjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02MDctfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjM1PXN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19saW1pdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTY0My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo2NDQ6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWxsdVxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02NDUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjY2PXN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19iYXRjaF9zaXplX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjc1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjY3NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02NzctfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjkzPXN0YXRpYyBzc2l6ZV90IGJhY2tpbmdfZGV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNzA5LVxcdGlmIChJU19FUlIocCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NzEwOlxcdFxcdHJldHVybiBQVFJfRVJSKHApO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTcxMS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0ODI9c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0OTgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQ5OTpcXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDAtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTUwMj1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUxMDpcXHRcXHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUxMS1cXHR9XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUxMjpcXHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfYXN5bmMoenJhbSwgcGFnZSwgaW5kZXgsIGJsa19pZHgsIHBhcmVudCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUxMy19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTU2PXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTYwLVxcdCAgICAhZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTYxOlxcdFxcdHJldHVybiByZWFkX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjItXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2My1cXHRpZiAoIXRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX0hVR0UpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxNjQ6XFx0XFx0cmV0dXJuIHJlYWRfY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTY1LVxcdGVsc2VcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTY2OlxcdFxcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjctfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIxNj1zdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMTktXFx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyMDpcXHRcXHRyZXR1cm4genJhbV9idmVjX3JlYWRfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIxOlxcdHJldHVybiB6cmFtX3JlYWRfcGFnZSh6cmFtLCBidmVjLVxcdTAwM2Vidl9wYWdlLCBpbmRleCwgYmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjIyLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMzk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTMtXFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNTQ6XFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTUtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgwPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTQtXFx0aWYgKHNhbWVfZmlsbGVkKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTU6XFx0XFx0cmV0dXJuIHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgZWxlbWVudCwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEwLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTE6XFx0XFx0cmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTItXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxOC1cXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE5OlxcdFxcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzIwLVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNjU9c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2OC1cXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzY5OlxcdFxcdHJldHVybiB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzcwOlxcdHJldHVybiB6cmFtX3dyaXRlX3BhZ2UoenJhbSwgYnZlYy1cXHUwMDNlYnZfcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNzEtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzND1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MjMtXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjUyNDpcXHRcXHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZV9uZXcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MjUtXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhpb19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg2OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbV9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWJ1Z19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg4OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhjb21wYWN0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg5OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkaXNrc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MDpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW5pdHN0YXRlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkxOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZXNldCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MjpzdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX2xpbWl0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkzOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhtZW1fdXNlZF9tYXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTQ6c3RhdGljIERFVklDRV9BVFRSX1dPKGlkbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTU6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk2LSNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk4OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhiYWNraW5nX2Rldik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5OTpzdGF0aWMgREVWSUNFX0FUVFJfV08od3JpdGViYWNrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAwOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyh3cml0ZWJhY2tfbGltaXQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDE6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdF9lbmFibGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19iYXRjaF9zaXplKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAzOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wcmVzc2VkX3dyaXRlYmFjayk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA1LSNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNjpzdGF0aWMgREVWSUNFX0FUVFJfUlcocmVjb21wX2FsZ29yaXRobSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNzpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb21wcmVzcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwOC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhhbGdvcml0aG1fcGFyYW1zKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzEyOD1zdGF0aWMgaW50IHpyYW1fcmVtb3ZlKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2NS1cXHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2NjpcXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY3LVxcdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxODQ9c3RhdGljIHNzaXplX3QgaG90X2FkZF9zaG93KGNvbnN0IHN0cnVjdCBjbGFzcyAqY2xhc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTk1LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE5NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTk3LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMyMDI9c3RhdGljIHNzaXplX3QgaG90X3JlbW92ZV9zdG9yZShjb25zdCBzdHJ1Y3QgY2xhc3MgKmNsYXNzLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzIzMC19XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzIzMTpzdGF0aWMgQ0xBU1NfQVRUUl9XTyhob3RfcmVtb3ZlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzowNi43NjkwMDI1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM2NDE5MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHdpdGhpbiB0aGUgWlJBTSBjb2RlLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyB3ZSBoYW5kbGUgZGlzayBzaXplIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHdlIGluZGV4IGRhdGEuIFNwZWNpZmljYWxseSwgdGhlIGBkaXNrc2l6ZV9zdG9yZWAgaXMgZ2V0dGluZyB0d2Vha2VkLCBhbmQgdGhlIGBpbmRleGAgdmFyaWFibGUgaXMgYmVpbmcgcHJvbW90ZWQgdG8gYW4gYHVuc2lnbmVkIGxvbmdgIGluIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbW1lZGlhdGVseSBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFkZHJlc3NpbmcgYW5kIG92ZXJhbGwgY2FwYWNpdHkgbGltaXRzIHdpdGhpbiB0aGUgWlJBTSBkZXZpY2UuXG5cbkknbSBzZWVpbmcgdGhhdCBmdW5jdGlvbnMgbGlrZSBgenJhbV9idmVjX3JlYWRgLCBgenJhbV9idmVjX3dyaXRlYCwgYHpyYW1fcmVhZF9wYWdlYCwgYHpyYW1fd3JpdGVfcGFnZWAsIGB6cmFtX2Jpb19yZWFkYCwgYHpyYW1fYmlvX3dyaXRlYCwgYW5kIGB6cmFtX2Jpb19kaXNjYXJkYCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSB1dGlsaXppbmcgdGhpcyBuZXcgYGluZGV4YCB0eXBlLiBUaGF0J3MgYSBwcmV0dHkgYnJvYWQgc2NvcGUsIHdoaWNoIG1lYW5zIHRoaXMgY2hhbmdlIGlzIGZvdW5kYXRpb25hbCB0byBob3cgWlJBTSBpbnRlcmFjdHMgd2l0aCBib3RoIHRoZSBibG9jayBkZXZpY2UgYW5kIHBhZ2UtbGV2ZWwgb3BlcmF0aW9ucy5cblxuTm93LCB0aG9zZSBgenJhbV9iaW9fLi4uYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgcmlnaHQ/IFllcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgYXJlIGNhbGxlZC4gQWgsIHRoZXkncmUgY2FsbGVkIGZyb20gYHpyYW1fc3VibWl0X2Jpb2AuIEFuZCB3YWl0IGEgbWludXRlLi4uIGB6cmFtX3N1Ym1pdF9iaW9gIGlzICoqbm90Kiogc3RhdGljLiBJdCdzIHRoZSBgc3VibWl0X2Jpb2AgY2FsbGJhY2sgZm9yIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucy4gU28sIGFueSBjaGFuZ2UgdGhlcmUgaXMgcHJldHR5IGNyaXRpY2FsLiBUaGlzIGlzIG1ha2luZyBtZSB0aGluayB3ZSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaGFwcGVucyBhdCB0aGUgYmlvIHN1Ym1pc3Npb24gbGV2ZWwgaW4gcmVsYXRpb24gdG8gdGhlc2UgaW5kZXggY2hhbmdlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcG90ZW50aWFsIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgZGF0YSBpbnRlZ3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjExLjMwNTQyNjM3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1MzAxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9zdWJtaXRfYmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NTQ9c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODYtICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc4NzpzdGF0aWMgdm9pZCB6cmFtX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5NzktXFx0Lm9wZW4gPSB6cmFtX29wZW4sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4MDpcXHQuc3VibWl0X2JpbyA9IHpyYW1fc3VibWl0X2JpbyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTgxLVxcdC5zd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPSB6cmFtX3Nsb3RfZnJlZV9ub3RpZnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjExLjM2Njk2MjIyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3NTI2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBjaGVja2xpc3QgaGVyZSByZWdhcmRpbmcgdGhlIGB6cmFtYCBkcml2ZXIuLi5cblxuKipacmFtIERyaXZlciBFbnRyeSBQb2ludCBBbmFseXNpcyoqXG5cblJpZ2h0LCBgenJhbV9zdWJtaXRfYmlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIGEga2V5IGludGVybmFsIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgZGlyZWN0bHkgZXhwb3NlZCBleHRlcm5hbGx5LiBUaGVyZWZvcmUsIGl0IHdvbid0IGJlIGNhbGxlZCBkaXJlY3RseS4gT2theSwgZ29vZC5cblxuU28sIGlmIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSB3b3JraG9yc2UgaW50ZXJuYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBleHRlcm5hbGx5IGV4cG9zZWQgZW50cnkgcG9pbnRzIGFuZCBjb25zaWRlciBob3cgdGhlIGRhdGEgZmxvd3MgYXJvdW5kIHRoaXMgaW50ZXJuYWwgZnVuY3Rpb24uIExldCBtZSBqb3QgZG93biB0aGUgcG90ZW50aWFsIGNhbmRpZGF0ZXM6IGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX21ldGFfYWxsb2NgLCBhbmQgYHpyYW1fbWV0YV9mcmVlYC4gVGhvc2UgKmZlZWwqIGxpa2UgdGhlIHBsYWNlcyB3aGVyZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkcml2ZXIgd291bGQgdHJ1bHkgb3JpZ2luYXRlLiBgZGlza3NpemVfc3RvcmVgLCB0aGUgc2l6ZSBvZiB0aGUgZGlzaywgdGhlbiB0aGUgYWxsb2NhdGlvbiwgdGhlbiBmcmVlaW5nLCBzZWVtcyBsaWtlIGEgdmFsaWQsIGFuZCB0eXBpY2FsLCBsaWZlY3ljbGUuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGFyZSAqYW55KiBmdW5jdGlvbnMgaW4gYHpyYW1fZHJ2LmNgICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYz8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gYXQgdGhpcyBwb2ludC4gVGhhdCdzIHRoZSBrZXkgdG8gdHJhY2luZyB0aGUgcGF0aCBvZiBjb21tYW5kIGZsb3cuIElmIHRoZXJlIGFyZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhhdCBjb3VsZCByZWFsbHkgaW1wYWN0IHRoZSBlbnRpcmUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg4LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6MTUuMzY0NDkwODA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc5Njg0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgW2EtekEtWl8wLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQwOnN0YXRpYyBERUZJTkVfSURSKHpyYW1faW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKHpyYW1faW5kZXhfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQzLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhpb19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg2OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbV9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWJ1Z19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg4OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhjb21wYWN0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg5OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkaXNrc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MDpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW5pdHN0YXRlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkxOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZXNldCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MjpzdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX2xpbWl0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkzOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhtZW1fdXNlZF9tYXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTQ6c3RhdGljIERFVklDRV9BVFRSX1dPKGlkbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTU6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk2LSNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk4OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhiYWNraW5nX2Rldik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5OTpzdGF0aWMgREVWSUNFX0FUVFJfV08od3JpdGViYWNrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAwOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyh3cml0ZWJhY2tfbGltaXQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDE6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdF9lbmFibGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19iYXRjaF9zaXplKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAzOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wcmVzc2VkX3dyaXRlYmFjayk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA1LSNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNjpzdGF0aWMgREVWSUNFX0FUVFJfUlcocmVjb21wX2FsZ29yaXRobSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNzpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb21wcmVzcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwOC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhhbGdvcml0aG1fcGFyYW1zKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzIwMj1zdGF0aWMgc3NpemVfdCBob3RfcmVtb3ZlX3N0b3JlKGNvbnN0IHN0cnVjdCBjbGFzcyAqY2xhc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMwLX1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMjMxOnN0YXRpYyBDTEFTU19BVFRSX1dPKGhvdF9yZW1vdmUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMyMzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjE2LjA0MjQ2NDAzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk0NzMxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgenJhbV9kcnYuY2AgZm9yIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhc2lkZSBmcm9tIHRoZSBtb2R1bGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMsIGB6cmFtX2Rydi5jYCBzZWVtZWQgdG8gbGFjayBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhlbiBJIHJlbWVtYmVyZWQgYHpyYW1fc3VibWl0X2Jpb2AgYW5kIGBkaXNrc2l6ZV9zdG9yZWAuIFdhaXQsIHRob3NlIGFyZSBhY3R1YWxseSAqdGhlKiBlbnRyeSBwb2ludHMgZm9yIEkvTyBhbmQgZGV2aWNlIHNpemUgY29uZmlndXJhdGlvbiwgcmVzcGVjdGl2ZWx5LiBJIHdhcyBnb2luZyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHdoYXQgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5LiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuXG5cblRoZSBnb29kIG5ld3MgaXMsIHNpbmNlIGBkaXNrc2l6ZV9zdG9yZWAgYW5kIGB6cmFtX3N1Ym1pdF9iaW9gIGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gc3lzZnMgYW5kIHRoZSBibG9jayBsYXllciwgdGhleSdyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIFRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBzbyB0aGV5IGZpdCB0aGUgY3JpdGVyaWEgcGVyZmVjdGx5LiBJIHdpbGwgaW5jbHVkZSB0aG9zZS5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgdG8gY2hlY2sgaWYgSSBtaXNzZWQgYW55IG90aGVyIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIHN1Y2ggYXMgYHpyYW1fYnZlY19yZWFkYCwgYHpyYW1fYnZlY193cml0ZWAsIGB6cmFtX3JlYWRfcGFnZWAsIGFuZCBgenJhbV93cml0ZV9wYWdlYCBhcmUgY2FsbGVkIGZyb20gYHpyYW1fYmlvX3JlYWRgIGFuZCBgenJhbV9iaW9fd3JpdGVgIHdoaWNoIGluIHR1cm4gYXJlIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGV5ICptaWdodCogYmUgaW5saW5lZC4gQnV0LCBpdCBpcyBzYWZlIHRvIGp1c3QgaW5jbHVkZSBgenJhbV9zdWJtaXRfYmlvYCBhbmQgYGRpc2tzaXplX3N0b3JlYC5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSXQncyBvYnZpb3VzIHRoYXQgYENPTkZJR19aUkFNYCBpcyBuZWVkZWQuIE5vdywgdGhlIHBhdGNoIG1vZGlmaWVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGxpa2UgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgYHJlYWRfZnJvbV96c3Bvb2xgLCBgenJhbV93cml0ZWJhY2tfY29tcGxldGVgLCBhbmQgbWFueSBtb3JlIHVuZGVyIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLiBBbHNvLCBgcmVjb21wcmVzc19zbG90YCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGVyZWZvcmUsIEknbGwgbmVlZCB0byBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjIyLjIzNzE5ODM2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3Mjc2MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaUkFNX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjIyLjM0NDQ4MDk4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyMDE0NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYFpSQU1fV1JJVEVCQUNLYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBgWlJBTV9XUklURUJBQ0tgIHNldHRpbmcgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBXaGF0IGV4YWN0bHkgcmVsaWVzIG9uIHRoaXMgZmVhdHVyZT8gSXMgaXQgYSBjb3JlIGNvbXBvbmVudCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG1vZHVsZXMsIGRyaXZlcnMsIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVwZW5kIG9uIGBaUkFNX1dSSVRFQkFDS2AgYmVpbmcgZW5hYmxlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3MgbGlrZWx5IGEgcmlwcGxlIGVmZmVjdDsgY2hhbmdpbmcgdGhpcyBjb3VsZCBpbXBhY3Qgc2V2ZXJhbCBvdGhlciBhcmVhcy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGNvZGUgZGlyZWN0bHkgcmVmZXJlbmNpbmcgdGhlIHN5bWJvbCwgdGhlbiB3b3JrIG91dHdhcmRzLCB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrcyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIGNyaXRpY2FsLiBUaGlzIGFsc28gd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBzZXR1cCBhbmQgaWYgYW55IGNoYW5nZXMgc2hvdWxkIGJlIG1hZGUgdG8gb3B0aW1pemUgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBhIG5vdGUgdG8gbXlzZWxmIHRvIGVuc3VyZSB0aGF0IG15IGluZm9ybWF0aW9uIGdhdGhlcmluZyBpcyBjb21wbGV0ZSBiZWZvcmUgbWFraW5nIGFueSBzdWdnZXN0aW9ucywgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIHNob3VsZCBiZSBjb21wcmVoZW5zaXZlIGluIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjMwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6MjYuMzM2NDk4MDU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRkZWZhdWx0IFxcXCJsejRcXFwiIGlmIFpSQU1fREVGX0NPTVBfTFo0XFxuIDEwMTpcXHRcXHRkZWZhdWx0IFxcXCJsejRoY1xcXCIgaWYgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbiAxMDI6XFx0XFx0ZGVmYXVsdCBcXFwienN0ZFxcXCIgaWYgWlJBTV9ERUZfQ09NUF9aU1REXFxuIDEwMzpcXHRcXHRkZWZhdWx0IFxcXCJkZWZsYXRlXFxcIiBpZiBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG4gMTA0OlxcdFxcdGRlZmF1bHQgXFxcIjg0MlxcXCIgaWYgWlJBTV9ERUZfQ09NUF84NDJcXG4gMTA1OlxcdFxcdGRlZmF1bHQgXFxcInVuc2V0LXZhbHVlXFxcIlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgWlJBTV9XUklURUJBQ0tcXG4gMTA4OlxcdCAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4gMTA5OlxcdCAgICAgICBkZXBlbmRzIG9uIFpSQU1cXG4gMTEwOlxcdCAgICAgICBoZWxwXFxuIDExMTpcXHRcXHQgVGhpcyBsZXRzIHpyYW0gZW50cmllcyAoaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlcykgYmUgd3JpdHRlblxcbiAxMTI6XFx0XFx0IGJhY2sgdG8gYSBiYWNraW5nIGRldmljZSwgaGVscGluZyBzYXZlIG1lbW9yeS5cXG4gMTEzOlxcdFxcdCBGb3IgdGhpcyBmZWF0dXJlLCBhZG1pbiBzaG91bGQgc2V0IHVwIGJhY2tpbmcgZGV2aWNlIHZpYVxcbiAxMTQ6XFx0XFx0IC9zeXMvYmxvY2svenJhbVgvYmFja2luZ19kZXYuXFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdCBXaXRoIC9zeXMvYmxvY2svenJhbVgve2lkbGUsd3JpdGViYWNrfSwgYXBwbGljYXRpb24gY291bGQgYXNrXFxuIDExNzpcXHRcXHQgaWRsZSBwYWdlJ3Mgd3JpdGViYWNrIHRvIHRoZSBiYWNraW5nIGRldmljZSB0byBzYXZlIGluIG1lbW9yeS5cXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0IFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxMjA6XFx0XFxuIDEyMTpcXHRjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG4gMTIyOlxcdFxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4gMTIzOlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAxMjQ6XFx0XFx0aGVscFxcbiAxMjU6XFx0XFx0ICBXaXRoIHRoaXMgZmVhdHVyZSB6cmFtIHRyYWNrcyBhY2Nlc3MgdGltZSBvZiBldmVyeSBzdG9yZWRcXG4gMTI2OlxcdFxcdCAgZW50cnkgKHBhZ2UpLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBtb3JlIGZpbmUgZ3JhaW5lZCBJRExFXFxuIDEyNzpcXHRcXHQgIHBhZ2VzIHdyaXRlYmFjay5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuIDEzMDpcXHRcXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4gMTMxOlxcdFxcdGRlcGVuZHMgb24gWlJBTSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbiAxMzI6XFx0XFx0c2VsZWN0IFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuIDEzMzpcXHRcXHRoZWxwXFxuIDEzNDpcXHRcXHQgIFdpdGggdGhpcyBmZWF0dXJlLCBhZG1pbiBjYW4gdHJhY2sgdGhlIHN0YXRlIG9mIGFsbG9jYXRlZCBibG9ja3NcXG4gMTM1OlxcdFxcdCAgb2YgelJBTS4gQWRtaW4gY291bGQgc2VlIHRoZSBpbmZvcm1hdGlvbiB2aWFcXG4gMTM2OlxcdFxcdCAgL3N5cy9rZXJuZWwvZGVidWcvenJhbS96cmFtWC9ibG9ja19zdGF0ZS5cXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi96cmFtLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMTM5OlxcdFxcbiAxNDA6XFx0Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbiAxNDE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcXFwiXFxuIDE0MjpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gMTQzOlxcdFxcdGhlbHBcXG4gMTQ0OlxcdFxcdCAgVGhpcyB3aWxsIGVuYWJsZSBtdWx0aS1jb21wcmVzc2lvbiBzdHJlYW1zLCBzbyB0aGF0IFpSQU0gY2FuXFxuIDE0NTpcXHRcXHQgIHJlLWNvbXByZXNzIHBhZ2VzIHVzaW5nIGEgcG90ZW50aWFsbHkgc2xvd2VyIGJ1dCBtb3JlIGVmZmVjdGl2ZVxcbiAxNDY6XFx0XFx0ICBjb21wcmVzc2lvbiBhbGdvcml0aG0uIE5vdGUsIHRoYXQgSURMRSBwYWdlIHJlY29tcHJlc3Npb25cXG4gMTQ3OlxcdFxcdCAgcmVxdWlyZXMgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjI2LjMzNjU2ODIwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU0MjIwOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBaUkFNIENvbmZpZ3VyYXRpb24gYW5kIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIFpSQU0gY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGFuZCBgWlJBTV9NVUxUSV9DT01QYC4gSG1tLCB3YWl0LCBpdCBsb29rcyBsaWtlIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgYWxzbyBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2g/IEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBgcmVhZF9ibG9ja19zdGF0ZWAuIExvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgYGluZGV4YCB2YXJpYWJsZSB0eXBlLCBjaGFuZ2luZyBpdCBmcm9tIGBzc2l6ZV90YCB0byBgdW5zaWduZWQgbG9uZ2AuIEFuZCB0aGVyZSdzIGFsc28gYSBmb3JtYXQgc3RyaW5nIGNoYW5nZSBpbiBgc25wcmludGZgIGZyb20gYCV6ZGAgdG8gYCVsdWAuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGxhcmdlciB2YWx1ZXMgcG90ZW50aWFsbHkuIFRoZSBgcmVhZF9ibG9ja19zdGF0ZWAgZnVuY3Rpb24gc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGJsb2NrIHRvIHRoZSB1c2VyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZC4gVGhlIHB1cnBvc2UgaXMgdG8gY2hlY2sgdGhlIGFjdGl2aXR5IHN0YXRlIGFuZCB3aGV0aGVyIHdyaXRlYmFjayBpcyBlbmFibGVkIGZvciBlYWNoIGJsb2NrLlxuXG5TaW5jZSBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgIGlzIGJlaW5nIG1vZGlmaWVkLCB0aGF0IGNvbmZpZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvby4gSXQgbG9va3MgbGlrZSBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgIGlzIHNlbGVjdGVkIGJ5IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wb3J0YW50IHN5bWJvbHMuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlOiBgZGlza3NpemVfc3RvcmVgLCBgenJhbV9zdWJtaXRfYmlvYCwgYHJlYWRfYmxvY2tfc3RhdGVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYW5kIGByZWNvbXByZXNzX3N0b3JlYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBgd3JpdGViYWNrX3N0b3JlYCBhbmQgYHJlY29tcHJlc3Nfc3RvcmVgIGFyZSBhY3R1YWxseSBwcmVzZW50LCBJIHRoaW5rIHRoYXQgaXMgdGhlIG5leHQgc3RlcCB0byByZXZpZXcgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjMyLjI5MDc5MjIwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MTM0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGViYWNrX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUzMT1zdGF0aWMgc3NpemVfdCBiZF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU0Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1NDc6c3RhdGljIHNzaXplX3QgY29tcHJlc3NlZF93cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU0OC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTE5OT1zdGF0aWMgdm9pZCBzY2FuX3Nsb3RzX2Zvcl93cml0ZWJhY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTIzNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMjM1OnN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTIzNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjMyLjM1ODcwOTIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjY1OTY0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEFja25vd2xlZGdtZW50IG9mIGB3cml0ZWJhY2tfc3RvcmVgKipcblxuUmlnaHQsIHNvLCB0aGUgaW5pdGlhbCBwcmVtaXNlIGlzIGNsZWFyIC0gdGhlIGB3cml0ZWJhY2tfc3RvcmVgIGV4aXN0cy4gTm8gbmVlZCB0byBiZWxhYm9yIHRoZSBwb2ludC4gV2UncmUgc3RhcnRpbmcgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY29tcG9uZW50LCBvciBkYXRhIHN0cnVjdHVyZSwgaXMgaW5kZWVkIHByZXNlbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzeXN0ZW0gd2UncmUgYW5hbHl6aW5nLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBnaXZlbi4gV2UncmUgbm90IGRlYmF0aW5nIGl0cyBleGlzdGVuY2U7IHdlJ3JlIHByb2NlZWRpbmcgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCdzIHRoZXJlIGFuZCBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIFdlIGNhbiBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjM1LjM4NTMwOTA5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2MDQwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb21wcmVzc19zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM0PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjU0MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNTQxOnN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1NDItXFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjM1LjQ1NDkxNzY2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIyMDE3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVmVyaWZ5aW5nIEtleSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgY29kZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgYHJlY29tcHJlc3Nfc3RvcmVgLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIG9mIHRoZSBgcmVhZF9ibG9ja19zdGF0ZWAgZnVuY3Rpb24uIEl0cyBjb3JyZWN0IG9wZXJhdGlvbiBpcyBjcml0aWNhbCBmb3IgZXZlcnl0aGluZyB0byB3b3JrIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrIHN0YXRlIGlzIGJlaW5nIHJlYWQgY29ycmVjdGx5LCBvdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHN0b3JlIHdpbGwganVzdCByZXR1cm4gZ2FyYmFnZS4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGFsbCB0aGUgcG9zc2libGUgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzozOC4zNzY5Mzg2NjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDA3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfYmxvY2tfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTUzNz1zdGF0aWMgdm9pZCB6cmFtX2RlYnVnZnNfZGVzdHJveSh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU0MS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTQyOnN0YXRpYyBzc2l6ZV90IHJlYWRfYmxvY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU0My1cXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY196cmFtX2Jsb2NrX3N0YXRlX29wID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1OTgtXFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTk5OlxcdC5yZWFkID0gcmVhZF9ibG9ja19zdGF0ZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjAwLVxcdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6MzguNDU0MzUwMjkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTIzMjQ5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb24qKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGNvbmZpcm1zIHRoYXQgYHJlYWRfYmxvY2tfc3RhdGVgIGlzIGRlZmluaXRlbHkgYXZhaWxhYmxlLiBHb29kLCB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gYW5kIHdlIG5lZWQgdG8gaGF2ZSB0aGF0IHJlYWR5LlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZXRhZGF0YSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHdvcmsgd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvbiBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYC4gSSB3aWxsIHdhbnQgdG8gYmUgY29tZm9ydGFibGUgd2l0aCB0aGlzIGNvZGUsIGFuZCBrbm93IHRoYXQgaXQgaXMgbm90IGJ1Z2d5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjQxLjgwNjY3OTczMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0OTMyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9tZXRhX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE5NzQ9c3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE5OTEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTk5MjpzdGF0aWMgYm9vbCB6cmFtX21ldGFfYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xOTkzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NzE9c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4OTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg5NzpcXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg5OC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6NDEuODYyMTc3Mjg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzIzMzE5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBJbmxpbmluZyBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHpyYW1fbWV0YV9hbGxvY2AgYW5kIGB6cmFtX21ldGFfZnJlZWAgYXJlIGluZGVlZCBwcmVzZW50IGluIHRoZSBjb2RlIGJhc2UuIE15IGluaXRpYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHMgaW5jbHVkZWQgdGhvc2UsIGFuZCBpdCBzZWVtZWQgbGlrZSBhIHZhbGlkIHN0YXJ0aW5nIHBvaW50LlxuXG5CdXQgbm93IEknbSB0aGlua2luZywgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGVzZSBmdW5jdGlvbnMsIGB6cmFtX21ldGFfYWxsb2NgIGFuZCBgenJhbV9tZXRhX2ZyZWVgLCBhcmUgc3RhdGljLCBhbmQgdGhlIG9ubHkgY2FsbCBzaXRlcyBJJ20gc2VlaW5nIGFyZSBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgYW5kIGB6cmFtX3Jlc2V0X2RldmljZWAuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpbmxpbmluZyBpcyBhIGxpa2VseSBvcHRpbWl6YXRpb24uIElmIHRoZXkgKmFyZSogaW5saW5lZCwgdGhlbiBmb2N1c2luZyBvbiB0aGUgKmNhbGxlcnMqIG9mIHRob3NlIGZ1bmN0aW9ucyAoc3BlY2lmaWNhbGx5IGBkaXNrc2l6ZV9zdG9yZWAgYW5kIGB6cmFtX3Jlc2V0X2RldmljZWApIGlzIHRoZSBiZXR0ZXIgYXBwcm9hY2guXG5cbkxldCBtZSBjb25maXJtIHRoZSBjYWxsIHNpdGVzOiBgenJhbV9tZXRhX2FsbG9jYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSB3aXRoaW4gYGRpc2tzaXplX3N0b3JlYCwgc3VnZ2VzdGluZyBpdCdzIHJpcGUgZm9yIGlubGluaW5nLiBgenJhbV9tZXRhX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgYW5kIGFsc28sIGltcG9ydGFudGx5LCBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgKGxpa2VseSBvbiB0aGUgZXJyb3IgcGF0aCkuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIHNpbXBsaWZ5IG15IGZvY3VzLiBJbnN0ZWFkIG9mIGxpc3RpbmcgYHpyYW1fbWV0YV9hbGxvY2AgYW5kIGB6cmFtX21ldGFfZnJlZWAsIGl0J3MgbXVjaCBtb3JlIHJlbGV2YW50IHRvIGluY2x1ZGUgYGRpc2tzaXplX3N0b3JlYCBhbmQgZWl0aGVyIGB6cmFtX3Jlc2V0X2RldmljZWAgb3IsIHBlcmhhcHMgbW9yZSBnZW5lcmljYWxseSwgdGhlIGByZXNldF9zdG9yZWAgZnVuY3Rpb24sIGlmIHRoYXQncyBhIG1vcmUgYWNjdXJhdGUgbmFtZSB3aXRoaW4gdGhlIGNvZGUncyBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mzo0Ni43MzQ1MTI0MzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEyMjQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNldF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODcxPXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTI1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5MjY6c3RhdGljIHNzaXplX3QgcmVzZXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5MjctXFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxMjg9c3RhdGljIGludCB6cmFtX3JlbW92ZShzdHJ1Y3QgenJhbSAqenJhbSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDYtXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ3OlxcdFxcdCAqIElmIHdlIHdlcmUgY2xhaW1lZCBieSByZXNldF9zdG9yZSgpLCBkZWxfZ2VuZGlzaygpIHdpbGxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ4OlxcdFxcdCAqIHdhaXQgdW50aWwgcmVzZXRfc3RvcmUoKSBpcyBkb25lLCBzbyBub3RoaW5nIG5lZWQgdG8gZG8uXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE0OS1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNjAtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2MTpcXHQvKiBkZWxfZ2VuZGlzayBkcmFpbnMgcGVuZGluZyByZXNldF9zdG9yZSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNjItXFx0V0FSTl9PTl9PTkNFKGNsYWltZWQgXFx1MDAyNlxcdTAwMjYgenJhbS1cXHUwMDNlY2xhaW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mzo0Ni44NTE2NTA3NTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MTM5NDYwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFpSQU0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGByZXNldF9zdG9yZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50IGluIHRoZSBjb2RlLiBHaXZlbiB0aGF0LCBhbmQgYWZ0ZXIgZXhhbWluaW5nIHRoZSBjb2RlLCBJIHRoaW5rIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZTogYGRpc2tzaXplX3N0b3JlYCwgYHpyYW1fc3VibWl0X2Jpb2AsIGByZWFkX2Jsb2NrX3N0YXRlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGByZXNldF9zdG9yZWAuICBUaGV5IHNlZW0gdG8gY292ZXIgdGhlIGtleSBhcmVhcyBvZiB0aGUgY2hhbmdlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEkgaW5pdGlhbGx5IHRob3VnaHQgYENPTkZJR19aUkFNYCBtaWdodCBiZSBlbm91Z2gsIGJ1dCBhIGNsb3NlciBsb29rIHRlbGxzIG1lIHdlIGFsc28gbmVlZCBgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCwgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLCBhbmQgYENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR2AuICBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19ERUJVR19GU2AgaXMgYSBkZXBlbmRlbmN5IGZvciBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGluY2x1ZGVkIGFzIHdlbGwuICBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgIGRlcGVuZGVuY3kuLi5ZZXAsIGl0IGRlcGVuZHMgb24gYm90aCBgWlJBTWAgYW5kIGBERUJVR19GU2AuIEFuZCBJIHNlZSB0aGF0IGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgaXMgc2VsZWN0ZWQgYnkgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYC5cblxuU28sIHRoZSBkZWZpbml0aXZlIGVuYWJsZSBjb25maWdzIHNob3VsZCBiZTogYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AuXG5cbkknbGwgcXVpY2tseSBzY2FuIHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBjb25maWdzLiAgUmlnaHQsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGNvdmVyIGZ1bmN0aW9ucyB1bmRlciBgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCBsaWtlIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGByZWFkX2Zyb21fenNwb29sYCwgYHpyYW1fd3JpdGViYWNrX2NvbXBsZXRlYCwgYHpyYW1fd3JpdGViYWNrX3Nsb3RzYCwgYHNjYW5fc2xvdHNfZm9yX3dyaXRlYmFja2AsIGB3cml0ZWJhY2tfc3RvcmVgLCBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzYCwgYHJlYWRfZnJvbV9iZGV2X2FzeW5jYCwgYHJlYWRfZnJvbV9iZGV2X3N5bmNgLCBhbmQgYHJlYWRfZnJvbV9iZGV2YCwgYW5kIGByZWFkX2Jsb2NrX3N0YXRlYCB1bmRlciBgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGByZWNvbXByZXNzX3Nsb3RgIGFuZCBgcmVjb21wcmVzc19zdG9yZWAgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiAgU28gbXkgZWFybGllciBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiBpcyBzb2xpZC5cblxuQWxyaWdodCwgbGV0J3MgcmV2aXNpdCB0aG9zZSBmb2N1cyBzeW1ib2xzOiBgZGlza3NpemVfc3RvcmVgLCBgenJhbV9zdWJtaXRfYmlvYCwgYHJlYWRfYmxvY2tfc3RhdGVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBhbmQgYHJlc2V0X3N0b3JlYC4gIFRoZXkncmUgYWxsIGVpdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBBUEkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgc3lzZnMsIGJsb2NrIGxheWVyLCBvciBkZWJ1Z2ZzLiAgQ3J1Y2lhbGx5LCB0aGV5J3JlICpub3QqIGlubGluZWQgYW5kIGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBUaGF0IGxvb2tzIGdvb2QuXG5cbk5vdywgbGV0IG1lIGNvbmZpcm0gdGhhdCBgenJhbV9zdWJtaXRfYmlvYCBpcyB0aGUgY29ycmVjdCBibG9jayBsYXllciBlbnRyeSBwb2ludC4gIFllcywgaXQncyBhc3NpZ25lZCB0byBgenJhbV9kZXZvcHMuc3VibWl0X2Jpb2AuICBBcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBgenJhbV9idmVjX3JlYWRgIGFuZCBgenJhbV9idmVjX3dyaXRlYCBhcmUgY2FsbGVkIGZyb20gYHpyYW1fYmlvX3JlYWRgIGFuZCBgenJhbV9iaW9fd3JpdGVgLCB3aGljaCBhcmUgKmluIHR1cm4qIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBTbywgYHpyYW1fc3VibWl0X2Jpb2AgYWN0cyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnQuXG5cbk9rYXksIGxldCdzIGNyeXN0YWxsaXplIHRoZSB0ZXN0IHJhdGlvbmFsZS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIHRoZSB6cmFtIHNsb3QgaW5kZXggdHlwZSBmcm9tIGB1MzJgIHRvIGB1bnNpZ25lZCBsb25nYCB0aHJvdWdob3V0IHRoZSBkcml2ZXIuIFRoaXMgaXMgdG8gc3VwcG9ydCBsYXJnZXIgZGV2aWNlcyAob3ZlciAxNlRCKSBvbiA2NC1iaXQgc3lzdGVtcyBhbmQgYXZvaWQgb3ZlcmZsb3cgaXNzdWVzIG9uIDMyLWJpdC4gSXQgKmFsc28qIGFkZHMgYSBzaXplIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIGV4Y2VlZCB0aGUgbGltaXRzIG9mIGFuIGB1bnNpZ25lZCBsb25nYCBpbmRleC4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGNvcmUgenJhbSBsb2dpYy4gVGhlcmVmb3JlLCB0aGUgdGVzdGluZyBzdHJhdGVneSBzaG91bGQgZm9jdXMgb24gZnV6emluZyB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiAgVG8gZmFjaWxpdGF0ZSB0aGlzLCB3ZSdsbCBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gZW5zdXJlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzLCBhcmUgY29tcGlsZWQgYW5kIGV4ZXJjaXNlZC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgcmlnaHQgZm9yIGByZWFkX2Jsb2NrX3N0YXRlYC4gWXVwLCBpdCBpcy4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjU3LjY2NTYwMDM1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExMzA1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTIxPWNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiVHJhY2sgelJhbSBibG9jayBzdGF0dXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjU3Ljc0NjczNTA4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg1MTY1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBaUkFNIE1lbW9yeSBUcmFja2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHByb21wdCBpcyBzaW1wbGUgZW5vdWdoLCBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlllcywgaXQgaXMuXCIgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHJlYWRfYmxvY2tfc3RhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcuIE15IG5leHQgc3RlcCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIGlzIHRvIGNvbmZpcm0gaXRzIGluY2x1c2lvbiB1bmRlciBgI2lmZGVmIENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR2AuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29kZSdzIGJlaGF2aW9yIHVuZGVyIGRpZmZlcmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaW4gWlJBTS4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyBub3QgYmVlbiBzZXQgYnkgc29tZSBvdGhlciBtZWFucyB0aGF0IEkgaGF2ZW4ndCBjb21lIGFjcm9zcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDowMC45MzE5MDUwOTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzY3NTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlJBTV9NRU1PUllfVFJBQ0tJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNTIzPXN0YXRpYyB2b2lkIHpyYW1fcmVsZWFzZV9iZGV2X2Jsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGJsa19pZHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1Mjg6I2lmZGVmIENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MjktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaD0xMDc9c3RydWN0IHpyYW0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQyLSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjE0MzojaWZkZWYgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQ0LVxcdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDowMS4wNDk1ODYyNjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5ODY3NjU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgUmVjb21wcmVzc2lvbiBMb2dpYyoqXG5cbk9rYXksIHllcywgdGhhdCdzIHJpZ2h0LiBOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBtdWx0aS1jb21wcmVzc2lvbiBaUkFNIGNvbmZpZ3VyYXRpb24uIFRvIHZlcmlmeSB0aGlzLCBJIG5lZWQgdG8gY29uZmlybSBpdHMgcGxhY2VtZW50LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24ncyBkZWZpbml0aW9uIGlzIG5lc3RlZCB1bmRlciBgI2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgbG9naWMgaXMgY29ycmVjdGx5IGNvbXBpbGVkIGFuZCBoYW5kbGVkIHdoZW4gbXVsdGktY29tcHJlc3Npb24gaXMgZW5hYmxlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHRoYXQgaXQgaXNuJ3QgY2F1c2luZyBhbnkgY29uZmxpY3RzIGlmIHRoYXQncyBub3QgdGhlIGNvbmZpZ3VyYXRpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBzYW5pdHkgY2hlY2sgYmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byBhbnkgcmVsYXRlZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjU0OjA1LjU0ODI2NTAxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2ODU2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1pSQU1fTVVMVElfQ09NUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNS1zdHJ1Y3QgenJhbV9wcF9zbG90IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTk9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgzMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODMxOiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgzMi1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjM2NT1zdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNzM6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzc0LSNkZWZpbmUgUkVDT01QUkVTU19JRExFXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMDM9c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXByZXNzZWRfd3JpdGViYWNrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA0LSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDU6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA2LXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhyZWNvbXBfYWxnb3JpdGhtKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAzMS1cXHRcXHUwMDI2ZGV2X2F0dHJfZGVidWdfc3RhdC5hdHRyLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMzI6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDMzLVxcdFxcdTAwMjZkZXZfYXR0cl9yZWNvbXBfYWxnb3JpdGhtLmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaD03OT1zdHJ1Y3QgenJhbV9zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC05Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDo5NzojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk4LSNkZWZpbmUgWlJBTV9QUklNQVJZX0NPTVBcXHQwVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDowNS42Mjc5NjE4NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MTM1MDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGV4cHJlc3NlZCBhcyB0aG91Z2ggdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBXcml0ZWJhY2sgU3RvcmUqKlxuXG5ZZXMsIHRoYXQncyByaWdodCwgaXQgZGVmaW5pdGVseSBpcy4gXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWlja2x5LiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYHdyaXRlYmFja19zdG9yZWAgaXMgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGAjaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3BlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgYmVoYXZpb3IuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCBpdCdzIG9ubHkgaW5jbHVkZWQgd2hlbiB3cml0ZWJhY2sgc3VwcG9ydCBpcyBlbmFibGVkLiBPdGhlcndpc2UsIHRoZXJlIGNvdWxkIGJlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy4gR290dGEgbWFrZSBzdXJlIHRoZSBjb25kaXRpb25hbCBsb2dpYyBpcyBzb3VuZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDoxMC4yOTkzMTU3MDZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTk1MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19aUkFNX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNS1zdHJ1Y3QgenJhbV9wcF9zbG90IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mj1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg1OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODYtI2RlZmluZSBJTlZBTElEX0JERVZfQkxPQ0tcXHRcXHQofjBVTClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIwOTc9c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTIxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMjI6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEyMy1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5OTU9c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk3LXN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAxOS1cXHRcXHUwMDI2ZGV2X2F0dHJfY29tcF9hbGdvcml0aG0uYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDIwOiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDIxLVxcdFxcdTAwMjZkZXZfYXR0cl9iZF9zdGF0LmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDQ2PXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwODQtXFx0aW5pdF9yd3NlbShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwODU6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwODYtXFx0enJhbS1cXHUwMDNld2JfYmF0Y2hfc2l6ZSA9IDMyO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9Nzk9c3RydWN0IHpyYW1fc3RhdHMge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtODktXFx0YXRvbWljNjRfdCBtaXNzX2ZyZWU7XFx0XFx0Lyogbm8uIG9mIG1pc3NlZCBmcmVlICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg6OTA6I2lmZGVmXFx0Q09ORklHX1pSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtOTEtXFx0YXRvbWljNjRfdCBiZF9jb3VudDtcXHRcXHQvKiBuby4gb2YgcGFnZXMgaW4gYmFja2luZyBkZXZpY2UgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTEwNz1zdHJ1Y3QgenJhbSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xMzItXFx0Ym9vbCBjbGFpbTsgLyogUHJvdGVjdGVkIGJ5IGRpc2stXFx1MDAzZW9wZW5fbXV0ZXggKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxMzM6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTEzNC1cXHRzdHJ1Y3QgZmlsZSAqYmFja2luZ19kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjU0OjEwLjM1NDkxNzkyMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODk0MjY2NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpSQU0gQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCdzIGFsbCBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyLiBJJ3ZlIGdvdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIG1pbmQ6IGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpSQU1fTVVMVElfQ09NUGAsIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIGFuZCBgREVCVUdfRlNgLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGZvY3VzIHN5bWJvbHMgSSdtIGRlYWxpbmcgd2l0aC4gSSBoYXZlIGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgIHRoYXQgbmVlZCB0byBiZSB2ZXJpZmllZC4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSByaWdodCBuYW1lcyBhbmQgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoLlxuXG5GaXJzdCwgbGV0J3MgY29uZmlybSBgcmVzZXRfc3RvcmVgLiBZZXMsIGxvb2tzIGdvb2Qg4oCTIHRoZSBzaWduYXR1cmUgbWF0Y2hlczogYHN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilgLiBFeGNlbGxlbnQuXG5cbk5vdywgb24gdG8gYHpyYW1fc3VibWl0X2Jpb2AuIFllcCwgdGhlIGRlZmluaXRpb24gaXMgY29ycmVjdDogYHN0YXRpYyB2b2lkIHpyYW1fc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pYC5cblxuQ2hlY2tpbmcgYGRpc2tzaXplX3N0b3JlYDogYHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilgLiBBbGwgaW4gb3JkZXIuXG5cbk5leHQsIGByZWFkX2Jsb2NrX3N0YXRlYDogYHN0YXRpYyBzc2l6ZV90IHJlYWRfYmxvY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKWAuIENvbmZpcm1lZC5cblxuYHdyaXRlYmFja19zdG9yZWA6IGBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKWAuIFJpZ2h0IG9uIHRhcmdldC5cblxuRmluYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgOiBgc3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gUGVyZmVjdC5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgbmFtZXMgYW5kIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYXJlIGV4YWN0bHkgYXMgSSBleHBlY3RlZC4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MjIsIk91dHB1dFRva2VucyI6MzE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjU0OjE3LjI0OTE4NzI5OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDk2Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9XUklURUJBQ0tcIixcbiAgICBcIlpSQU1fTVVMVElfQ09NUFwiLFxuICAgIFwiWlJBTV9NRU1PUllfVFJBQ0tJTkdcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpyYW1fc3VibWl0X2Jpb1wiLFxuICAgIFwicmVhZF9ibG9ja19zdGF0ZVwiLFxuICAgIFwid3JpdGViYWNrX3N0b3JlXCIsXG4gICAgXCJyZWNvbXByZXNzX3N0b3JlXCIsXG4gICAgXCJyZXNldF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHpyYW0gc2xvdCBpbmRleCBmcm9tIGB1MzJgIHRvIGB1bnNpZ25lZCBsb25nYCB0aHJvdWdob3V0IHRoZSB6cmFtIGRyaXZlciB0byBzdXBwb3J0IGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiBvbiA2NC1iaXQgc3lzdGVtcyBhbmQgcHJldmVudCBvdmVyZmxvdyBvbiAzMi1iaXQgc3lzdGVtcy4gSXQgYWxzbyBhZGRzIGEgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYCB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIGEgZGlzayBzaXplIHRoYXQgd291bGQgb3ZlcmZsb3cgdGhlIGB1bnNpZ25lZCBsb25nYCBpbmRleC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gZHJpdmVyIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIGNoYW5nZXMsIHdlIHNob3VsZCBmdXp6IHRoZSBzeXNmcyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgKGBkaXNrc2l6ZV9zdG9yZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGByZXNldF9zdG9yZWApLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgKGByZWFkX2Jsb2NrX3N0YXRlYCksIGFuZCB0aGUgYmxvY2sgZGV2aWNlIElPIGVudHJ5IHBvaW50IChgenJhbV9zdWJtaXRfYmlvYCkuIFdlIG5lZWQgdG8gZW5hYmxlIGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpSQU1fTVVMVElfQ09NUGAsIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIGFuZCBgREVCVUdfRlNgIHRvIGNvbXBpbGUgYW5kIHRlc3QgYWxsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fV1JJVEVCQUNLXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIixcbiAgICBcIlpSQU1fTUVNT1JZX1RSQUNLSU5HXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJ6cmFtX3N1Ym1pdF9iaW9cIixcbiAgICBcInJlYWRfYmxvY2tfc3RhdGVcIixcbiAgICBcIndyaXRlYmFja19zdG9yZVwiLFxuICAgIFwicmVjb21wcmVzc19zdG9yZVwiLFxuICAgIFwicmVzZXRfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkv5g6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 03:22:02 +0000 UTC FinishedAt: 2026-08-06 03:54:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZRAM_MULTI_COMP", "ZRAM_MEMORY_TRACKING", "DEBUG_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZRAM_MULTI_COMP", "ZRAM_MEMORY_TRACKING", "DEBUG_FS" ], "series_id": "8438b9ed-e870-44a2-a8b8-a5bedec2a0bb" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "disksize_store", "zram_submit_bio", "read_block_state", "writeback_store", "recompress_store", "reset_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlJBTV9NVUxUSV9DT01QJiMzNDssCiAgICAmIzM0O1pSQU1fTUVNT1JZX1RSQUNLSU5HJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7enJhbV9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JlYWRfYmxvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcHJlc3Nfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVzZXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgenJhbSBzbG90IGluZGV4IGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIHRocm91Z2hvdXQgdGhlIHpyYW0gZHJpdmVyIHRvIHN1cHBvcnQgZGV2aWNlcyBsYXJnZXIgdGhhbiAxNlRCIG9uIDY0LWJpdCBzeXN0ZW1zIGFuZCBwcmV2ZW50IG92ZXJmbG93IG9uIDMyLWJpdCBzeXN0ZW1zLiBJdCBhbHNvIGFkZHMgYSBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgIHRvIHByZXZlbnQgY29uZmlndXJpbmcgYSBkaXNrIHNpemUgdGhhdCB3b3VsZCBvdmVyZmxvdyB0aGUgYHVuc2lnbmVkIGxvbmdgIGluZGV4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBkcml2ZXIgbG9naWMuIFRvIHRlc3QgdGhlc2UgY2hhbmdlcywgd2Ugc2hvdWxkIGZ1enogdGhlIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcyAoYGRpc2tzaXplX3N0b3JlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYHJlc2V0X3N0b3JlYCksIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAoYHJlYWRfYmxvY2tfc3RhdGVgKSwgYW5kIHRoZSBibG9jayBkZXZpY2UgSU8gZW50cnkgcG9pbnQgKGB6cmFtX3N1Ym1pdF9iaW9gKS4gV2UgbmVlZCB0byBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gY29tcGlsZSBhbmQgdGVzdCBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Y2MyYmNkOWI2NmJiY2U1NTBlMDVmNWE0YWVkYzE3NmMzMWNkOWNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMzo1Mjo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCA1NjE4M2M4MjdlMWIzLi42YWY5NzdkYmM2ZmRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNTYsNyAmIzQzOzU2LDcgQEAgc3RhdGljIHNpemVfdCBodWdlX2NsYXNzX3NpemU7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcztcbiBcbi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7XG4mIzQzO3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4gXG4gLypcbiAgKiBlbnRyeSBsb2NraW5nIHJ1bGVzOlxuQEAgLTcwLDcgJiM0Mzs3MCw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KTtcbiAgKiA0KSBVc2UgVFJZIGxvY2sgdmFyaWFudCB3aGVuIGluIGF0b21pYyBjb250ZXh0XG4gICogICAgLSBtdXN0IGNoZWNrIHJldHVybiB2YWx1ZSBhbmQgaGFuZGxlIGxvY2tpbmcgZmFpbGVyc1xuICAqL1xuLXN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIF9fbXVzdF9jaGVjayBib29sIHNsb3RfdHJ5bG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXHUwMDI2enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uX19sb2NrO1xuIFxuQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXHUwMDI2enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uX19sb2NrO1xuIFxuQEAgLTkyLDcgJiM0Mzs5Miw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuIFx0bG9ja19hY3F1aXJlZChcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlX2xvY2tfbWFwLCBfUkVUX0lQXyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNsb3RfdW5sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB2b2lkIHNsb3RfdW5sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmxvY2sgPSBcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XG4gXG5AQCAtMTEwLDU1ICYjNDM7MTEwLDU2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHpyYW0gKmRldl90b196cmFtKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiAoc3RydWN0IHpyYW0gKilkZXZfdG9fZGlzayhkZXYpLVx1MDAzZXByaXZhdGVfZGF0YTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRyZXR1cm4genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uaGFuZGxlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG4mIzQzO3N0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxuIHtcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmhhbmRsZSA9IGhhbmRsZTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcbiYjNDM7c3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4gXHRcdFx0ICAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKVxuIHtcbiBcdHJldHVybiB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFx1MDAyNiBCSVQoZmxhZyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiBcdFx0XHQgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcbiB7XG4gXHR6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IEJJVChmbGFnKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiBcdFx0XHQgICAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKVxuIHtcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXHUwMDI2PSB+QklUKGZsYWcpO1xuIH1cbiBcbi1zdGF0aWMgc2l6ZV90IGdldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIHNpemVfdCBnZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHJldHVybiB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFx1MDAyNiAoQklUKFpSQU1fRkxBR19TSElGVCkgLSAxKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzaXplX3Qgc2l6ZSlcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXHUwMDNlXHUwMDNlIFpSQU1fRkxBR19TSElGVDtcbiBcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgPSAoZmxhZ3MgXHUwMDNjXHUwMDNjIFpSQU1fRkxBR19TSElGVCkgfCBzaXplO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2xvdF9hbGxvY2F0ZWQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsb3RfYWxsb2NhdGVkKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHJldHVybiBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSB8fFxuIFx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxuIFx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9XQik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4tXHRcdFx0XHRcdCAgdTMyIHByaW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbylcbiB7XG4gXHRwcmlvIFx1MDAyNj0gWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7XG4gXHQvKlxuQEAgLTE3MCwxNCAmIzQzOzE3MSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxuIFx0enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyB8PSAocHJpbyBcdTAwM2NcdTAwM2MgWlJBTV9DT01QX1BSSU9SSVRZX0JJVDEpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGdldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dTMyIHByaW8gPSB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFx1MDAzZVx1MDAzZSBaUkFNX0NPTVBfUFJJT1JJVFlfQklUMTtcbiBcbiBcdHJldHVybiBwcmlvIFx1MDAyNiBaUkFNX0NPTVBfUFJJT1JJVFlfTUFTSztcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFya19zbG90X2FjY2Vzc2VkKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fUFBfU0xPVCk7XG5AQCAtMjg0LDcgJiM0MzsyODUsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3BwX2N0bChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpXG4gfVxuIFxuIHN0YXRpYyBib29sIHBsYWNlX3BwX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3BwX2N0bCAqY3RsLFxuLVx0XHRcdCAgdTMyIGluZGV4KVxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpyYW1fcHBfc2xvdCAqcHBzO1xuIFx0dTMyIGJpZDtcbkBAIC00MTgsNyAmIzQzOzQxOSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4ge1xuIFx0aW50IGlzX2lkbGUgPSAxO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHpyYW0tXHUwMDNlZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRpbnQgaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcdTAwM2MgbnJfcGFnZXM7IGluZGV4JiM0MzsmIzQzOykge1xuIFx0XHQvKlxuQEAgLTQ4NSw4ICYjNDM7NDg2LDkgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuICNkZWZpbmUgSU5WQUxJRF9CREVWX0JMT0NLXHRcdCh+MFVMKVxuIFxuIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0dTMyIGluZGV4KTtcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpO1xuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xuJiM0MztzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4gXG4gc3RydWN0IHpyYW1fd2JfY3RsIHtcbiBcdC8qIGlkbGUgbGlzdCBpcyBhY2Nlc3NlZCBvbmx5IGJ5IHRoZSB3cml0ZWJhY2sgdGFzaywgbm8gY29uY3VyZW5jeSAqL1xuQEAgLTUyMiw3ICYjNDM7NTI0LDcgQEAgc3RydWN0IHpyYW1fcmJfcmVxIHtcbiBcdFx0LyogZXJyb3Igc3RhdHVzIChzeW5jIHJlYWQpICovXG4gXHRcdGludCBlcnJvcjtcbiBcdH07XG4tXHR1MzIgaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiB9O1xuIFxuICNkZWZpbmUgRk9VUl9LKHgpICgoeCkgKiAoMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMikpKVxuQEAgLTkxMCw3ICYjNDM7OTEyLDcgQEAgc3RhdGljIHZvaWQgenJhbV9hY2NvdW50X3dyaXRlYmFja19zdWJtaXQoc3RydWN0IHpyYW0gKnpyYW0pXG4gXG4gc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19jb21wbGV0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fd2JfcmVxICpyZXEpXG4ge1xuLVx0dTMyIGluZGV4ID0gcmVxLVx1MDAzZXBwcy1cdTAwM2VpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVxLVx1MDAzZXBwcy1cdTAwM2VpbmRleDtcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBibGtfc3RhdHVzX3RvX2Vycm5vKHJlcS1cdTAwM2ViaW8uYmlfc3RhdHVzKTtcbkBAIC0xMDMyLDcgJiM0MzsxMDM0LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcbiBcdHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxID0gTlVMTDtcbiBcdHN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwcztcbiBcdGludCByZXQgPSAwLCBlcnIgPSAwO1xuLVx0dTMyIGluZGV4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gMDtcbiBcbiBcdHdoaWxlICgocHBzID0gc2VsZWN0X3BwX3Nsb3QoY3RsKSkpIHtcbiBcdFx0aWYgKHpyYW0tXHUwMDNld2JfbGltaXRfZW5hYmxlIFx1MDAyNlx1MDAyNiAhenJhbS1cdTAwM2ViZF93Yl9saW1pdCkge1xuQEAgLTExOTgsNyAmIzQzOzEyMDAsNyBAQCBzdGF0aWMgdm9pZCBzY2FuX3Nsb3RzX2Zvcl93cml0ZWJhY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGxvLCB1bnNpZ25lZCBsb25nIGhpLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgenJhbV9wcF9jdGwgKmN0bClcbiB7XG4tXHR1MzIgaW5kZXggPSBsbztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbG87XG4gXG4gXHR3aGlsZSAoaW5kZXggXHUwMDNjIGhpKSB7XG4gXHRcdGJvb2wgb2sgPSB0cnVlO1xuQEAgLTEyMzUsNyAmIzQzOzEyMzcsNyBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xuLVx0dTY0IG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHVuc2lnbmVkIGxvbmcgbG8gPSAwLCBoaSA9IG5yX3BhZ2VzO1xuIFx0c3RydWN0IHpyYW1fcHBfY3RsICpwcF9jdGwgPSBOVUxMO1xuIFx0c3RydWN0IHpyYW1fd2JfY3RsICp3Yl9jdGwgPSBOVUxMO1xuQEAgLTEzMzMsNyAmIzQzOzEzMzUsOCBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xMzc1LDcgJiM0MzsxMzc4LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB6cmFtX3JiX3JlcSwgd29yayk7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJpb19maXJzdF9wYWdlX2FsbChyZXEtXHUwMDNlYmlvKTtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gcmVxLVx1MDAzZXpyYW07XG4tXHR1MzIgaW5kZXggPSByZXEtXHUwMDNlaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS1cdTAwM2VpbmRleDtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG5AQCAtMTQyNiw3ICYjNDM7MTQyOSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYXN5bmNfcmVhZF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0dTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuIFx0XHRcdFx0c3RydWN0IGJpbyAqcGFyZW50KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxO1xuQEAgLTE0NzYsOCAmIzQzOzE0NzksOCBAQCBzdGF0aWMgdm9pZCB6cmFtX3N5bmNfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gICogY2hhaW5lZCBJTyB3aXRoIHBhcmVudCBJTyBpbiBzYW1lIGNvbnRleHQsIGl0JiMzOTtzIGEgZGVhZGxvY2suIFRvIGF2b2lkIHRoYXQsXG4gICogdXNlIGEgd29ya2VyIHRocmVhZCBjb250ZXh0LlxuICAqL1xuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbi1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBibGtfaWR4KVxuJiM0MztzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSByZXE7XG4gXG5AQCAtMTQ5Niw4ICYjNDM7MTQ5OSw5IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiBcdHJldHVybiBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGJsa19pZHgsIHN0cnVjdCBiaW8gKnBhcmVudClcbiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdCAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuJiM0MztcdFx0XHQgIHN0cnVjdCBiaW8gKnBhcmVudClcbiB7XG4gXHRhdG9taWM2NF9pbmMoXHUwMDI2enJhbS1cdTAwM2VzdGF0cy5iZF9yZWFkcyk7XG4gXHRpZiAoIXBhcmVudCkge1xuQEAgLTE1MDksOCAmIzQzOzE1MTMsOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuIH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9iZGV2KHN0cnVjdCB6cmFtICp6cmFtKSB7fTtcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0cmV0dXJuIC1FSU87XG4gfVxuQEAgLTE1MzgsNyAmIzQzOzE1NDMsOCBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0Y2hhciAqa2J1Zjtcbi1cdHNzaXplX3QgaW5kZXgsIHdyaXR0ZW4gPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1x0c3NpemVfdCB3cml0dGVuID0gMDtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbkBAIC0xNTYwLDcgJiM0MzsxNTY2LDcgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGNvcGllZCA9IHNucHJpbnRmKGtidWYgJiM0Mzsgd3JpdHRlbiwgY291bnQsXG4tXHRcdFx0XCYjMzQ7JTEyemQgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XCYjMzQ7JTEybHUgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwmIzM0OyxcbiBcdFx0XHRpbmRleCwgenJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lLCAwLFxuIFx0XHRcdHRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1NBTUUpID8gJiMzOTtzJiMzOTsgOiAmIzM5Oy4mIzM5OyxcbiBcdFx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9XQikgPyAmIzM5O3cmIzM5OyA6ICYjMzk7LiYjMzk7LFxuQEAgLTE5NjcsOCAmIzQzOzE5NzMsOCBAQCBzdGF0aWMgc3NpemVfdCBkZWJ1Z19zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXG4ge1xuLVx0c2l6ZV90IG51bV9wYWdlcyA9IGRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0c2l6ZV90IGluZGV4O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdGlmICghenJhbS1cdTAwM2V0YWJsZSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE5ODUsNyAmIzQzOzE5OTEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX21ldGFfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIFxuIHN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIHtcbi1cdHNpemVfdCBudW1fcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBudW1fcGFnZXM7XG4gXG4gXHRudW1fcGFnZXMgPSBkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdHpyYW0tXHUwMDNldGFibGUgPSB2emFsbG9jKGFycmF5X3NpemUobnVtX3BhZ2VzLCBzaXplb2YoKnpyYW0tXHUwMDNldGFibGUpKSk7XG5AQCAtMjAwOCw3ICYjNDM7MjAxNCw3IEBAIHN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuJiM0MztzdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXG5AQCAtMjA2Miw3ICYjNDM7MjA2OCw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuIH1cbiBcbiBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgdTMyIGluZGV4KVxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHZvaWQgKm1lbTtcbiBcbkBAIC0yMDczLDcgJiM0MzsyMDc5LDcgQEAgc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIH1cbiBcbiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgdTMyIGluZGV4KVxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dm9pZCAqc3JjLCAqZHN0O1xuQEAgLTIwODgsNyAmIzQzOzIwOTQsOCBAQCBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbkBAIC0yMTEzLDcgJiM0MzsyMTIwLDggQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiB9XG4gXG4gI2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG4tc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbkBAIC0yMTQ1LDcgJiM0MzsyMTUzLDggQEAgc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuXG4gICogQ29ycmVzcG9uZGluZyBaUkFNIHNsb3Qgc2hvdWxkIGJlIGxvY2tlZC5cbiAgKi9cbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdGlmICh0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxuIFx0ICAgICFnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpKVxuQEAgLTIxNTcsOCAmIzQzOzIxNjYsOCBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxuJiM0MztzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0aW50IHJldDtcbiBcbkBAIC0yMTgwLDcgJiM0MzsyMTg5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiBcbiBcdC8qIFNob3VsZCBORVZFUiBoYXBwZW4uIFJldHVybiBiaW8gZXJyb3IgaWYgaXQgZG9lcy4gKi9cbiBcdGlmIChXQVJOX09OKHJldCBcdTAwM2MgMCkpXG4tXHRcdHByX2VycihcJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSV1XFxuXCYjMzQ7LCByZXQsIGluZGV4KTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSVsdVxcblwmIzM0OywgcmV0LCBpbmRleCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0yMTkwLDcgJiM0MzsyMTk5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiAgKiBhbHdheXMgZXhwZWN0cyBhIGZ1bGwgcGFnZSBmb3IgdGhlIG91dHB1dC5cbiAgKi9cbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLVx0XHRcdFx0ICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9JTyk7XG4gXHRpbnQgcmV0O1xuQEAgLTIyMDUsNyAmIzQzOzIyMTQsNyBAQCBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuIH1cbiBcbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi1cdFx0XHQgIHUzMiBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKVxuJiM0MztcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbiBcdFx0cmV0dXJuIHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5AQCAtMjIxMyw3ICYjNDM7MjIyMiw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuIH1cbiBcbiBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcbi1cdFx0XHRcdCAgdTMyIGluZGV4KVxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0c2xvdF9mcmVlKHpyYW0sIGluZGV4KTtcbkBAIC0yMjI4LDcgJiM0MzsyMjM3LDcgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXG4gfVxuIFxuIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgIHUzMiBpbmRleClcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR2b2lkICpzcmM7XG5AQCAtMjI2OCw3ICYjNDM7MjI3Nyw4IEBAIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4mIzQzO3N0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuQEAgLTIzMzUsNyAmIzQzOzIzNDUsNyBAQCBzdGF0aWMgaW50IHpyYW1fd3JpdGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiAgKiBUaGlzIGlzIGEgcGFydGlhbCBJTy4gUmVhZCB0aGUgZnVsbCBwYWdlIGJlZm9yZSB3cml0aW5nIHRoZSBjaGFuZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLVx0XHRcdFx0ICAgdTMyIGluZGV4LCBpbnQgb2Zmc2V0KVxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTtcbiBcdGludCByZXQ7XG5AQCAtMjM1Myw3ICYjNDM7MjM2Myw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuIH1cbiBcbiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4tXHRcdFx0ICAgdTMyIGluZGV4LCBpbnQgb2Zmc2V0KVxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgb2Zmc2V0KVxuIHtcbiBcdGlmIChpc19wYXJ0aWFsX2lvKGJ2ZWMpKVxuIFx0XHRyZXR1cm4genJhbV9idmVjX3dyaXRlX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5AQCAtMjQyMSw4ICYjNDM7MjQzMSw5IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbyxcbiAgKlxuICAqIENvcnJlc3BvbmRpbmcgWlJBTSBzbG90IHNob3VsZCBiZSBsb2NrZWQuXG4gICovXG4tc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0ICAgdTY0ICpudW1fcmVjb21wX3BhZ2VzLCB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcbiYjNDM7c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBwYWdlICpwYWdlLCB1NjQgKm51bV9yZWNvbXBfcGFnZXMsXG4mIzQzO1x0XHRcdCAgIHUzMiB0aHJlc2hvbGQsIHUzMiBwcmlvKVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZV9vbGQ7XG5AQCAtMjY3NCw3ICYjNDM7MjY4NSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIHN0YXRpYyB2b2lkIHpyYW1fYmlvX2Rpc2NhcmQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzaXplX3QgbiA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG4tXHR1MzIgaW5kZXggPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgXHUwMDNlXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdHUzMiBvZmZzZXQgPSAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yIFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcdTAwM2NcdTAwM2NcbiBcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXG5AQCAtMjcxNSw3ICYjNDM7MjcyNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiBcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cdTAwM2ViaV9pdGVyO1xuIFxuIFx0ZG8ge1xuLVx0XHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcbkBAIC0yNzQ2LDcgJiM0MzsyNzU3LDcgQEAgc3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiBcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cdTAwM2ViaV9pdGVyO1xuIFxuIFx0ZG8ge1xuLVx0XHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcbkBAIC0yODYwLDYgJiM0MzsyODcxLDcgQEAgc3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4gc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFx0dTY0IGRpc2tzaXplO1xuIFx0c3RydWN0IHpjb21wICpjb21wO1xuIFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xuQEAgLTI4NzcsNiAmIzQzOzI4ODksMTEgQEAgc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdH1cbiBcbiBcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XG4mIzQzO1x0bnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXG4mIzQzO1x0aWYgKCFudW1fcGFnZXMgfHwgKCh1NjQpbnVtX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGlmICghenJhbV9tZXRhX2FsbG9jKHpyYW0sIGRpc2tzaXplKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlJBTV9NVUxUSV9DT01QJiMzNDssCiAgICAmIzM0O1pSQU1fTUVNT1JZX1RSQUNLSU5HJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAgICYjMzQ7enJhbV9zdWJtaXRfYmlvJiMzNDssCiAgICAmIzM0O3JlYWRfYmxvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlY29tcHJlc3Nfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVzZXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgenJhbSBzbG90IGluZGV4IGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIHRocm91Z2hvdXQgdGhlIHpyYW0gZHJpdmVyIHRvIHN1cHBvcnQgZGV2aWNlcyBsYXJnZXIgdGhhbiAxNlRCIG9uIDY0LWJpdCBzeXN0ZW1zIGFuZCBwcmV2ZW50IG92ZXJmbG93IG9uIDMyLWJpdCBzeXN0ZW1zLiBJdCBhbHNvIGFkZHMgYSBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgIHRvIHByZXZlbnQgY29uZmlndXJpbmcgYSBkaXNrIHNpemUgdGhhdCB3b3VsZCBvdmVyZmxvdyB0aGUgYHVuc2lnbmVkIGxvbmdgIGluZGV4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgenJhbSBkcml2ZXIgbG9naWMuIFRvIHRlc3QgdGhlc2UgY2hhbmdlcywgd2Ugc2hvdWxkIGZ1enogdGhlIHN5c2ZzIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlcyAoYGRpc2tzaXplX3N0b3JlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYHJlc2V0X3N0b3JlYCksIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAoYHJlYWRfYmxvY2tfc3RhdGVgKSwgYW5kIHRoZSBibG9jayBkZXZpY2UgSU8gZW50cnkgcG9pbnQgKGB6cmFtX3N1Ym1pdF9iaW9gKS4gV2UgbmVlZCB0byBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gY29tcGlsZSBhbmQgdGVzdCBhbGwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Y2MyYmNkOWI2NmJiY2U1NTBlMDVmNWE0YWVkYzE3NmMzMWNkOWNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwMzo1Mjo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKaW5kZXggNTYxODNjODI3ZTFiMy4uNmFmOTc3ZGJjNmZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMKQEAgLTU2LDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyBzaXplX3QgaHVnZV9jbGFzc19zaXplOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzOwogCi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7CiYjNDM7c3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKIAogLyoKICAqIGVudHJ5IGxvY2tpbmcgcnVsZXM6CkBAIC03MCw3ICYjNDM7NzAsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7CiAgKiA0KSBVc2UgVFJZIGxvY2sgdmFyaWFudCB3aGVuIGluIGF0b21pYyBjb250ZXh0CiAgKiAgICAtIG11c3QgY2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBoYW5kbGUgbG9ja2luZyBmYWlsZXJzCiAgKi8KLXN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKJiM0MztzdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc2xvdF90cnlsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgKmxvY2sgPSAmYW1wO3pyYW0tJmd0O3RhYmxlW2luZGV4XS5fX2xvY2s7CiAKQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nICpsb2NrID0gJmFtcDt6cmFtLSZndDt0YWJsZVtpbmRleF0uX19sb2NrOwogCkBAIC05Miw3ICYjNDM7OTIsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2xvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKIAlsb2NrX2FjcXVpcmVkKCZhbXA7enJhbS0mZ3Q7dGFibGVfbG9ja19tYXAsIF9SRVRfSVBfKTsKIH0KIAotc3RhdGljIHZvaWQgc2xvdF91bmxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCkKJiM0MztzdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nICpsb2NrID0gJmFtcDt6cmFtLSZndDt0YWJsZVtpbmRleF0uX19sb2NrOwogCkBAIC0xMTAsNTUgJiM0MzsxMTAsNTYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgenJhbSAqZGV2X3RvX3pyYW0oc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiAoc3RydWN0IHpyYW0gKilkZXZfdG9fZGlzayhkZXYpLSZndDtwcml2YXRlX2RhdGE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlyZXR1cm4genJhbS0mZ3Q7dGFibGVbaW5kZXhdLmhhbmRsZTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQomIzQzO3N0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpCiB7CiAJenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmhhbmRsZSA9IGhhbmRsZTsKIH0KIAotc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwKIAkJCSAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZykKIHsKIAlyZXR1cm4genJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgJmFtcDsgQklUKGZsYWcpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCiYjNDM7c3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwKIAkJCSAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKQogewogCXpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IEJJVChmbGFnKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCiYjNDM7c3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LAogCQkJICAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZykKIHsKIAl6cmFtLSZndDt0YWJsZVtpbmRleF0uYXR0ci5mbGFncyAmYW1wOz0gfkJJVChmbGFnKTsKIH0KIAotc3RhdGljIHNpemVfdCBnZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIHNpemVfdCBnZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXJldHVybiB6cmFtLSZndDt0YWJsZVtpbmRleF0uYXR0ci5mbGFncyAmYW1wOyAoQklUKFpSQU1fRkxBR19TSElGVCkgLSAxKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzaXplX3Qgc2l6ZSkKJiM0MztzdGF0aWMgdm9pZCBzZXRfc2xvdF9zaXplKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0genJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgJmd0OyZndDsgWlJBTV9GTEFHX1NISUZUOwogCiAJenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgPSAoZmxhZ3MgJmx0OyZsdDsgWlJBTV9GTEFHX1NISUZUKSB8IHNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlyZXR1cm4gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCkgfHwKIAkJdGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHwKIAkJdGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LAotCQkJCQkgIHUzMiBwcmlvKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLAomIzQzOwkJCQkJICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbykKIHsKIAlwcmlvICZhbXA7PSBaUkFNX0NPTVBfUFJJT1JJVFlfTUFTSzsKIAkvKgpAQCAtMTcwLDE0ICYjNDM7MTcxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCiAJenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgfD0gKHByaW8gJmx0OyZsdDsgWlJBTV9DT01QX1BSSU9SSVRZX0JJVDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGlubGluZSB1MzIgZ2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1MzIgcHJpbyA9IHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmZsYWdzICZndDsmZ3Q7IFpSQU1fQ09NUF9QUklPUklUWV9CSVQxOwogCiAJcmV0dXJuIHByaW8gJmFtcDsgWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7CiB9CiAKLXN0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAljbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7CiAJY2xlYXJfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1BQX1NMT1QpOwpAQCAtMjg0LDcgJiM0MzsyODUsNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3BwX2N0bChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpCiB9CiAKIHN0YXRpYyBib29sIHBsYWNlX3BwX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3BwX2N0bCAqY3RsLAotCQkJICB1MzIgaW5kZXgpCiYjNDM7CQkJICB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwczsKIAl1MzIgYmlkOwpAQCAtNDE4LDcgJiM0Mzs0MTksNyBAQCBzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKQogewogCWludCBpc19pZGxlID0gMTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS0mZ3Q7ZGlza3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKLQlpbnQgaW5kZXg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggJmx0OyBucl9wYWdlczsgaW5kZXgmIzQzOyYjNDM7KSB7CiAJCS8qCkBAIC00ODUsOCAmIzQzOzQ4Niw5IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICNkZWZpbmUgSU5WQUxJRF9CREVWX0JMT0NLCQkofjBVTCkKIAogc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJdTMyIGluZGV4KTsKLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCk7CiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpOwomIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogCiBzdHJ1Y3QgenJhbV93Yl9jdGwgewogCS8qIGlkbGUgbGlzdCBpcyBhY2Nlc3NlZCBvbmx5IGJ5IHRoZSB3cml0ZWJhY2sgdGFzaywgbm8gY29uY3VyZW5jeSAqLwpAQCAtNTIyLDcgJiM0Mzs1MjQsNyBAQCBzdHJ1Y3QgenJhbV9yYl9yZXEgewogCQkvKiBlcnJvciBzdGF0dXMgKHN5bmMgcmVhZCkgKi8KIAkJaW50IGVycm9yOwogCX07Ci0JdTMyIGluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwogfTsKIAogI2RlZmluZSBGT1VSX0soeCkgKCh4KSAqICgxICZsdDsmbHQ7IChQQUdFX1NISUZUIC0gMTIpKSkKQEAgLTkxMCw3ICYjNDM7OTEyLDcgQEAgc3RhdGljIHZvaWQgenJhbV9hY2NvdW50X3dyaXRlYmFja19zdWJtaXQoc3RydWN0IHpyYW0gKnpyYW0pCiAKIHN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKQogewotCXUzMiBpbmRleCA9IHJlcS0mZ3Q7cHBzLSZndDtpbmRleDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS0mZ3Q7cHBzLSZndDtpbmRleDsKIAlpbnQgZXJyOwogCiAJZXJyID0gYmxrX3N0YXR1c190b19lcnJubyhyZXEtJmd0O2Jpby5iaV9zdGF0dXMpOwpAQCAtMTAzMiw3ICYjNDM7MTAzNCw3IEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfc2xvdHMoc3RydWN0IHpyYW0gKnpyYW0sCiAJc3RydWN0IHpyYW1fd2JfcmVxICpyZXEgPSBOVUxMOwogCXN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwczsKIAlpbnQgcmV0ID0gMCwgZXJyID0gMDsKLQl1MzIgaW5kZXggPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4ID0gMDsKIAogCXdoaWxlICgocHBzID0gc2VsZWN0X3BwX3Nsb3QoY3RsKSkpIHsKIAkJaWYgKHpyYW0tJmd0O3diX2xpbWl0X2VuYWJsZSAmYW1wOyZhbXA7ICF6cmFtLSZndDtiZF93Yl9saW1pdCkgewpAQCAtMTE5OCw3ICYjNDM7MTIwMCw3IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3dyaXRlYmFjayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvLCB1bnNpZ25lZCBsb25nIGhpLAogCQkJCSAgICAgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpCiB7Ci0JdTMyIGluZGV4ID0gbG87CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXggPSBsbzsKIAogCXdoaWxlIChpbmRleCAmbHQ7IGhpKSB7CiAJCWJvb2wgb2sgPSB0cnVlOwpAQCAtMTIzNSw3ICYjNDM7MTIzNyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTsKLQl1NjQgbnJfcGFnZXMgPSB6cmFtLSZndDtkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS0mZ3Q7ZGlza3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIGxvID0gMCwgaGkgPSBucl9wYWdlczsKIAlzdHJ1Y3QgenJhbV9wcF9jdGwgKnBwX2N0bCA9IE5VTEw7CiAJc3RydWN0IHpyYW1fd2JfY3RsICp3Yl9jdGwgPSBOVUxMOwpAQCAtMTMzMyw3ICYjNDM7MTMzNSw4IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCkKJiM0MztzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xMzc1LDcgJiM0MzsxMzc4LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAlzdHJ1Y3QgenJhbV9yYl9yZXEgKnJlcSA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgenJhbV9yYl9yZXEsIHdvcmspOwogCXN0cnVjdCBwYWdlICpwYWdlID0gYmlvX2ZpcnN0X3BhZ2VfYWxsKHJlcS0mZ3Q7YmlvKTsKIAlzdHJ1Y3QgenJhbSAqenJhbSA9IHJlcS0mZ3Q7enJhbTsKLQl1MzIgaW5kZXggPSByZXEtJmd0O2luZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVxLSZndDtpbmRleDsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOwpAQCAtMTQyNiw3ICYjNDM7MTQyOSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYXN5bmNfcmVhZF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pCiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfYXN5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCXUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsCiAJCQkJc3RydWN0IGJpbyAqcGFyZW50KQogewogCXN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxOwpAQCAtMTQ3Niw4ICYjNDM7MTQ3OSw4IEBAIHN0YXRpYyB2b2lkIHpyYW1fc3luY19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKICAqIGNoYWluZWQgSU8gd2l0aCBwYXJlbnQgSU8gaW4gc2FtZSBjb250ZXh0LCBpdCYjMzk7cyBhIGRlYWRsb2NrLiBUbyBhdm9pZCB0aGF0LAogICogdXNlIGEgd29ya2VyIHRocmVhZCBjb250ZXh0LgogICovCi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBibGtfaWR4KQomIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCkKIHsKIAlzdHJ1Y3QgenJhbV9yYl9yZXEgcmVxOwogCkBAIC0xNDk2LDggJiM0MzsxNDk5LDkgQEAgc3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LAogCXJldHVybiBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCwgc3RydWN0IGJpbyAqcGFyZW50KQomIzQzO3N0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LAomIzQzOwkJCSAgc3RydWN0IGJpbyAqcGFyZW50KQogewogCWF0b21pYzY0X2luYygmYW1wO3pyYW0tJmd0O3N0YXRzLmJkX3JlYWRzKTsKIAlpZiAoIXBhcmVudCkgewpAQCAtMTUwOSw4ICYjNDM7MTUxMyw5IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsCiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2JkZXYoc3RydWN0IHpyYW0gKnpyYW0pIHt9Owotc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCwKLQkJCSAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpCiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsCiYjNDM7CQkJICBzdHJ1Y3QgYmlvICpwYXJlbnQpCiB7CiAJcmV0dXJuIC1FSU87CiB9CkBAIC0xNTM4LDcgJiM0MzsxNTQzLDggQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyICprYnVmOwotCXNzaXplX3QgaW5kZXgsIHdyaXR0ZW4gPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGluZGV4OwomIzQzOwlzc2l6ZV90IHdyaXR0ZW4gPSAwOwogCXN0cnVjdCB6cmFtICp6cmFtID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLSZndDtkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCkBAIC0xNTYwLDcgJiM0MzsxNTY2LDcgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCWdvdG8gbmV4dDsKIAogCQljb3BpZWQgPSBzbnByaW50ZihrYnVmICYjNDM7IHdyaXR0ZW4sIGNvdW50LAotCQkJJiMzNDslMTJ6ZCAlMTJ1LiUwNmQgJWMlYyVjJWMlYyVjXG4mIzM0OywKJiM0MzsJCQkmIzM0OyUxMmx1ICUxMnUuJTA2ZCAlYyVjJWMlYyVjJWNcbiYjMzQ7LAogCQkJaW5kZXgsIHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUsIDAsCiAJCQl0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSA/ICYjMzk7cyYjMzk7IDogJiMzOTsuJiMzOTssCiAJCQl0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9XQikgPyAmIzM5O3cmIzM5OyA6ICYjMzk7LiYjMzk7LApAQCAtMTk2Nyw4ICYjNDM7MTk3Myw4IEBAIHN0YXRpYyBzc2l6ZV90IGRlYnVnX3N0YXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpCiB7Ci0Jc2l6ZV90IG51bV9wYWdlcyA9IGRpc2tzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0Jc2l6ZV90IGluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IGRpc2tzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAlpZiAoIXpyYW0tJmd0O3RhYmxlKQogCQlyZXR1cm47CkBAIC0xOTg1LDcgJiM0MzsxOTkxLDcgQEAgc3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSkKIAogc3RhdGljIGJvb2wgenJhbV9tZXRhX2FsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpCiB7Ci0Jc2l6ZV90IG51bV9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7CiAKIAludW1fcGFnZXMgPSBkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXpyYW0tJmd0O3RhYmxlID0gdnphbGxvYyhhcnJheV9zaXplKG51bV9wYWdlcywgc2l6ZW9mKCp6cmFtLSZndDt0YWJsZSkpKTsKQEAgLTIwMDgsNyAmIzQzOzIwMTQsNyBAQCBzdGF0aWMgYm9vbCB6cmFtX21ldGFfYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCkBAIC0yMDYyLDcgJiM0MzsyMDY4LDcgQEAgc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpCiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgdTMyIGluZGV4KQomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl2b2lkICptZW07CiAKQEAgLTIwNzMsNyAmIzQzOzIwNzksNyBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgdTMyIGluZGV4KQomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl2b2lkICpzcmMsICpkc3Q7CkBAIC0yMDg4LDcgJiM0MzsyMDk0LDggQEAgc3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQomIzQzO3N0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKQEAgLTIxMTMsNyAmIzQzOzIxMjAsOCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogfQogCiAjaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0sKLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiAJc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwpAQCAtMjE0NSw3ICYjNDM7MjE1Myw4IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuCiAgKiBDb3JyZXNwb25kaW5nIFpSQU0gc2xvdCBzaG91bGQgYmUgbG9ja2VkLgogICovCi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlpZiAodGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHwKIAkgICAgIWdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCkpCkBAIC0yMTU3LDggJiM0MzsyMTY2LDggQEAgc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQogCQlyZXR1cm4gcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTsKIH0KIAotc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCwKLQkJCSAgc3RydWN0IGJpbyAqcGFyZW50KQomIzQzO3N0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgc3RydWN0IGJpbyAqcGFyZW50KQogewogCWludCByZXQ7CiAKQEAgLTIxODAsNyAmIzQzOzIxODksNyBAQCBzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LAogCiAJLyogU2hvdWxkIE5FVkVSIGhhcHBlbi4gUmV0dXJuIGJpbyBlcnJvciBpZiBpdCBkb2VzLiAqLwogCWlmIChXQVJOX09OKHJldCAmbHQ7IDApKQotCQlwcl9lcnIoJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSV1XG4mIzM0OywgcmV0LCBpbmRleCk7CiYjNDM7CQlwcl9lcnIoJiMzNDtEZWNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkLCBwYWdlPSVsdVxuJiMzNDssIHJldCwgaW5kZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxOTAsNyAmIzQzOzIxOTksNyBAQCBzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LAogICogYWx3YXlzIGV4cGVjdHMgYSBmdWxsIHBhZ2UgZm9yIHRoZSBvdXRwdXQuCiAgKi8KIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWRfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCi0JCQkJICB1MzIgaW5kZXgsIGludCBvZmZzZXQpCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8pOwogCWludCByZXQ7CkBAIC0yMjA1LDcgJiM0MzsyMjE0LDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZF9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKIH0KIAogc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCi0JCQkgIHUzMiBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKQomIzQzOwkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKQogewogCWlmIChpc19wYXJ0aWFsX2lvKGJ2ZWMpKQogCQlyZXR1cm4genJhbV9idmVjX3JlYWRfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTsKQEAgLTIyMTMsNyAmIzQzOzIyMjIsNyBAQCBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKIH0KIAogc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsCi0JCQkJICB1MzIgaW5kZXgpCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzbG90X2xvY2soenJhbSwgaW5kZXgpOwogCXNsb3RfZnJlZSh6cmFtLCBpbmRleCk7CkBAIC0yMjI4LDcgJiM0MzsyMjM3LDcgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsCiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgICB1MzIgaW5kZXgpCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl2b2lkICpzcmM7CkBAIC0yMjY4LDcgJiM0MzsyMjc3LDggQEAgc3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiYjNDM7c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CkBAIC0yMzM1LDcgJiM0MzsyMzQ1LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpCiAgKiBUaGlzIGlzIGEgcGFydGlhbCBJTy4gUmVhZCB0aGUgZnVsbCBwYWdlIGJlZm9yZSB3cml0aW5nIHRoZSBjaGFuZ2VzLgogICovCiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywKLQkJCQkgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTsKIAlpbnQgcmV0OwpAQCAtMjM1Myw3ICYjNDM7MjM2Myw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLAogfQogCiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCi0JCQkgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpCiYjNDM7CQkJICAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldCkKIHsKIAlpZiAoaXNfcGFydGlhbF9pbyhidmVjKSkKIAkJcmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpOwpAQCAtMjQyMSw4ICYjNDM7MjQzMSw5IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbywKICAqCiAgKiBDb3JyZXNwb25kaW5nIFpSQU0gc2xvdCBzaG91bGQgYmUgbG9ja2VkLgogICovCi1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCSAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pCiYjNDM7c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsCiYjNDM7CQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHU2NCAqbnVtX3JlY29tcF9wYWdlcywKJiM0MzsJCQkgICB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbykKIHsKIAlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlX29sZDsKQEAgLTI2NzQsNyAmIzQzOzI2ODUsNyBAQCBzdGF0aWMgc3NpemVfdCByZWNvbXByZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIHN0YXRpYyB2b2lkIHpyYW1fYmlvX2Rpc2NhcmQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzaXplX3QgbiA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplOwotCXUzMiBpbmRleCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgJmd0OyZndDsgU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgJmd0OyZndDsgU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKIAl1MzIgb2Zmc2V0ID0gKGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgJmFtcDsgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgJmx0OyZsdDsKIAkJCVNFQ1RPUl9TSElGVDsKIApAQCAtMjcxNSw3ICYjNDM7MjcyNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKIAlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIgPSBiaW8tJmd0O2JpX2l0ZXI7CiAKIAlkbyB7Ci0JCXUzMiBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yICZndDsmZ3Q7IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgJmd0OyZndDsgU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKIAkJdTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciAmYW1wOyAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSAmbHQ7Jmx0OwogCQkJCVNFQ1RPUl9TSElGVDsKIAkJc3RydWN0IGJpb192ZWMgYnYgPSBiaW9faXRlcl9pb3ZlYyhiaW8sIGl0ZXIpOwpAQCAtMjc0Niw3ICYjNDM7Mjc1Nyw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pCiAJc3RydWN0IGJ2ZWNfaXRlciBpdGVyID0gYmlvLSZndDtiaV9pdGVyOwogCiAJZG8gewotCQl1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciAmZ3Q7Jmd0OyBTRUNUT1JTX1BFUl9QQUdFX1NISUZUOwomIzQzOwkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yICZndDsmZ3Q7IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7CiAJCXUzMiBvZmZzZXQgPSAoaXRlci5iaV9zZWN0b3IgJmFtcDsgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgJmx0OyZsdDsKIAkJCQlTRUNUT1JfU0hJRlQ7CiAJCXN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTsKQEAgLTI4NjAsNiAmIzQzOzI4NzEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSkKIHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwogCXU2NCBkaXNrc2l6ZTsKIAlzdHJ1Y3QgemNvbXAgKmNvbXA7CiAJc3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpOwpAQCAtMjg3Nyw2ICYjNDM7Mjg4OSwxMSBAQCBzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCX0KIAogCWRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7CiYjNDM7CW51bV9wYWdlcyA9IGRpc2tzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CS8qIFNsb3RzIGFyZSBhZGRyZXNzZWQgYnkgYW4gdW5zaWduZWQgbG9uZyBpbmRleCAqLwomIzQzOwlpZiAoIW51bV9wYWdlcyB8fCAoKHU2NCludW1fcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCkgIT0gZGlza3NpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBacmFtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYGluZGV4YCB0eXBlIGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIGluIHRoZSBjb2RlLCB3aGljaCBpcyBhIGZhaXJseSBzaWduaWZpY2FudCBjaGFuZ2UuIEFsb25nc2lkZSB0aGlzIGNoYW5nZSBpcyBhIG5ldyBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKVGhlIG5ldyBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgOgpgYGBjCglkaXNrc2l6ZSA9IFBBR0VfQUxJR04oZGlza3NpemUpOwomIzQzOwludW1fcGFnZXMgPSBkaXNrc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkvKiBTbG90cyBhcmUgYWRkcmVzc2VkIGJ5IGFuIHVuc2lnbmVkIGxvbmcgaW5kZXggKi8KJiM0MzsJaWYgKCFudW1fcGFnZXMgfHwgKCh1NjQpbnVtX3BhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQpICE9IGRpc2tzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CmBgYApUaGlzIGFkZGl0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGBkaXNrc2l6ZWAgZnJvbSBleGNlZWRpbmcgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBgdW5zaWduZWQgbG9uZ2AgY2FuIHJlcHJlc2VudCB3aGVuIHNoaWZ0ZWQgYnkgYFBBR0VfU0hJRlRgLCBhcyB3ZWxsIGFzIHByZXZlbnRpbmcgYSBgZGlza3NpemVgIG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCBhbiBvdmVyZmxvdyBzb21ld2hlcmUuCgpXYWl0LCBvbiAzMi1iaXQgc3lzdGVtcywgYHVuc2lnbmVkIGxvbmdgIGlzIDMyIGJpdHMsIHJpZ2h0PyBTbyB0aGUgc2l6ZSBsaW1pdCBpcyA0R0IgKDJeMzIpLCBhbmQgb24gNjQtYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCBpcyA2NCBiaXRzLCBtZWFuaW5nIHRoZSBzaXplIGxpbWl0IGlzIHRoZW9yZXRpY2FsbHkgbXVjaCBsYXJnZXIsIHJpZ2h0PyBUaHVzLCBpZiBgZGlza3NpemVgIGlzIGxhcmdlciB0aGFuIGAweGZmZmZmZmZmICZsdDsmbHQ7IFBBR0VfU0hJRlRgLCB3aGljaCBpcyAxNlRCLCBpdCB3aWxsIG92ZXJmbG93IG9uIDMyIGJpdCBzeXN0ZW1zLgoKSXQgc2VlbXMgbGlrZSB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgYGluZGV4YCB3YXMgYSBgdTMyYCBidXQgdGhlIGBkaXNrc2l6ZWAgY291bGQgYmUgbGFyZ2VyIHRoYW4gYHUzMiAmbHQ7Jmx0OyBQQUdFX1NISUZUYCBvbiA2NC1iaXQgc3lzdGVtcy4gT3IgcGVyaGFwcywgdGhpcyBpcyBhIGZpeCBmb3IgMzIgYml0IHN5c3RlbXMuCgpOb3csIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGUgY2hhbmdlIHRvIGB1bnNpZ25lZCBsb25nYCBlZmZlY3RpdmVseSBtYWtlcyBgaW5kZXhgIDY0IGJpdHMsIGFsbG93aW5nIGZvciB6cmFtIGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiwgd2hpY2ggaXMgYDB4ZmZmZmZmZmYgKiA0MDk2YC4gSG93ZXZlciwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCBpcyBzdGlsbCAzMiBiaXRzLCBidXQgdGhlIGNoZWNrIGVuc3VyZXMgdGhhdCBgZGlza3NpemVgIGRvZXNuJiMzOTt0IGV4Y2VlZCAxNlRCLiBFc3NlbnRpYWxseSwgaXQgbm9ybWFsaXplcyB0aGlzIGJlaGF2aW9yIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgoKT2theSwgaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gWWVzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8genJhbSwgd2hpY2ggbWVhbnMgaXQgaXMgYW4gaW1wb3J0YW50IGNoYW5nZSBmb3IgZnV6emluZy4gWnJhbSBpcyBjb25maWd1cmVkIHZpYSBzeXNmcy4gKkNhbiogc3l6a2FsbGVyIGZ1enogenJhbSBzeXNmcz8gWWVzLCBJJiMzOTttIHByZXR0eSBzdXJlIHN5emthbGxlciBoYXMgZGVzY3JpcHRpb25zIGZvciBzeXNmcywgaW5jbHVkaW5nIHpyYW0uIExldCBtZSBjaGVjayB0aGUgY29uZmlnLiBZZXMsIGl0JiMzOTtzIGBDT05GSUdfWlJBTWAuIEkgc2hvdWxkIGNoZWNrIGBkaXNrc2l6ZV9zdG9yZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlza3NpemVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NTQ9c3RhdGljIHZvaWQgenJhbV9yZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg3MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4NzE6c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NzItXHRcdFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxMjg9c3RhdGljIGludCB6cmFtX3JlbW92ZShzdHJ1Y3QgenJhbSAqenJhbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY0LVx0LypcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMxNjU6XHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY2LVx0ICogYW5kIGRlbF9nZW5kaXNrKCksIHNvIHJ1biB0aGUgbGFzdCByZXNldCB0byBhdm9pZCBsZWFraW5nXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTY3Olx0ICogYW55dGhpbmcgYWxsb2NhdGVkIHdpdGggZGlza3NpemVfc3RvcmUoKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2OC1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzE4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGl2aW5nIGludG8gdGhlIFpyYW0gQ29kZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB6cmFtX2Rydi5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGRyaXZlciBmb3IgenJhbS4gTXkgZmlyc3QgbW92ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgenJhbS4gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIGFyZSBiZWluZyBhbHRlcmVkIGhlcmU/IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1c3QgYmxpbmRseSBhcHBseSBhIHBhdGNoIHRvIHRoZSBkcml2ZXIgaXRzZWxmIHdpdGhvdXQga25vd2luZyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgenJhbSBzdWJzeXN0ZW0gYW5kIHdoYXQgdGhlICppbnRlbmRlZCogbW9kaWZpY2F0aW9uIGlzLiBUaW1lIHRvIHRyYWNlIHRoZSBjb25maWcgb3B0aW9ucywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMgdG8gZ2V0IGEgZmlybSBncmFzcC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGNvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8genJhbSBhbmQgdGhlbiB0cmFjZSB0aGlzIGRvd24gdG8gdGhpcyBzb3VyY2UgZmlsZSwgdW5kZXJzdGFuZGluZyB3aGF0IHZhbHVlcyBtaWdodCBiZSBzZXQgdG8gY2hhbmdlIHRoaXMgcGFydCBvZiB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWnJhbSBQYXRjaCBmb3IgTGFyZ2UgRGV2aWNlIFN1cHBvcnQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50OiBpdCYjMzk7cyBjaGFuZ2luZyBgdTMyIGluZGV4YCB0byBgdW5zaWduZWQgbG9uZyBpbmRleGAgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UsIGFuZCBpdCBpbmNsdWRlcyBhIG5ldyBjaGVjayB3aXRoaW4gYGRpc2tzaXplX3N0b3JlYC4gVGhlIGltbWVkaWF0ZSBpbXBsaWNhdGlvbiBpcyBjbGVhciDigJMgdGhpcyBlbmFibGVzIFpyYW0gdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIGFuZCBpdCYjMzk7cyBhbHNvIHByZXZlbnRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9uIDMyLWJpdCBzeXN0ZW1zLgoKV2FpdCBhIHNlY29uZCwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCAqaXMqIDMyLWJpdCwgcmlnaHQ/IFNvLCBgbnVtX3BhZ2VzYCBpcyBsaW1pdGVkIHRvIDMyIGJpdHMuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBJZiB0aGUgcmVxdWVzdGVkIGBkaXNrc2l6ZWAgZXhjZWVkcyB0aGUgY2FwYWNpdHkgb2YgYSAzMi1iaXQgaW50ZWdlciBzaGlmdGVkIGxlZnQgYnkgdGhlIHBhZ2Ugc2l6ZSAoYDB4ZmZmZmZmZmYgJmx0OyZsdDsgMTJgLCBvciBgMHhmZmZmZmZmZjAwMGApLCBgbnVtX3BhZ2VzYCB3aWxsIGdldCB0cnVuY2F0ZWQgZHVlIHRvIG92ZXJmbG93LiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWRkcmVzcy4gVGhlIG5ldyBjaGVjazogYCgodTY0KW51bV9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZWAsIHdpbGwgY2F0Y2ggdGhpcyB0cnVuY2F0aW9uIHNjZW5hcmlvIGFuZCByZXR1cm4gYC1FSU5WQUxgIHRvIGluZGljYXRlIGFuIGludmFsaWQgZGlzayBzaXplLgoKTGV0IG1lIGNvbmZpcm0gdGhhdCBieSB0YWtpbmcgYSBsb29rIGF0IGBkaXNrc2l6ZV9zdG9yZWAgaW4gYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYW5kIGEgY2FyZWZ1bCBleGFtaW5hdGlvbiB3aWxsIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzA6XHRcbjI4NzE6XHRzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMjg3MjpcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjI4NzM6XHR7XG4yODc0Olx0XHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbjI4NzU6XHRcdHU2NCBkaXNrc2l6ZTtcbjI4NzY6XHRcdHN0cnVjdCB6Y29tcCAqY29tcDtcbjI4Nzc6XHRcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbjI4Nzg6XHRcdGludCBlcnI7XG4yODc5Olx0XHR1MzIgcHJpbztcbjI4ODA6XHRcbjI4ODE6XHRcdGRpc2tzaXplID0gbWVtcGFyc2UoYnVmLCBOVUxMKTtcbjI4ODI6XHRcdGlmICghZGlza3NpemUpXG4yODgzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg4NDpcdFxuMjg4NTpcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnpyYW0tXHUwMDNlZGV2X2xvY2spO1xuMjg4NjpcdFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xuMjg4NzpcdFx0XHRwcl9pbmZvKFwmIzM0O0Nhbm5vdCBjaGFuZ2UgZGlza3NpemUgZm9yIGluaXRpYWxpemVkIGRldmljZVxcblwmIzM0Oyk7XG4yODg4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4yODg5Olx0XHR9XG4yODkwOlx0XG4yODkxOlx0XHRkaXNrc2l6ZSA9IFBBR0VfQUxJR04oZGlza3NpemUpO1xuMjg5MjpcdFx0bnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4yODkzOlx0XHQvKiBTbG90cyBhcmUgYWRkcmVzc2VkIGJ5IGFuIHVuc2lnbmVkIGxvbmcgaW5kZXggKi9cbjI4OTQ6XHRcdGlmICghbnVtX3BhZ2VzIHx8ICgodTY0KW51bV9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgIT0gZGlza3NpemUpXG4yODk1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg5NjpcdFxuMjg5NzpcdFx0aWYgKCF6cmFtX21ldGFfYWxsb2MoenJhbSwgZGlza3NpemUpKVxuMjg5ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4OTk6XHRcbjI5MDA6XHRcdGZvciAocHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QOyBwcmlvIFx1MDAzYyBaUkFNX01BWF9DT01QUzsgcHJpbyYjNDM7JiM0MzspIHtcbjI5MDE6XHRcdFx0aWYgKCF6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSlcbjI5MDI6XHRcdFx0XHRjb250aW51ZTtcbjI5MDM6XHRcbjI5MDQ6XHRcdFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSxcbjI5MDU6XHRcdFx0XHRcdCAgICBcdTAwMjZ6cmFtLVx1MDAzZXBhcmFtc1twcmlvXSk7XG4yOTA2Olx0XHRcdGlmIChJU19FUlIoY29tcCkpIHtcbjI5MDc6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Q2Fubm90IGluaXRpYWxpc2UgJXMgY29tcHJlc3NpbmcgYmFja2VuZFxcblwmIzM0OyxcbjI5MDg6XHRcdFx0XHQgICAgICAgenJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10pO1xuMjkwOTpcdFx0XHRcdGVyciA9IFBUUl9FUlIoY29tcCk7XG4yOTEwOlx0XHRcdFx0Z290byBvdXRfZnJlZV9jb21wcztcbjI5MTE6XHRcdFx0fVxuMjkxMjpcdFxuMjkxMzpcdFx0XHR6cmFtLVx1MDAzZWNvbXBzW3ByaW9dID0gY29tcDtcbjI5MTQ6XHRcdH1cbjI5MTU6XHRcdHpyYW0tXHUwMDNlZGlza3NpemUgPSBkaXNrc2l6ZTtcbjI5MTY6XHRcdHNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KHpyYW0tXHUwMDNlZGlzaywgenJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUKTtcbjI5MTc6XHRcbjI5MTg6XHRcdHJldHVybiBsZW47XG4yOTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNjIKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnJhbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvdmVyZmxvdyBjaGVja3MgaW4gYGRpc2tzaXplX3N0b3JlYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYnVtcGVkIGBpbmRleGAgdG8gYW4gYHVuc2lnbmVkIGxvbmdgIGluIGEgYnVuY2ggb2YgZnVuY3Rpb25zLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gZnV6eiB0aGlzIHRoaW5nIHRob3JvdWdobHkuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydC4uLgoKV2FpdCBhIHNlY29uZCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBzeXNmcywgcmlnaHQ/IEFuZCBgZGlza3NpemVfc3RvcmVgICppcyogYSBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gQmluZ28hIFRoaXMgaXMgcGVyZmVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGl0dGluZyBpdC4gVGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB0YXJnZXQgYXJlOiBgZGlza3NpemVfc3RvcmVgLCB0aGVuIGB6cmFtX21ldGFfYWxsb2NgLCBgenJhbV9tZXRhX2ZyZWVgLCBgenJhbV9yZWFkX3BhZ2VgLCBgenJhbV93cml0ZV9wYWdlYCwgYHpyYW1fYnZlY19yZWFkYCwgYW5kIGB6cmFtX2J2ZWNfd3JpdGVgLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBgZGlza3NpemVfc3RvcmVgIGlzbiYjMzk7dCBzdGF0aWMuIFllcCwgaXQgaXMuIEJ1dCwgaXQmIzM5O3MgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgc28gdGhlIGNvbXBpbGVyICpzaG91bGRuJiMzOTt0KiBpbmxpbmUgaXQgYXdheSwgaXQmIzM5O3MgcmVhY2hhYmxlLiBJIGhhdmUgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHJlYWNoYWJsZS4gVGhlIGluc3RydWN0aW9ucyBzYWlkIHNvbWV0aGluZyBhYm91dCB0aGF0Li4uCgpBaCwgcmlnaHQsIGhlcmUgaXQgaXM6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLiYjMzQ7IFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBjYXNlLiBgZGlza3NpemVfc3RvcmVgIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzICpub3QqIGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBhIHN5c2ZzIGNhbGxiYWNrLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bXmEtekEtWl0qW2EtekEtWl8wLTldJiM0MzsgW2EtekEtWl8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1OiNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7enJhbTogXCYjMzQ7IGZtdFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTYtXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MDpzdGF0aWMgREVGSU5FX0lEUih6cmFtX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgoenJhbV9pbmRleF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00My1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNTQ9c3RhdGljIGlubGluZSBib29sIHNsb3RfYWxsb2NhdGVkKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU1LXtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1NjpcdHJldHVybiBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KSB8fFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU3LVx0XHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTM1NT1zdGF0aWMgc3NpemVfdCBpbml0c3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTM2My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjM2NDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIHZhbCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zNjUtfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTM2Nz1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zNzEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozNzI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsbHVcXG5cJiMzNDssIHpyYW0tXHUwMDNlZGlza3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzczLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz01MTQ9c3RydWN0IHpyYW1fcmJfcmVxIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MjktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1MzA6I2RlZmluZSBGT1VSX0soeCkgKCh4KSAqICgxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAtIDEyKSkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01MzEtc3RhdGljIHNzaXplX3QgYmRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NTY3PXN0YXRpYyBzc2l6ZV90IGNvbXByZXNzZWRfd3JpdGViYWNrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU3Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjU3NzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHZhbCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01NzgtfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTU5Nj1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfbGltaXRfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTYwNS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjYwNjpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHZhbCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02MDctfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTYzNT1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfbGltaXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjQzLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NjQ0Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbGx1XFxuXCYjMzQ7LCB2YWwpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjQ1LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz02NjY9c3RhdGljIHNzaXplX3Qgd3JpdGViYWNrX2JhdGNoX3NpemVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjc1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Njc2Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgdmFsKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTY3Ny19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjkzPXN0YXRpYyBzc2l6ZV90IGJhY2tpbmdfZGV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTcwOS1cdGlmIChJU19FUlIocCkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo3MTA6XHRcdHJldHVybiBQVFJfRVJSKHApO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNzExLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0ODI9c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNDk4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQ5OTpcdHJldHVybiBkZWNvbXByZXNzX2JkZXZfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTAwLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNTAyPXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXYoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktXHRcdFx0cmV0dXJuIC1FSU87XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTEwOlx0XHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTExLVx0fVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUxMjpcdHJldHVybiByZWFkX2Zyb21fYmRldl9hc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCwgcGFyZW50KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MTMtfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxNTY9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTYwLVx0ICAgICFnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE2MTpcdFx0cmV0dXJuIHJlYWRfc2FtZV9maWxsZWRfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTYyLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2My1cdGlmICghdGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSFVHRSkpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTY0Olx0XHRyZXR1cm4gcmVhZF9jb21wcmVzc2VkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2NS1cdGVsc2VcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxNjY6XHRcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2Ny19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIxNj1zdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjE5LVx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIwOlx0XHRyZXR1cm4genJhbV9idmVjX3JlYWRfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyMjE6XHRyZXR1cm4genJhbV9yZWFkX3BhZ2UoenJhbSwgYnZlYy1cdTAwM2Vidl9wYWdlLCBpbmRleCwgYmlvKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMjItfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMzk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUzLVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI1NDpcdFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1NS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgwPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjk0LVx0aWYgKHNhbWVfZmlsbGVkKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI5NTpcdFx0cmV0dXJuIHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgZWxlbWVudCwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI5Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEwLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTE6XHRcdHJldHVybiB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTItXHR9XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxOC1cdFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE5Olx0XHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzIwLVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNjU9c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNjgtXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNjk6XHRcdHJldHVybiB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNzA6XHRyZXR1cm4genJhbV93cml0ZV9wYWdlKHpyYW0sIGJ2ZWMtXHUwMDNlYnZfcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3MS19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzND1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTIzLVx0XHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MjQ6XHRcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlX25ldyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTI1LVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4NTpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW9fc3RhdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg2OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbV9zdGF0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODc6c3RhdGljIERFVklDRV9BVFRSX1JPKGRlYnVnX3N0YXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4ODpzdGF0aWMgREVWSUNFX0FUVFJfV08oY29tcGFjdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg5OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkaXNrc2l6ZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkwOnN0YXRpYyBERVZJQ0VfQVRUUl9STyhpbml0c3RhdGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MTpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVzZXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MjpzdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX2xpbWl0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTM6c3RhdGljIERFVklDRV9BVFRSX1dPKG1lbV91c2VkX21heCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk0OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhpZGxlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTU6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5OTYtI2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5NzpzdGF0aWMgREVWSUNFX0FUVFJfUk8oYmRfc3RhdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk4OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhiYWNraW5nX2Rldik7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyh3cml0ZWJhY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwMDpzdGF0aWMgREVWSUNFX0FUVFJfUlcod3JpdGViYWNrX2xpbWl0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDE6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdF9lbmFibGUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwMjpzdGF0aWMgREVWSUNFX0FUVFJfUlcod3JpdGViYWNrX2JhdGNoX3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwMzpzdGF0aWMgREVWSUNFX0FUVFJfUlcoY29tcHJlc3NlZF93cml0ZWJhY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNC0jZW5kaWZcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMDUtI2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDY6c3RhdGljIERFVklDRV9BVFRSX1JXKHJlY29tcF9hbGdvcml0aG0pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNzpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb21wcmVzcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA4LSNlbmRpZlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwOTpzdGF0aWMgREVWSUNFX0FUVFJfV08oYWxnb3JpdGhtX3BhcmFtcyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxMjg9c3RhdGljIGludCB6cmFtX3JlbW92ZShzdHJ1Y3QgenJhbSAqenJhbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY1LVx0ICogZGlza3NpemVfc3RvcmUoKSBtYXkgYmUgY2FsbGVkIGluIGJldHdlZW4genJhbV9yZXNldF9kZXZpY2UoKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2NjpcdCAqIGFuZCBkZWxfZ2VuZGlzaygpLCBzbyBydW4gdGhlIGxhc3QgcmVzZXQgdG8gYXZvaWQgbGVha2luZ1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2Ny1cdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMTg0PXN0YXRpYyBzc2l6ZV90IGhvdF9hZGRfc2hvdyhjb25zdCBzdHJ1Y3QgY2xhc3MgKmNsYXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxOTUtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTk2Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxOTctfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMyMDI9c3RhdGljIHNzaXplX3QgaG90X3JlbW92ZV9zdG9yZShjb25zdCBzdHJ1Y3QgY2xhc3MgKmNsYXNzLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMyMzAtfVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzIzMTpzdGF0aWMgQ0xBU1NfQVRUUl9XTyhob3RfcmVtb3ZlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMyMzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODY1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aXRoaW4gdGhlIFpSQU0gY29kZS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHdlIGhhbmRsZSBkaXNrIHNpemUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgd2UgaW5kZXggZGF0YS4gU3BlY2lmaWNhbGx5LCB0aGUgYGRpc2tzaXplX3N0b3JlYCBpcyBnZXR0aW5nIHR3ZWFrZWQsIGFuZCB0aGUgYGluZGV4YCB2YXJpYWJsZSBpcyBiZWluZyBwcm9tb3RlZCB0byBhbiBgdW5zaWduZWQgbG9uZ2AgaW4gYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zLiBUaGlzIGlzIGltbWVkaWF0ZWx5IG1ha2luZyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgYWRkcmVzc2luZyBhbmQgb3ZlcmFsbCBjYXBhY2l0eSBsaW1pdHMgd2l0aGluIHRoZSBaUkFNIGRldmljZS4KCkkmIzM5O20gc2VlaW5nIHRoYXQgZnVuY3Rpb25zIGxpa2UgYHpyYW1fYnZlY19yZWFkYCwgYHpyYW1fYnZlY193cml0ZWAsIGB6cmFtX3JlYWRfcGFnZWAsIGB6cmFtX3dyaXRlX3BhZ2VgLCBgenJhbV9iaW9fcmVhZGAsIGB6cmFtX2Jpb193cml0ZWAsIGFuZCBgenJhbV9iaW9fZGlzY2FyZGAgYXJlIGVpdGhlciBkaXJlY3RseSBtb2RpZmllZCBvciBhcmUgdXRpbGl6aW5nIHRoaXMgbmV3IGBpbmRleGAgdHlwZS4gVGhhdCYjMzk7cyBhIHByZXR0eSBicm9hZCBzY29wZSwgd2hpY2ggbWVhbnMgdGhpcyBjaGFuZ2UgaXMgZm91bmRhdGlvbmFsIHRvIGhvdyBaUkFNIGludGVyYWN0cyB3aXRoIGJvdGggdGhlIGJsb2NrIGRldmljZSBhbmQgcGFnZS1sZXZlbCBvcGVyYXRpb25zLgoKTm93LCB0aG9zZSBgenJhbV9iaW9fLi4uYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgcmlnaHQ/IFllcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgYXJlIGNhbGxlZC4gQWgsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBBbmQgd2FpdCBhIG1pbnV0ZS4uLiBgenJhbV9zdWJtaXRfYmlvYCBpcyAqKm5vdCoqIHN0YXRpYy4gSXQmIzM5O3MgdGhlIGBzdWJtaXRfYmlvYCBjYWxsYmFjayBmb3IgdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBTbywgYW55IGNoYW5nZSB0aGVyZSBpcyBwcmV0dHkgY3JpdGljYWwuIFRoaXMgaXMgbWFraW5nIG1lIHRoaW5rIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgd2hhdCBoYXBwZW5zIGF0IHRoZSBiaW8gc3VibWlzc2lvbiBsZXZlbCBpbiByZWxhdGlvbiB0byB0aGVzZSBpbmRleCBjaGFuZ2VzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBwb3RlbnRpYWwgaW1wYWN0IHRoaXMgaGFzIG9uIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV9zdWJtaXRfYmlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjc1ND1zdGF0aWMgdm9pZCB6cmFtX2Jpb193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODYtICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNzg3OnN0YXRpYyB2b2lkIHpyYW1fc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNzg4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yOTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTc5LVx0Lm9wZW4gPSB6cmFtX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTgwOlx0LnN1Ym1pdF9iaW8gPSB6cmFtX3N1Ym1pdF9iaW8sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTgxLVx0LnN3YXBfc2xvdF9mcmVlX25vdGlmeSA9IHpyYW1fc2xvdF9mcmVlX25vdGlmeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODgKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHJlZ2FyZGluZyB0aGUgYHpyYW1gIGRyaXZlci4uLgoKKipacmFtIERyaXZlciBFbnRyeSBQb2ludCBBbmFseXNpcyoqCgpSaWdodCwgYHpyYW1fc3VibWl0X2Jpb2AgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgZmlsZSwgYSBrZXkgaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBpc24mIzM5O3QgZGlyZWN0bHkgZXhwb3NlZCBleHRlcm5hbGx5LiBUaGVyZWZvcmUsIGl0IHdvbiYjMzk7dCBiZSBjYWxsZWQgZGlyZWN0bHkuIE9rYXksIGdvb2QuCgpTbywgaWYgYHpyYW1fc3VibWl0X2Jpb2AgaXMgdGhlIHdvcmtob3JzZSBpbnRlcm5hbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGV4dGVybmFsbHkgZXhwb3NlZCBlbnRyeSBwb2ludHMgYW5kIGNvbnNpZGVyIGhvdyB0aGUgZGF0YSBmbG93cyBhcm91bmQgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbi4gTGV0IG1lIGpvdCBkb3duIHRoZSBwb3RlbnRpYWwgY2FuZGlkYXRlczogYGRpc2tzaXplX3N0b3JlYCwgYHpyYW1fbWV0YV9hbGxvY2AsIGFuZCBgenJhbV9tZXRhX2ZyZWVgLiBUaG9zZSAqZmVlbCogbGlrZSB0aGUgcGxhY2VzIHdoZXJlIGludGVyYWN0aW9uIHdpdGggdGhlIGRyaXZlciB3b3VsZCB0cnVseSBvcmlnaW5hdGUuIGBkaXNrc2l6ZV9zdG9yZWAsIHRoZSBzaXplIG9mIHRoZSBkaXNrLCB0aGVuIHRoZSBhbGxvY2F0aW9uLCB0aGVuIGZyZWVpbmcsIHNlZW1zIGxpa2UgYSB2YWxpZCwgYW5kIHR5cGljYWwsIGxpZmVjeWNsZS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGFyZSAqYW55KiBmdW5jdGlvbnMgaW4gYHpyYW1fZHJ2LmNgICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYz8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gYXNjZXJ0YWluIGF0IHRoaXMgcG9pbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB0cmFjaW5nIHRoZSBwYXRoIG9mIGNvbW1hbmQgZmxvdy4gSWYgdGhlcmUgYXJlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IGNvdWxkIHJlYWxseSBpbXBhY3QgdGhlIGVudGlyZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfMC05XSYjNDM7IFthLXpBLVpfMC05XSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MDpzdGF0aWMgREVGSU5FX0lEUih6cmFtX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQyOnN0YXRpYyBERUZJTkVfTVVURVgoenJhbV9pbmRleF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00My1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yOTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4NC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODU6c3RhdGljIERFVklDRV9BVFRSX1JPKGlvX3N0YXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4NjpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW1fc3RhdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWJ1Z19zdGF0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5ODg6c3RhdGljIERFVklDRV9BVFRSX1dPKGNvbXBhY3QpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4OTpzdGF0aWMgREVWSUNFX0FUVFJfUlcoZGlza3NpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MDpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW5pdHN0YXRlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTE6c3RhdGljIERFVklDRV9BVFRSX1dPKHJlc2V0KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTI6c3RhdGljIERFVklDRV9BVFRSX1dPKG1lbV9saW1pdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkzOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhtZW1fdXNlZF9tYXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5NDpzdGF0aWMgREVWSUNFX0FUVFJfV08oaWRsZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk1OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk2LSNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTc6c3RhdGljIERFVklDRV9BVFRSX1JPKGJkX3N0YXQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5ODpzdGF0aWMgREVWSUNFX0FUVFJfUlcoYmFja2luZ19kZXYpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5OTpzdGF0aWMgREVWSUNFX0FUVFJfV08od3JpdGViYWNrKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDA6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAxOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyh3cml0ZWJhY2tfbGltaXRfZW5hYmxlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19iYXRjaF9zaXplKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDM6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXByZXNzZWRfd3JpdGViYWNrKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMDQtI2VuZGlmXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA1LSNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA2OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhyZWNvbXBfYWxnb3JpdGhtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDc6c3RhdGljIERFVklDRV9BVFRSX1dPKHJlY29tcHJlc3MpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwOC0jZW5kaWZcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDk6c3RhdGljIERFVklDRV9BVFRSX1dPKGFsZ29yaXRobV9wYXJhbXMpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAxMC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMjAyPXN0YXRpYyBzc2l6ZV90IGhvdF9yZW1vdmVfc3RvcmUoY29uc3Qgc3RydWN0IGNsYXNzICpjbGFzcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMwLX1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMyMzE6c3RhdGljIENMQVNTX0FUVFJfV08oaG90X3JlbW92ZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHpyYW1fZHJ2LmNgIGZvciBFbnRyeSBQb2ludHMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhc2lkZSBmcm9tIHRoZSBtb2R1bGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMsIGB6cmFtX2Rydi5jYCBzZWVtZWQgdG8gbGFjayBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhlbiBJIHJlbWVtYmVyZWQgYHpyYW1fc3VibWl0X2Jpb2AgYW5kIGBkaXNrc2l6ZV9zdG9yZWAuIFdhaXQsIHRob3NlIGFyZSBhY3R1YWxseSAqdGhlKiBlbnRyeSBwb2ludHMgZm9yIEkvTyBhbmQgZGV2aWNlIHNpemUgY29uZmlndXJhdGlvbiwgcmVzcGVjdGl2ZWx5LiBJIHdhcyBnb2luZyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSB3aGF0IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeS4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLgoKVGhlIGdvb2QgbmV3cyBpcywgc2luY2UgYGRpc2tzaXplX3N0b3JlYCBhbmQgYHpyYW1fc3VibWl0X2Jpb2AgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBzeXNmcyBhbmQgdGhlIGJsb2NrIGxheWVyLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIFRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBzbyB0aGV5IGZpdCB0aGUgY3JpdGVyaWEgcGVyZmVjdGx5LiBJIHdpbGwgaW5jbHVkZSB0aG9zZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2VudCB0aHJvdWdoIHRoZSBjb2RlIHRvIGNoZWNrIGlmIEkgbWlzc2VkIGFueSBvdGhlciBmdW5jdGlvbnMuIEZ1bmN0aW9ucyBzdWNoIGFzIGB6cmFtX2J2ZWNfcmVhZGAsIGB6cmFtX2J2ZWNfd3JpdGVgLCBgenJhbV9yZWFkX3BhZ2VgLCBhbmQgYHpyYW1fd3JpdGVfcGFnZWAgYXJlIGNhbGxlZCBmcm9tIGB6cmFtX2Jpb19yZWFkYCBhbmQgYHpyYW1fYmlvX3dyaXRlYCB3aGljaCBpbiB0dXJuIGFyZSBjYWxsZWQgZnJvbSBgenJhbV9zdWJtaXRfYmlvYC4gVGhleSAqbWlnaHQqIGJlIGlubGluZWQuIEJ1dCwgaXQgaXMgc2FmZSB0byBqdXN0IGluY2x1ZGUgYHpyYW1fc3VibWl0X2Jpb2AgYW5kIGBkaXNrc2l6ZV9zdG9yZWAuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBvYnZpb3VzIHRoYXQgYENPTkZJR19aUkFNYCBpcyBuZWVkZWQuIE5vdywgdGhlIHBhdGNoIG1vZGlmaWVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGxpa2UgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgYHJlYWRfZnJvbV96c3Bvb2xgLCBgenJhbV93cml0ZWJhY2tfY29tcGxldGVgLCBhbmQgbWFueSBtb3JlIHVuZGVyIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLiBBbHNvLCBgcmVjb21wcmVzc19zbG90YCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYW5kIGBaUkFNX01VTFRJX0NPTVBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlJBTV9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBaUkFNX1dSSVRFQkFDS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGBaUkFNX1dSSVRFQkFDS2Agc2V0dGluZyBhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBXaGF0IGV4YWN0bHkgcmVsaWVzIG9uIHRoaXMgZmVhdHVyZT8gSXMgaXQgYSBjb3JlIGNvbXBvbmVudCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG1vZHVsZXMsIGRyaXZlcnMsIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVwZW5kIG9uIGBaUkFNX1dSSVRFQkFDS2AgYmVpbmcgZW5hYmxlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIGxpa2VseSBhIHJpcHBsZSBlZmZlY3Q7IGNoYW5naW5nIHRoaXMgY291bGQgaW1wYWN0IHNldmVyYWwgb3RoZXIgYXJlYXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGFueSBjb2RlIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBzeW1ib2wsIHRoZW4gd29yayBvdXR3YXJkcywgdHJhY2luZyB0aGUgY2FsbCBzdGFja3MgYW5kIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwuIFRoaXMgYWxzbyB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNldHVwIGFuZCBpZiBhbnkgY2hhbmdlcyBzaG91bGQgYmUgbWFkZSB0byBvcHRpbWl6ZSB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBtYWtlIGEgbm90ZSB0byBteXNlbGYgdG8gZW5zdXJlIHRoYXQgbXkgaW5mb3JtYXRpb24gZ2F0aGVyaW5nIGlzIGNvbXBsZXRlIGJlZm9yZSBtYWtpbmcgYW55IHN1Z2dlc3Rpb25zLCB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIHNvIEkgc2hvdWxkIGJlIGNvbXByZWhlbnNpdmUgaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRkZWZhdWx0IFwmIzM0O2x6NFwmIzM0OyBpZiBaUkFNX0RFRl9DT01QX0xaNFxuIDEwMTpcdFx0ZGVmYXVsdCBcJiMzNDtsejRoY1wmIzM0OyBpZiBaUkFNX0RFRl9DT01QX0xaNEhDXG4gMTAyOlx0XHRkZWZhdWx0IFwmIzM0O3pzdGRcJiMzNDsgaWYgWlJBTV9ERUZfQ09NUF9aU1REXG4gMTAzOlx0XHRkZWZhdWx0IFwmIzM0O2RlZmxhdGVcJiMzNDsgaWYgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG4gMTA0Olx0XHRkZWZhdWx0IFwmIzM0Ozg0MlwmIzM0OyBpZiBaUkFNX0RFRl9DT01QXzg0MlxuIDEwNTpcdFx0ZGVmYXVsdCBcJiMzNDt1bnNldC12YWx1ZVwmIzM0O1xuIDEwNjpcdFxuIDEwNzpcdGNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuIDEwODpcdCAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4gMTA5Olx0ICAgICAgIGRlcGVuZHMgb24gWlJBTVxuIDExMDpcdCAgICAgICBoZWxwXG4gMTExOlx0XHQgVGhpcyBsZXRzIHpyYW0gZW50cmllcyAoaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlcykgYmUgd3JpdHRlblxuIDExMjpcdFx0IGJhY2sgdG8gYSBiYWNraW5nIGRldmljZSwgaGVscGluZyBzYXZlIG1lbW9yeS5cbiAxMTM6XHRcdCBGb3IgdGhpcyBmZWF0dXJlLCBhZG1pbiBzaG91bGQgc2V0IHVwIGJhY2tpbmcgZGV2aWNlIHZpYVxuIDExNDpcdFx0IC9zeXMvYmxvY2svenJhbVgvYmFja2luZ19kZXYuXG4gMTE1Olx0XG4gMTE2Olx0XHQgV2l0aCAvc3lzL2Jsb2NrL3pyYW1YL3tpZGxlLHdyaXRlYmFja30sIGFwcGxpY2F0aW9uIGNvdWxkIGFza1xuIDExNzpcdFx0IGlkbGUgcGFnZSYjMzk7cyB3cml0ZWJhY2sgdG8gdGhlIGJhY2tpbmcgZGV2aWNlIHRvIHNhdmUgaW4gbWVtb3J5LlxuIDExODpcdFxuIDExOTpcdFx0IFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDEyMDpcdFxuIDEyMTpcdGNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuIDEyMjpcdFx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbiAxMjM6XHRcdGRlcGVuZHMgb24gWlJBTVxuIDEyNDpcdFx0aGVscFxuIDEyNTpcdFx0ICBXaXRoIHRoaXMgZmVhdHVyZSB6cmFtIHRyYWNrcyBhY2Nlc3MgdGltZSBvZiBldmVyeSBzdG9yZWRcbiAxMjY6XHRcdCAgZW50cnkgKHBhZ2UpLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBtb3JlIGZpbmUgZ3JhaW5lZCBJRExFXG4gMTI3Olx0XHQgIHBhZ2VzIHdyaXRlYmFjay5cbiAxMjg6XHRcbiAxMjk6XHRjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbiAxMzA6XHRcdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbiAxMzE6XHRcdGRlcGVuZHMgb24gWlJBTSBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbiAxMzI6XHRcdHNlbGVjdCBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuIDEzMzpcdFx0aGVscFxuIDEzNDpcdFx0ICBXaXRoIHRoaXMgZmVhdHVyZSwgYWRtaW4gY2FuIHRyYWNrIHRoZSBzdGF0ZSBvZiBhbGxvY2F0ZWQgYmxvY2tzXG4gMTM1Olx0XHQgIG9mIHpSQU0uIEFkbWluIGNvdWxkIHNlZSB0aGUgaW5mb3JtYXRpb24gdmlhXG4gMTM2Olx0XHQgIC9zeXMva2VybmVsL2RlYnVnL3pyYW0venJhbVgvYmxvY2tfc3RhdGUuXG4gMTM3Olx0XG4gMTM4Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDEzOTpcdFxuIDE0MDpcdGNvbmZpZyBaUkFNX01VTFRJX0NPTVBcbiAxNDE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcJiMzNDtcbiAxNDI6XHRcdGRlcGVuZHMgb24gWlJBTVxuIDE0MzpcdFx0aGVscFxuIDE0NDpcdFx0ICBUaGlzIHdpbGwgZW5hYmxlIG11bHRpLWNvbXByZXNzaW9uIHN0cmVhbXMsIHNvIHRoYXQgWlJBTSBjYW5cbiAxNDU6XHRcdCAgcmUtY29tcHJlc3MgcGFnZXMgdXNpbmcgYSBwb3RlbnRpYWxseSBzbG93ZXIgYnV0IG1vcmUgZWZmZWN0aXZlXG4gMTQ2Olx0XHQgIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gTm90ZSwgdGhhdCBJRExFIHBhZ2UgcmVjb21wcmVzc2lvblxuIDE0NzpcdFx0ICByZXF1aXJlcyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyODkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFpSQU0gQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBaUkFNIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuIEhtbSwgd2FpdCwgaXQgbG9va3MgbGlrZSBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgIGlzIGFsc28gYmVpbmcgdG91Y2hlZCBieSB0aGlzIHBhdGNoPyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIGByZWFkX2Jsb2NrX3N0YXRlYC4gTG9va2luZyBhdCB0aGUgY29kZSBkaWZmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBgaW5kZXhgIHZhcmlhYmxlIHR5cGUsIGNoYW5naW5nIGl0IGZyb20gYHNzaXplX3RgIHRvIGB1bnNpZ25lZCBsb25nYC4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYSBmb3JtYXQgc3RyaW5nIGNoYW5nZSBpbiBgc25wcmludGZgIGZyb20gYCV6ZGAgdG8gYCVsdWAuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsYXJnZXIgdmFsdWVzIHBvdGVudGlhbGx5LiBUaGUgYHJlYWRfYmxvY2tfc3RhdGVgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBibG9jayB0byB0aGUgdXNlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hhbmdlIHdhcyBuZWVkZWQuIFRoZSBwdXJwb3NlIGlzIHRvIGNoZWNrIHRoZSBhY3Rpdml0eSBzdGF0ZSBhbmQgd2hldGhlciB3cml0ZWJhY2sgaXMgZW5hYmxlZCBmb3IgZWFjaCBibG9jay4KClNpbmNlIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgYmVpbmcgbW9kaWZpZWQsIHRoYXQgY29uZmlnIG5lZWRzIHRvIGJlIGVuYWJsZWQgdG9vLiBJdCBsb29rcyBsaWtlIGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgaXMgc2VsZWN0ZWQgYnkgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBpbXBvcnRhbnQgc3ltYm9scy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2U6IGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBhbmQgYHJlY29tcHJlc3Nfc3RvcmVgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIGB3cml0ZWJhY2tfc3RvcmVgIGFuZCBgcmVjb21wcmVzc19zdG9yZWAgYXJlIGFjdHVhbGx5IHByZXNlbnQsIEkgdGhpbmsgdGhhdCBpcyB0aGUgbmV4dCBzdGVwIHRvIHJldmlldyB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlYmFja19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUzMT1zdGF0aWMgc3NpemVfdCBiZF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy01NDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1NDc6c3RhdGljIHNzaXplX3QgY29tcHJlc3NlZF93cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTQ4LVx0XHRcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTExOTk9c3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3Jfd3JpdGViYWNrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMjM0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTIzNTpzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTIzNi1cdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQWNrbm93bGVkZ21lbnQgb2YgYHdyaXRlYmFja19zdG9yZWAqKgoKUmlnaHQsIHNvLCB0aGUgaW5pdGlhbCBwcmVtaXNlIGlzIGNsZWFyIC0gdGhlIGB3cml0ZWJhY2tfc3RvcmVgIGV4aXN0cy4gTm8gbmVlZCB0byBiZWxhYm9yIHRoZSBwb2ludC4gV2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGNvbXBvbmVudCwgb3IgZGF0YSBzdHJ1Y3R1cmUsIGlzIGluZGVlZCBwcmVzZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgc3lzdGVtIHdlJiMzOTtyZSBhbmFseXppbmcuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBnaXZlbi4gV2UmIzM5O3JlIG5vdCBkZWJhdGluZyBpdHMgZXhpc3RlbmNlOyB3ZSYjMzk7cmUgcHJvY2VlZGluZyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0JiMzOTtzIHRoZXJlIGFuZCBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIFdlIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvbXByZXNzX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzND1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTQwLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjU0MTpzdGF0aWMgc3NpemVfdCByZWNvbXByZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1NDItXHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVmVyaWZ5aW5nIEtleSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaW5kaWNhdGVkIHRoZSBwcmVzZW5jZSBvZiBgcmVjb21wcmVzc19zdG9yZWAsIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIG9mIHRoZSBgcmVhZF9ibG9ja19zdGF0ZWAgZnVuY3Rpb24uIEl0cyBjb3JyZWN0IG9wZXJhdGlvbiBpcyBjcml0aWNhbCBmb3IgZXZlcnl0aGluZyB0byB3b3JrIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrIHN0YXRlIGlzIGJlaW5nIHJlYWQgY29ycmVjdGx5LCBvdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHN0b3JlIHdpbGwganVzdCByZXR1cm4gZ2FyYmFnZS4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGFsbCB0aGUgcG9zc2libGUgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9ibG9ja19zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE1Mzc9c3RhdGljIHZvaWQgenJhbV9kZWJ1Z2ZzX2Rlc3Ryb3kodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTQxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTU0MjpzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU0My1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY196cmFtX2Jsb2NrX3N0YXRlX29wID0ge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU5OC1cdC5vcGVuID0gc2ltcGxlX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTk5Olx0LnJlYWQgPSByZWFkX2Jsb2NrX3N0YXRlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTYwMC1cdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uKioKCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgY29uZmlybXMgdGhhdCBgcmVhZF9ibG9ja19zdGF0ZWAgaXMgZGVmaW5pdGVseSBhdmFpbGFibGUuIEdvb2QsIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gYW5kIHdlIG5lZWQgdG8gaGF2ZSB0aGF0IHJlYWR5LgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIHRvbyBmYXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWV0YWRhdGEgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB3b3JrIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gYHpyYW1fbWV0YV9hbGxvY2AgYW5kIGB6cmFtX21ldGFfZnJlZWAuIEkgd2lsbCB3YW50IHRvIGJlIGNvbWZvcnRhYmxlIHdpdGggdGhpcyBjb2RlLCBhbmQga25vdyB0aGF0IGl0IGlzIG5vdCBidWdneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enJhbV9tZXRhX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTk3ND1zdGF0aWMgdm9pZCB6cmFtX21ldGFfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE5OTEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxOTkyOnN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTk5My17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg3MT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4OTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODk3Olx0aWYgKCF6cmFtX21ldGFfYWxsb2MoenJhbSwgZGlza3NpemUpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg5OC1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzAzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1czogSW5saW5pbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYCBhcmUgaW5kZWVkIHByZXNlbnQgaW4gdGhlIGNvZGUgYmFzZS4gTXkgaW5pdGlhbCBsaXN0IG9mIEZvY3VzU3ltYm9scyBpbmNsdWRlZCB0aG9zZSwgYW5kIGl0IHNlZW1lZCBsaWtlIGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuCgpCdXQgbm93IEkmIzM5O20gdGhpbmtpbmcsIGhvbGQgb24gYSBzZWNvbmQuLi4gdGhlc2UgZnVuY3Rpb25zLCBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYCwgYXJlIHN0YXRpYywgYW5kIHRoZSBvbmx5IGNhbGwgc2l0ZXMgSSYjMzk7bSBzZWVpbmcgYXJlIGZyb20gYGRpc2tzaXplX3N0b3JlYCBhbmQgYHpyYW1fcmVzZXRfZGV2aWNlYC4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGlubGluaW5nIGlzIGEgbGlrZWx5IG9wdGltaXphdGlvbi4gSWYgdGhleSAqYXJlKiBpbmxpbmVkLCB0aGVuIGZvY3VzaW5nIG9uIHRoZSAqY2FsbGVycyogb2YgdGhvc2UgZnVuY3Rpb25zIChzcGVjaWZpY2FsbHkgYGRpc2tzaXplX3N0b3JlYCBhbmQgYHpyYW1fcmVzZXRfZGV2aWNlYCkgaXMgdGhlIGJldHRlciBhcHByb2FjaC4KCkxldCBtZSBjb25maXJtIHRoZSBjYWxsIHNpdGVzOiBgenJhbV9tZXRhX2FsbG9jYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSB3aXRoaW4gYGRpc2tzaXplX3N0b3JlYCwgc3VnZ2VzdGluZyBpdCYjMzk7cyByaXBlIGZvciBpbmxpbmluZy4gYHpyYW1fbWV0YV9mcmVlYCBpcyBjYWxsZWQgZnJvbSBgenJhbV9yZXNldF9kZXZpY2VgIGFuZCBhbHNvLCBpbXBvcnRhbnRseSwgZnJvbSBgZGlza3NpemVfc3RvcmVgIChsaWtlbHkgb24gdGhlIGVycm9yIHBhdGgpLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgc2ltcGxpZnkgbXkgZm9jdXMuIEluc3RlYWQgb2YgbGlzdGluZyBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYCwgaXQmIzM5O3MgbXVjaCBtb3JlIHJlbGV2YW50IHRvIGluY2x1ZGUgYGRpc2tzaXplX3N0b3JlYCBhbmQgZWl0aGVyIGB6cmFtX3Jlc2V0X2RldmljZWAgb3IsIHBlcmhhcHMgbW9yZSBnZW5lcmljYWxseSwgdGhlIGByZXNldF9zdG9yZWAgZnVuY3Rpb24sIGlmIHRoYXQmIzM5O3MgYSBtb3JlIGFjY3VyYXRlIG5hbWUgd2l0aGluIHRoZSBjb2RlJiMzOTtzIGNvbnRleHQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jlc2V0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjg3MT1zdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5MjUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTI2OnN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5MjctXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzEyOD1zdGF0aWMgaW50IHpyYW1fcmVtb3ZlKHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDYtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ3Olx0XHQgKiBJZiB3ZSB3ZXJlIGNsYWltZWQgYnkgcmVzZXRfc3RvcmUoKSwgZGVsX2dlbmRpc2soKSB3aWxsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ4Olx0XHQgKiB3YWl0IHVudGlsIHJlc2V0X3N0b3JlKCkgaXMgZG9uZSwgc28gbm90aGluZyBuZWVkIHRvIGRvLlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE0OS1cdFx0ICovXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMxNjE6XHQvKiBkZWxfZ2VuZGlzayBkcmFpbnMgcGVuZGluZyByZXNldF9zdG9yZSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2Mi1cdFdBUk5fT05fT05DRShjbGFpbWVkIFx1MDAyNlx1MDAyNiB6cmFtLVx1MDAzZWNsYWltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBaUkFNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGByZXNldF9zdG9yZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50IGluIHRoZSBjb2RlLiBHaXZlbiB0aGF0LCBhbmQgYWZ0ZXIgZXhhbWluaW5nIHRoZSBjb2RlLCBJIHRoaW5rIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZTogYGRpc2tzaXplX3N0b3JlYCwgYHpyYW1fc3VibWl0X2Jpb2AsIGByZWFkX2Jsb2NrX3N0YXRlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGByZXNldF9zdG9yZWAuICBUaGV5IHNlZW0gdG8gY292ZXIgdGhlIGtleSBhcmVhcyBvZiB0aGUgY2hhbmdlcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSSBpbml0aWFsbHkgdGhvdWdodCBgQ09ORklHX1pSQU1gIG1pZ2h0IGJlIGVub3VnaCwgYnV0IGEgY2xvc2VyIGxvb2sgdGVsbHMgbWUgd2UgYWxzbyBuZWVkIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLCBgQ09ORklHX1pSQU1fTVVMVElfQ09NUGAsIGFuZCBgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYC4gIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIHNvIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQgYXMgd2VsbC4gIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgZGVwZW5kZW5jeS4uLlllcCwgaXQgZGVwZW5kcyBvbiBib3RoIGBaUkFNYCBhbmQgYERFQlVHX0ZTYC4gQW5kIEkgc2VlIHRoYXQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCBpcyBzZWxlY3RlZCBieSBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLgoKU28sIHRoZSBkZWZpbml0aXZlIGVuYWJsZSBjb25maWdzIHNob3VsZCBiZTogYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AuCgpJJiMzOTtsbCBxdWlja2x5IHNjYW4gdGhlIHBhdGNoIGFnYWluIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBjb25maWdzLiAgUmlnaHQsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGNvdmVyIGZ1bmN0aW9ucyB1bmRlciBgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCBsaWtlIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGByZWFkX2Zyb21fenNwb29sYCwgYHpyYW1fd3JpdGViYWNrX2NvbXBsZXRlYCwgYHpyYW1fd3JpdGViYWNrX3Nsb3RzYCwgYHNjYW5fc2xvdHNfZm9yX3dyaXRlYmFja2AsIGB3cml0ZWJhY2tfc3RvcmVgLCBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzYCwgYHJlYWRfZnJvbV9iZGV2X2FzeW5jYCwgYHJlYWRfZnJvbV9iZGV2X3N5bmNgLCBhbmQgYHJlYWRfZnJvbV9iZGV2YCwgYW5kIGByZWFkX2Jsb2NrX3N0YXRlYCB1bmRlciBgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGByZWNvbXByZXNzX3Nsb3RgIGFuZCBgcmVjb21wcmVzc19zdG9yZWAgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiAgU28gbXkgZWFybGllciBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiBpcyBzb2xpZC4KCkFscmlnaHQsIGxldCYjMzk7cyByZXZpc2l0IHRob3NlIGZvY3VzIHN5bWJvbHM6IGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgLiAgVGhleSYjMzk7cmUgYWxsIGVpdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBBUEkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgc3lzZnMsIGJsb2NrIGxheWVyLCBvciBkZWJ1Z2ZzLiAgQ3J1Y2lhbGx5LCB0aGV5JiMzOTtyZSAqbm90KiBpbmxpbmVkIGFuZCBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gVGhhdCBsb29rcyBnb29kLgoKTm93LCBsZXQgbWUgY29uZmlybSB0aGF0IGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSBjb3JyZWN0IGJsb2NrIGxheWVyIGVudHJ5IHBvaW50LiAgWWVzLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgenJhbV9kZXZvcHMuc3VibWl0X2Jpb2AuICBBcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBgenJhbV9idmVjX3JlYWRgIGFuZCBgenJhbV9idmVjX3dyaXRlYCBhcmUgY2FsbGVkIGZyb20gYHpyYW1fYmlvX3JlYWRgIGFuZCBgenJhbV9iaW9fd3JpdGVgLCB3aGljaCBhcmUgKmluIHR1cm4qIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBTbywgYHpyYW1fc3VibWl0X2Jpb2AgYWN0cyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3MgY3J5c3RhbGxpemUgdGhlIHRlc3QgcmF0aW9uYWxlLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgdGhlIHpyYW0gc2xvdCBpbmRleCB0eXBlIGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gVGhpcyBpcyB0byBzdXBwb3J0IGxhcmdlciBkZXZpY2VzIChvdmVyIDE2VEIpIG9uIDY0LWJpdCBzeXN0ZW1zIGFuZCBhdm9pZCBvdmVyZmxvdyBpc3N1ZXMgb24gMzItYml0LiBJdCAqYWxzbyogYWRkcyBhIHNpemUgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYCB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIGEgZGlzayBzaXplIHRoYXQgd291bGQgZXhjZWVkIHRoZSBsaW1pdHMgb2YgYW4gYHVuc2lnbmVkIGxvbmdgIGluZGV4LiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSB6cmFtIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5IHNob3VsZCBmb2N1cyBvbiBmdXp6aW5nIHRoZSBzeXNmcyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgKGBkaXNrc2l6ZV9zdG9yZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGByZXNldF9zdG9yZWApLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgKGByZWFkX2Jsb2NrX3N0YXRlYCksIGFuZCB0aGUgYmxvY2sgZGV2aWNlIElPIGVudHJ5IHBvaW50IChgenJhbV9zdWJtaXRfYmlvYCkuICBUbyBmYWNpbGl0YXRlIHRoaXMsIHdlJiMzOTtsbCBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gZW5zdXJlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzLCBhcmUgY29tcGlsZWQgYW5kIGV4ZXJjaXNlZC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgcmlnaHQgZm9yIGByZWFkX2Jsb2NrX3N0YXRlYC4gWXVwLCBpdCBpcy4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTIxPWNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgWlJBTSBNZW1vcnkgVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHNpbXBsZSBlbm91Z2gsIGFuZCB0aGUgY29udGV4dCBpcyBjbGVhci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7WWVzLCBpdCBpcy4mIzM0OyBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9uLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciBgcmVhZF9ibG9ja19zdGF0ZWAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZy4gTXkgbmV4dCBzdGVwLCBhcyBhbiBleHBlcnQgaW4gdGhpcywgaXMgdG8gY29uZmlybSBpdHMgaW5jbHVzaW9uIHVuZGVyIGAjaWZkZWYgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYC4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIHVuZGVyIGRpZmZlcmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaW4gWlJBTS4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyBub3QgYmVlbiBzZXQgYnkgc29tZSBvdGhlciBtZWFucyB0aGF0IEkgaGF2ZW4mIzM5O3QgY29tZSBhY3Jvc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTUyMz1zdGF0aWMgdm9pZCB6cmFtX3JlbGVhc2VfYmRldl9ibG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBibGtfaWR4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MjctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTI4OiNpZmRlZiBDT05GSUdfWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MjktXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9MTA3PXN0cnVjdCB6cmFtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xNDItI2VuZGlmXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxNDM6I2lmZGVmIENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQ0LVx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIFJlY29tcHJlc3Npb24gTG9naWMqKgoKT2theSwgeWVzLCB0aGF0JiMzOTtzIHJpZ2h0LiBOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBtdWx0aS1jb21wcmVzc2lvbiBaUkFNIGNvbmZpZ3VyYXRpb24uIFRvIHZlcmlmeSB0aGlzLCBJIG5lZWQgdG8gY29uZmlybSBpdHMgcGxhY2VtZW50LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiBpcyBuZXN0ZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QYC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgdG8gZW5zdXJlIHRoYXQgdGhlIGxvZ2ljIGlzIGNvcnJlY3RseSBjb21waWxlZCBhbmQgaGFuZGxlZCB3aGVuIG11bHRpLWNvbXByZXNzaW9uIGlzIGVuYWJsZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGF0IGl0IGlzbiYjMzk7dCBjYXVzaW5nIGFueSBjb25mbGljdHMgaWYgdGhhdCYjMzk7cyBub3QgdGhlIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2FuaXR5IGNoZWNrIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gYW55IHJlbGF0ZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1pSQU1fTVVMVElfQ09NUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjE4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYXJ0aWFsX2lvKHN0cnVjdCBiaW9fdmVjICpidmVjKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMy1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNDojaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0sgfHwgZGVmaW5lZCBDT05GSUdfWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjUtc3RydWN0IHpyYW1fcHBfc2xvdCB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTgxOT1zdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgzMC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE4MzE6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MzItc3RhdGljIHNzaXplX3QgcmVjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzY1PXN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzcyLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjM3MzojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM3NC0jZGVmaW5lIFJFQ09NUFJFU1NfSURMRVx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDAzPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wcmVzc2VkX3dyaXRlYmFjayk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA0LSNlbmRpZlxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNTojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNi1zdGF0aWMgREVWSUNFX0FUVFJfUlcocmVjb21wX2FsZ29yaXRobSk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzAxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqenJhbV9kaXNrX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAzMS1cdFx1MDAyNmRldl9hdHRyX2RlYnVnX3N0YXQuYXR0cixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMzI6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMzMtXHRcdTAwMjZkZXZfYXR0cl9yZWNvbXBfYWxnb3JpdGhtLmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9Nzk9c3RydWN0IHpyYW1fc3RhdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk2LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg6OTc6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk4LSNkZWZpbmUgWlJBTV9QUklNQVJZX0NPTVBcdDBVXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCB0aGVzZSB3ZXJlIG15IG93biB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBXcml0ZWJhY2sgU3RvcmUqKgoKWWVzLCB0aGF0JiMzOTtzIHJpZ2h0LCBpdCBkZWZpbml0ZWx5IGlzLiAKCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGB3cml0ZWJhY2tfc3RvcmVgIGlzIGNvcnJlY3RseSBndWFyZGVkIGJ5IHRoZSBgI2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGJlaGF2aW9yLiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3Mgb25seSBpbmNsdWRlZCB3aGVuIHdyaXRlYmFjayBzdXBwb3J0IGlzIGVuYWJsZWQuIE90aGVyd2lzZSwgdGhlcmUgY291bGQgYmUgYWxsIHNvcnRzIG9mIHByb2JsZW1zLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGlzIHNvdW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWlJBTV9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI1LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mj1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg0LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg1OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ4Ni0jZGVmaW5lIElOVkFMSURfQkRFVl9CTE9DS1x0XHQofjBVTClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDk3PXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTIyOiNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEyMy1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yOTk1PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5OTctc3RhdGljIERFVklDRV9BVFRSX1JPKGJkX3N0YXQpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTktXHRcdTAwMjZkZXZfYXR0cl9jb21wX2FsZ29yaXRobS5hdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAyMDojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDIxLVx0XHUwMDI2ZGV2X2F0dHJfYmRfc3RhdC5hdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNDY9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwODQtXHRpbml0X3J3c2VtKFx1MDAyNnpyYW0tXHUwMDNlZGV2X2xvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzA4NTojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDg2LVx0enJhbS1cdTAwM2V3Yl9iYXRjaF9zaXplID0gMzI7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9Nzk9c3RydWN0IHpyYW1fc3RhdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTg5LVx0YXRvbWljNjRfdCBtaXNzX2ZyZWU7XHRcdC8qIG5vLiBvZiBtaXNzZWQgZnJlZSAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg6OTA6I2lmZGVmXHRDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTkxLVx0YXRvbWljNjRfdCBiZF9jb3VudDtcdFx0Lyogbm8uIG9mIHBhZ2VzIGluIGJhY2tpbmcgZGV2aWNlICovXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9MTA3PXN0cnVjdCB6cmFtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xMzItXHRib29sIGNsYWltOyAvKiBQcm90ZWN0ZWQgYnkgZGlzay1cdTAwM2VvcGVuX211dGV4ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxMzM6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTM0LVx0c3RydWN0IGZpbGUgKmJhY2tpbmdfZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQyMgoJCQkJCQkJb3V0cHV0OiAzMTYKCQkJCQkJCXRob3VnaHRzOiA0MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWlJBTSBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBpdCYjMzk7cyBhbGwgc3RhcnRpbmcgdG8gY29tZSB0b2dldGhlci4gSSYjMzk7dmUgZ290IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gbWluZDogYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AuIE5vdyBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scyBJJiMzOTttIGRlYWxpbmcgd2l0aC4gSSBoYXZlIGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgIHRoYXQgbmVlZCB0byBiZSB2ZXJpZmllZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IG5hbWVzIGFuZCBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGVhY2guCgpGaXJzdCwgbGV0JiMzOTtzIGNvbmZpcm0gYHJlc2V0X3N0b3JlYC4gWWVzLCBsb29rcyBnb29kIOKAkyB0aGUgc2lnbmF0dXJlIG1hdGNoZXM6IGBzdGF0aWMgc3NpemVfdCByZXNldF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gRXhjZWxsZW50LgoKTm93LCBvbiB0byBgenJhbV9zdWJtaXRfYmlvYC4gWWVwLCB0aGUgZGVmaW5pdGlvbiBpcyBjb3JyZWN0OiBgc3RhdGljIHZvaWQgenJhbV9zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylgLgoKQ2hlY2tpbmcgYGRpc2tzaXplX3N0b3JlYDogYHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilgLiBBbGwgaW4gb3JkZXIuCgpOZXh0LCBgcmVhZF9ibG9ja19zdGF0ZWA6IGBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylgLiBDb25maXJtZWQuCgpgd3JpdGViYWNrX3N0b3JlYDogYHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gUmlnaHQgb24gdGFyZ2V0LgoKRmluYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgOiBgc3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gUGVyZmVjdC4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGhlIG5hbWVzIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzIGFyZSBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIEkmIzM5O20gc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OywKICAgICYjMzQ7WlJBTV9NRU1PUllfVFJBQ0tJTkcmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX3N1Ym1pdF9iaW8mIzM0OywKICAgICYjMzQ7cmVhZF9ibG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wcmVzc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtaUkFNX01VTFRJX0NPTVAmIzM0OywKICAgICYjMzQ7WlJBTV9NRU1PUllfVFJBQ0tJTkcmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXNrc2l6ZV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6cmFtX3N1Ym1pdF9iaW8mIzM0OywKICAgICYjMzQ7cmVhZF9ibG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVjb21wcmVzc19zdG9yZSYjMzQ7LAogICAgJiMzNDtyZXNldF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUyOjQ1LjUxNzY4NDM2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODcyNDg2MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fV1JJVEVCQUNLXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIixcbiAgICBcIlpSQU1fTUVNT1JZX1RSQUNLSU5HXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJ6cmFtX3N1Ym1pdF9iaW9cIixcbiAgICBcInJlYWRfYmxvY2tfc3RhdGVcIixcbiAgICBcIndyaXRlYmFja19zdG9yZVwiLFxuICAgIFwicmVjb21wcmVzc19zdG9yZVwiLFxuICAgIFwicmVzZXRfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NDUuNTE3Njk3Nzg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4MzIwODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWNjMmJjZDliNjZiYmNlNTUwZTA1ZjVhNGFlZGMxNzZjMzFjZDljYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDAzOjUyOjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5pbmRleCA1NjE4M2M4MjdlMWIzLi42YWY5NzdkYmM2ZmRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5AQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgc2l6ZV90IGh1Z2VfY2xhc3Nfc2l6ZTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHM7XFxuIFxcbi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCk7XFxuK3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCk7XFxuIFxcbiAvKlxcbiAgKiBlbnRyeSBsb2NraW5nIHJ1bGVzOlxcbkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KTtcXG4gICogNCkgVXNlIFRSWSBsb2NrIHZhcmlhbnQgd2hlbiBpbiBhdG9taWMgY29udGV4dFxcbiAgKiAgICAtIG11c3QgY2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBoYW5kbGUgbG9ja2luZyBmYWlsZXJzXFxuICAqL1xcbi1zdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc2xvdF90cnlsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyAqbG9jayA9IFxcdTAwMjZ6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uX19sb2NrO1xcbiBcXG5AQCAtODMsNyArODMsNyBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGJvb2wgc2xvdF90cnlsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXFx1MDAyNnpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XFxuIFxcbkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyB2b2lkIHNsb3RfbG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbiBcXHRsb2NrX2FjcXVpcmVkKFxcdTAwMjZ6cmFtLVxcdTAwM2V0YWJsZV9sb2NrX21hcCwgX1JFVF9JUF8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbitzdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nICpsb2NrID0gXFx1MDAyNnpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XFxuIFxcbkBAIC0xMTAsNTUgKzExMCw1NiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB6cmFtICpkZXZfdG9fenJhbShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiAoc3RydWN0IHpyYW0gKilkZXZfdG9fZGlzayhkZXYpLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5oYW5kbGU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpXFxuIHtcXG4gXFx0enJhbS1cXHUwMDNldGFibGVbaW5kZXhdLmhhbmRsZSA9IGhhbmRsZTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcXG4rc3RhdGljIGJvb2wgdGVzdF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsXFxuIFxcdFxcdFxcdCAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcXG4ge1xcbiBcXHRyZXR1cm4genJhbS1cXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXFx1MDAyNiBCSVQoZmxhZyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4gXFx0XFx0XFx0ICBlbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpXFxuIHtcXG4gXFx0enJhbS1cXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgfD0gQklUKGZsYWcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjbGVhcl9zbG90X2ZsYWcoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcXG4rc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbiBcXHRcXHRcXHQgICAgZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKVxcbiB7XFxuIFxcdHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFxcdTAwMjY9IH5CSVQoZmxhZyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzaXplX3QgZ2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxcbitzdGF0aWMgc2l6ZV90IGdldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFxcdTAwMjYgKEJJVChaUkFNX0ZMQUdfU0hJRlQpIC0gMSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc2l6ZV90IHNpemUpXFxuK3N0YXRpYyB2b2lkIHNldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSB6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcXHUwMDNlXFx1MDAzZSBaUkFNX0ZMQUdfU0hJRlQ7XFxuIFxcbiBcXHR6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyA9IChmbGFncyBcXHUwMDNjXFx1MDAzYyBaUkFNX0ZMQUdfU0hJRlQpIHwgc2l6ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHNsb3RfYWxsb2NhdGVkKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCkgfHxcXG4gXFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHxcXG4gXFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgIHUzMiBwcmlvKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbylcXG4ge1xcbiBcXHRwcmlvIFxcdTAwMjY9IFpSQU1fQ09NUF9QUklPUklUWV9NQVNLO1xcbiBcXHQvKlxcbkBAIC0xNzAsMTQgKzE3MSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxcbiBcXHR6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyB8PSAocHJpbyBcXHUwMDNjXFx1MDAzYyBaUkFNX0NPTVBfUFJJT1JJVFlfQklUMSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcXG4rc3RhdGljIGlubGluZSB1MzIgZ2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1MzIgcHJpbyA9IHpyYW0tXFx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIFxcdTAwM2VcXHUwMDNlIFpSQU1fQ09NUF9QUklPUklUWV9CSVQxO1xcbiBcXG4gXFx0cmV0dXJuIHByaW8gXFx1MDAyNiBaUkFNX0NPTVBfUFJJT1JJVFlfTUFTSztcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWFya19zbG90X2FjY2Vzc2VkKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XFxuIFxcdGNsZWFyX3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9QUF9TTE9UKTtcXG5AQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHBfY3RsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgenJhbV9wcF9jdGwgKmN0bClcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgcGxhY2VfcHBfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwsXFxuLVxcdFxcdFxcdCAgdTMyIGluZGV4KVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IHpyYW1fcHBfc2xvdCAqcHBzO1xcbiBcXHR1MzIgYmlkO1xcbkBAIC00MTgsNyArNDE5LDcgQEAgc3RhdGljIHZvaWQgbWFya19pZGxlKHN0cnVjdCB6cmFtICp6cmFtLCBrdGltZV90IGN1dG9mZilcXG4ge1xcbiBcXHRpbnQgaXNfaWRsZSA9IDE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRpbnQgaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcbiBcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBucl9wYWdlczsgaW5kZXgrKykge1xcbiBcXHRcXHQvKlxcbkBAIC00ODUsOCArNDg2LDkgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAjZGVmaW5lIElOVkFMSURfQkRFVl9CTE9DS1xcdFxcdCh+MFVMKVxcbiBcXG4gc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdFxcdHUzMiBpbmRleCk7XFxuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCk7XFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpbmRleCk7XFxuIFxcbiBzdHJ1Y3QgenJhbV93Yl9jdGwge1xcbiBcXHQvKiBpZGxlIGxpc3QgaXMgYWNjZXNzZWQgb25seSBieSB0aGUgd3JpdGViYWNrIHRhc2ssIG5vIGNvbmN1cmVuY3kgKi9cXG5AQCAtNTIyLDcgKzUyNCw3IEBAIHN0cnVjdCB6cmFtX3JiX3JlcSB7XFxuIFxcdFxcdC8qIGVycm9yIHN0YXR1cyAoc3luYyByZWFkKSAqL1xcbiBcXHRcXHRpbnQgZXJyb3I7XFxuIFxcdH07XFxuLVxcdHUzMiBpbmRleDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gfTtcXG4gXFxuICNkZWZpbmUgRk9VUl9LKHgpICgoeCkgKiAoMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCAtIDEyKSkpXFxuQEAgLTkxMCw3ICs5MTIsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FjY291bnRfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgenJhbSAqenJhbSlcXG4gXFxuIHN0YXRpYyBpbnQgenJhbV93cml0ZWJhY2tfY29tcGxldGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxKVxcbiB7XFxuLVxcdHUzMiBpbmRleCA9IHJlcS1cXHUwMDNlcHBzLVxcdTAwM2VpbmRleDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS1cXHUwMDNlcHBzLVxcdTAwM2VpbmRleDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGVyciA9IGJsa19zdGF0dXNfdG9fZXJybm8ocmVxLVxcdTAwM2ViaW8uYmlfc3RhdHVzKTtcXG5AQCAtMTAzMiw3ICsxMDM0LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcXG4gXFx0c3RydWN0IHpyYW1fd2JfcmVxICpyZXEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgenJhbV9wcF9zbG90ICpwcHM7XFxuIFxcdGludCByZXQgPSAwLCBlcnIgPSAwO1xcbi1cXHR1MzIgaW5kZXggPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gMDtcXG4gXFxuIFxcdHdoaWxlICgocHBzID0gc2VsZWN0X3BwX3Nsb3QoY3RsKSkpIHtcXG4gXFx0XFx0aWYgKHpyYW0tXFx1MDAzZXdiX2xpbWl0X2VuYWJsZSBcXHUwMDI2XFx1MDAyNiAhenJhbS1cXHUwMDNlYmRfd2JfbGltaXQpIHtcXG5AQCAtMTE5OCw3ICsxMjAwLDcgQEAgc3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3Jfd3JpdGViYWNrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGxvLCB1bnNpZ25lZCBsb25nIGhpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB6cmFtX3BwX2N0bCAqY3RsKVxcbiB7XFxuLVxcdHUzMiBpbmRleCA9IGxvO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbG87XFxuIFxcbiBcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBoaSkge1xcbiBcXHRcXHRib29sIG9rID0gdHJ1ZTtcXG5AQCAtMTIzNSw3ICsxMjM3LDcgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGViYWNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XFxuLVxcdHU2NCBucl9wYWdlcyA9IHpyYW0tXFx1MDAzZWRpc2tzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvID0gMCwgaGkgPSBucl9wYWdlcztcXG4gXFx0c3RydWN0IHpyYW1fcHBfY3RsICpwcF9jdGwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgenJhbV93Yl9jdGwgKndiX2N0bCA9IE5VTEw7XFxuQEAgLTEzMzMsNyArMTMzNSw4IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuQEAgLTEzNzUsNyArMTM3OCw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuIFxcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB6cmFtX3JiX3JlcSwgd29yayk7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYmlvX2ZpcnN0X3BhZ2VfYWxsKHJlcS1cXHUwMDNlYmlvKTtcXG4gXFx0c3RydWN0IHpyYW0gKnpyYW0gPSByZXEtXFx1MDAzZXpyYW07XFxuLVxcdHUzMiBpbmRleCA9IHJlcS1cXHUwMDNlaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSByZXEtXFx1MDAzZWluZGV4O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbkBAIC0xNDI2LDcgKzE0MjksNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X2FzeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0XFx0XFx0dTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJpbyAqcGFyZW50KVxcbiB7XFxuIFxcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxO1xcbkBAIC0xNDc2LDggKzE0NzksOCBAQCBzdGF0aWMgdm9pZCB6cmFtX3N5bmNfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuICAqIGNoYWluZWQgSU8gd2l0aCBwYXJlbnQgSU8gaW4gc2FtZSBjb250ZXh0LCBpdCdzIGEgZGVhZGxvY2suIFRvIGF2b2lkIHRoYXQsXFxuICAqIHVzZSBhIHdvcmtlciB0aHJlYWQgY29udGV4dC5cXG4gICovXFxuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX2JkZXZfc3luYyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4tXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeClcXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYmxrX2lkeClcXG4ge1xcbiBcXHRzdHJ1Y3QgenJhbV9yYl9yZXEgcmVxO1xcbiBcXG5AQCAtMTQ5Niw4ICsxNDk5LDkgQEAgc3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxcbiBcXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxcbi1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeCwgc3RydWN0IGJpbyAqcGFyZW50KVxcbitzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxcbiB7XFxuIFxcdGF0b21pYzY0X2luYyhcXHUwMDI2enJhbS1cXHUwMDNlc3RhdHMuYmRfcmVhZHMpO1xcbiBcXHRpZiAoIXBhcmVudCkge1xcbkBAIC0xNTA5LDggKzE1MTMsOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxcbiB9XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9iZGV2KHN0cnVjdCB6cmFtICp6cmFtKSB7fTtcXG4tc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4tXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGJsa19pZHgsIHN0cnVjdCBiaW8gKnBhcmVudClcXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBiaW8gKnBhcmVudClcXG4ge1xcbiBcXHRyZXR1cm4gLUVJTztcXG4gfVxcbkBAIC0xNTM4LDcgKzE1NDMsOCBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4ge1xcbiBcXHRjaGFyICprYnVmO1xcbi1cXHRzc2l6ZV90IGluZGV4LCB3cml0dGVuID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFx0c3NpemVfdCB3cml0dGVuID0gMDtcXG4gXFx0c3RydWN0IHpyYW0gKnpyYW0gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSB6cmFtLVxcdTAwM2VkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG5AQCAtMTU2MCw3ICsxNTY2LDcgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9ibG9ja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXG4gXFx0XFx0Y29waWVkID0gc25wcmludGYoa2J1ZiArIHdyaXR0ZW4sIGNvdW50LFxcbi1cXHRcXHRcXHRcXFwiJTEyemQgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFxcIiUxMmx1ICUxMnUuJTA2ZCAlYyVjJWMlYyVjJWNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGluZGV4LCB6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lLCAwLFxcbiBcXHRcXHRcXHR0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSA/ICdzJyA6ICcuJyxcXG4gXFx0XFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpID8gJ3cnIDogJy4nLFxcbkBAIC0xOTY3LDggKzE5NzMsOCBAQCBzdGF0aWMgc3NpemVfdCBkZWJ1Z19zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXG4gc3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG4ge1xcbi1cXHRzaXplX3QgbnVtX3BhZ2VzID0gZGlza3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0c2l6ZV90IGluZGV4O1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IGRpc2tzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XFxuIFxcbiBcXHRpZiAoIXpyYW0tXFx1MDAzZXRhYmxlKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE5ODUsNyArMTk5MSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXFxuIFxcbiBzdGF0aWMgYm9vbCB6cmFtX21ldGFfYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG4ge1xcbi1cXHRzaXplX3QgbnVtX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcXG4gXFxuIFxcdG51bV9wYWdlcyA9IGRpc2tzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHpyYW0tXFx1MDAzZXRhYmxlID0gdnphbGxvYyhhcnJheV9zaXplKG51bV9wYWdlcywgc2l6ZW9mKCp6cmFtLVxcdTAwM2V0YWJsZSkpKTtcXG5AQCAtMjAwOCw3ICsyMDE0LDcgQEAgc3RhdGljIGJvb2wgenJhbV9tZXRhX2FsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcXG4rc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXG5AQCAtMjA2Miw3ICsyMDY4LDcgQEAgc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0XFx0XFx0IHUzMiBpbmRleClcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0dm9pZCAqbWVtO1xcbiBcXG5AQCAtMjA3Myw3ICsyMDc5LDcgQEAgc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICB1MzIgaW5kZXgpXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXHR2b2lkICpzcmMsICpkc3Q7XFxuQEAgLTIwODgsNyArMjA5NCw4IEBAIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuQEAgLTIxMTMsNyArMjEyMCw4IEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuIH1cXG4gXFxuICNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbkBAIC0yMTQ1LDcgKzIxNTMsOCBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuXFxuICAqIENvcnJlc3BvbmRpbmcgWlJBTSBzbG90IHNob3VsZCBiZSBsb2NrZWQuXFxuICAqL1xcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdGlmICh0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9TQU1FKSB8fFxcbiBcXHQgICAgIWdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCkpXFxuQEAgLTIxNTcsOCArMjE2Niw4IEBAIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcXG4gXFx0XFx0cmV0dXJuIHJlYWRfaW5jb21wcmVzc2libGVfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXFxuLVxcdFxcdFxcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxcbitzdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTIxODAsNyArMjE4OSw3IEBAIHN0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXFxuIFxcbiBcXHQvKiBTaG91bGQgTkVWRVIgaGFwcGVuLiBSZXR1cm4gYmlvIGVycm9yIGlmIGl0IGRvZXMuICovXFxuIFxcdGlmIChXQVJOX09OKHJldCBcXHUwMDNjIDApKVxcbi1cXHRcXHRwcl9lcnIoXFxcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcXFxcblxcXCIsIHJldCwgaW5kZXgpO1xcbitcXHRcXHRwcl9lcnIoXFxcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JWx1XFxcXG5cXFwiLCByZXQsIGluZGV4KTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMjE5MCw3ICsyMTk5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcXG4gICogYWx3YXlzIGV4cGVjdHMgYSBmdWxsIHBhZ2UgZm9yIHRoZSBvdXRwdXQuXFxuICAqL1xcbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi1cXHRcXHRcXHRcXHQgIHUzMiBpbmRleCwgaW50IG9mZnNldClcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgb2Zmc2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9JTyk7XFxuIFxcdGludCByZXQ7XFxuQEAgLTIyMDUsNyArMjIxNCw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWRfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi1cXHRcXHRcXHQgIHUzMiBpbmRleCwgaW50IG9mZnNldCwgc3RydWN0IGJpbyAqYmlvKVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcXG4gXFx0XFx0cmV0dXJuIHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XFxuQEAgLTIyMTMsNyArMjIyMiw3IEBAIHN0YXRpYyBpbnQgenJhbV9idmVjX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4tXFx0XFx0XFx0XFx0ICB1MzIgaW5kZXgpXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xcbiBcXHRzbG90X2ZyZWUoenJhbSwgaW5kZXgpO1xcbkBAIC0yMjI4LDcgKzIyMzcsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgZmlsbCxcXG4gfVxcbiBcXG4gc3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgaW5kZXgpXFxuK1xcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4gXFx0dm9pZCAqc3JjO1xcbkBAIC0yMjY4LDcgKzIyNzcsOCBAQCBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuK3N0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuQEAgLTIzMzUsNyArMjM0NSw3IEBAIHN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxcbiAgKiBUaGlzIGlzIGEgcGFydGlhbCBJTy4gUmVhZCB0aGUgZnVsbCBwYWdlIGJlZm9yZSB3cml0aW5nIHRoZSBjaGFuZ2VzLlxcbiAgKi9cXG4gc3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuLVxcdFxcdFxcdFxcdCAgIHUzMiBpbmRleCwgaW50IG9mZnNldClcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8pO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0yMzUzLDcgKzIzNjMsNyBAQCBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4gfVxcbiBcXG4gc3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi1cXHRcXHRcXHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXFxuIFxcdFxcdHJldHVybiB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcXG5AQCAtMjQyMSw4ICsyNDMxLDkgQEAgc3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3JfcmVjb21wcmVzcyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsIHUzMiBwcmlvLFxcbiAgKlxcbiAgKiBDb3JyZXNwb25kaW5nIFpSQU0gc2xvdCBzaG91bGQgYmUgbG9ja2VkLlxcbiAgKi9cXG4tc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdCAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pXFxuK3N0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0ICpudW1fcmVjb21wX3BhZ2VzLFxcbitcXHRcXHRcXHQgICB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0gPSBOVUxMO1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZV9vbGQ7XFxuQEAgLTI2NzQsNyArMjY4NSw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiBzdGF0aWMgdm9pZCB6cmFtX2Jpb19kaXNjYXJkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4gXFx0c2l6ZV90IG4gPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG4tXFx0dTMyIGluZGV4ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcXHUwMDNlXFx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcXHUwMDNlXFx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xcbiBcXHR1MzIgb2Zmc2V0ID0gKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgXFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcXHUwMDNjXFx1MDAzY1xcbiBcXHRcXHRcXHRTRUNUT1JfU0hJRlQ7XFxuIFxcbkBAIC0yNzE1LDcgKzI3MjYsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2Jpb19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXFxuIFxcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cXHUwMDNlYmlfaXRlcjtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0dTMyIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgXFx1MDAzZVxcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XFxuIFxcdFxcdHUzMiBvZmZzZXQgPSAoaXRlci5iaV9zZWN0b3IgXFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcXHUwMDNjXFx1MDAzY1xcbiBcXHRcXHRcXHRcXHRTRUNUT1JfU0hJRlQ7XFxuIFxcdFxcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcXG5AQCAtMjc0Niw3ICsyNzU3LDcgQEAgc3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0c3RydWN0IGJ2ZWNfaXRlciBpdGVyID0gYmlvLVxcdTAwM2ViaV9pdGVyO1xcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcXHUwMDNlXFx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgXFx1MDAzZVxcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcXG4gXFx0XFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcXHUwMDI2IChTRUNUT1JTX1BFUl9QQUdFIC0gMSkpIFxcdTAwM2NcXHUwMDNjXFxuIFxcdFxcdFxcdFxcdFNFQ1RPUl9TSElGVDtcXG4gXFx0XFx0c3RydWN0IGJpb192ZWMgYnYgPSBiaW9faXRlcl9pb3ZlYyhiaW8sIGl0ZXIpO1xcbkBAIC0yODYwLDYgKzI4NzEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcXG4gc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xcbiBcXHR1NjQgZGlza3NpemU7XFxuIFxcdHN0cnVjdCB6Y29tcCAqY29tcDtcXG4gXFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbkBAIC0yODc3LDYgKzI4ODksMTEgQEAgc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gXFx0fVxcbiBcXG4gXFx0ZGlza3NpemUgPSBQQUdFX0FMSUdOKGRpc2tzaXplKTtcXG4rXFx0bnVtX3BhZ2VzID0gZGlza3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXFxuK1xcdGlmICghbnVtX3BhZ2VzIHx8ICgodTY0KW51bV9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NDYuODU2ODg0NDc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTA1MzMyNzEyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9XUklURUJBQ0tcIixcbiAgICBcIlpSQU1fTVVMVElfQ09NUFwiLFxuICAgIFwiWlJBTV9NRU1PUllfVFJBQ0tJTkdcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpyYW1fc3VibWl0X2Jpb1wiLFxuICAgIFwicmVhZF9ibG9ja19zdGF0ZVwiLFxuICAgIFwid3JpdGViYWNrX3N0b3JlXCIsXG4gICAgXCJyZWNvbXByZXNzX3N0b3JlXCIsXG4gICAgXCJyZXNldF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHpyYW0gc2xvdCBpbmRleCBmcm9tIGB1MzJgIHRvIGB1bnNpZ25lZCBsb25nYCB0aHJvdWdob3V0IHRoZSB6cmFtIGRyaXZlciB0byBzdXBwb3J0IGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiBvbiA2NC1iaXQgc3lzdGVtcyBhbmQgcHJldmVudCBvdmVyZmxvdyBvbiAzMi1iaXQgc3lzdGVtcy4gSXQgYWxzbyBhZGRzIGEgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYCB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIGEgZGlzayBzaXplIHRoYXQgd291bGQgb3ZlcmZsb3cgdGhlIGB1bnNpZ25lZCBsb25nYCBpbmRleC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gZHJpdmVyIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIGNoYW5nZXMsIHdlIHNob3VsZCBmdXp6IHRoZSBzeXNmcyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgKGBkaXNrc2l6ZV9zdG9yZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGByZXNldF9zdG9yZWApLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgKGByZWFkX2Jsb2NrX3N0YXRlYCksIGFuZCB0aGUgYmxvY2sgZGV2aWNlIElPIGVudHJ5IHBvaW50IChgenJhbV9zdWJtaXRfYmlvYCkuIFdlIG5lZWQgdG8gZW5hYmxlIGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpSQU1fTVVMVElfQ09NUGAsIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIGFuZCBgREVCVUdfRlNgIHRvIGNvbXBpbGUgYW5kIHRlc3QgYWxsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Y2MyYmNkOWI2NmJiY2U1NTBlMDVmNWE0YWVkYzE3NmMzMWNkOWNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMzo1Mjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IDU2MTgzYzgyN2UxYjMuLjZhZjk3N2RiYzZmZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBzaXplX3QgaHVnZV9jbGFzc19zaXplO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgenJhbV9kZXZvcHM7XG4gXG4tc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpO1xuK3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4gXG4gLypcbiAgKiBlbnRyeSBsb2NraW5nIHJ1bGVzOlxuQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHZvaWQgc2xvdF9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpO1xuICAqIDQpIFVzZSBUUlkgbG9jayB2YXJpYW50IHdoZW4gaW4gYXRvbWljIGNvbnRleHRcbiAgKiAgICAtIG11c3QgY2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBoYW5kbGUgbG9ja2luZyBmYWlsZXJzXG4gICovXG4tc3RhdGljIF9fbXVzdF9jaGVjayBib29sIHNsb3RfdHJ5bG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyAqbG9jayA9IFx1MDAyNnpyYW0tXHUwMDNldGFibGVbaW5kZXhdLl9fbG9jaztcbiBcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyBfX211c3RfY2hlY2sgYm9vbCBzbG90X3RyeWxvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgpXG4rc3RhdGljIHZvaWQgc2xvdF9sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmxvY2sgPSBcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XG4gXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2xvY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiBcdGxvY2tfYWNxdWlyZWQoXHUwMDI2enJhbS1cdTAwM2V0YWJsZV9sb2NrX21hcCwgX1JFVF9JUF8pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzbG90X3VubG9jayhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyB2b2lkIHNsb3RfdW5sb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgKmxvY2sgPSBcdTAwMjZ6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5fX2xvY2s7XG4gXG5AQCAtMTEwLDU1ICsxMTAsNTYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgenJhbSAqZGV2X3RvX3pyYW0oc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIChzdHJ1Y3QgenJhbSAqKWRldl90b19kaXNrKGRldiktXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdF9oYW5kbGUoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmhhbmRsZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc2V0X3Nsb3RfaGFuZGxlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKVxuK3N0YXRpYyB2b2lkIHNldF9zbG90X2hhbmRsZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpXG4ge1xuIFx0enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uaGFuZGxlID0gaGFuZGxlO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB0ZXN0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LFxuK3N0YXRpYyBib29sIHRlc3Rfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuIFx0XHRcdCAgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcbiB7XG4gXHRyZXR1cm4genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwMjYgQklUKGZsYWcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzZXRfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3RfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbiBcdFx0XHQgIGVudW0genJhbV9wYWdlZmxhZ3MgZmxhZylcbiB7XG4gXHR6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IEJJVChmbGFnKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4rc3RhdGljIHZvaWQgY2xlYXJfc2xvdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuIFx0XHRcdCAgICBlbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpXG4ge1xuIFx0enJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwMjY9IH5CSVQoZmxhZyk7XG4gfVxuIFxuLXN0YXRpYyBzaXplX3QgZ2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyBzaXplX3QgZ2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRyZXR1cm4genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwMjYgKEJJVChaUkFNX0ZMQUdfU0hJRlQpIC0gMSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNldF9zbG90X3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc2l6ZV90IHNpemUpXG4rc3RhdGljIHZvaWQgc2V0X3Nsb3Rfc2l6ZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgXHUwMDNlXHUwMDNlIFpSQU1fRkxBR19TSElGVDtcbiBcbiBcdHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuZmxhZ3MgPSAoZmxhZ3MgXHUwMDNjXHUwMDNjIFpSQU1fRkxBR19TSElGVCkgfCBzaXplO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2xvdF9hbGxvY2F0ZWQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xvdF9hbGxvY2F0ZWQoc3RydWN0IHpyYW0gKnpyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpIHx8XG4gXHRcdHRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1NBTUUpIHx8XG4gXHRcdHRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1dCKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCxcbi1cdFx0XHRcdFx0ICB1MzIgcHJpbylcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Nsb3RfY29tcF9wcmlvcml0eShzdHJ1Y3QgenJhbSAqenJhbSxcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1MzIgcHJpbylcbiB7XG4gXHRwcmlvIFx1MDAyNj0gWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7XG4gXHQvKlxuQEAgLTE3MCwxNCArMTcxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsXG4gXHR6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmZsYWdzIHw9IChwcmlvIFx1MDAzY1x1MDAzYyBaUkFNX0NPTVBfUFJJT1JJVFlfQklUMSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9zbG90X2NvbXBfcHJpb3JpdHkoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbitzdGF0aWMgaW5saW5lIHUzMiBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHUzMiBwcmlvID0genJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5mbGFncyBcdTAwM2VcdTAwM2UgWlJBTV9DT01QX1BSSU9SSVRZX0JJVDE7XG4gXG4gXHRyZXR1cm4gcHJpbyBcdTAwMjYgWlJBTV9DT01QX1BSSU9SSVRZX01BU0s7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyB2b2lkIG1hcmtfc2xvdF9hY2Nlc3NlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fSURMRSk7XG4gXHRjbGVhcl9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fUFBfU0xPVCk7XG5AQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHBfY3RsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgenJhbV9wcF9jdGwgKmN0bClcbiB9XG4gXG4gc3RhdGljIGJvb2wgcGxhY2VfcHBfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwsXG4tXHRcdFx0ICB1MzIgaW5kZXgpXG4rXHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwcztcbiBcdHUzMiBiaWQ7XG5AQCAtNDE4LDcgKzQxOSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4ge1xuIFx0aW50IGlzX2lkbGUgPSAxO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHpyYW0tXHUwMDNlZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRpbnQgaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuIFxuIFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFx1MDAzYyBucl9wYWdlczsgaW5kZXgrKykge1xuIFx0XHQvKlxuQEAgLTQ4NSw4ICs0ODYsOSBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gI2RlZmluZSBJTlZBTElEX0JERVZfQkxPQ0tcdFx0KH4wVUwpXG4gXG4gc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHR1MzIgaW5kZXgpO1xuLXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCk7XG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KTtcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KTtcbiBcbiBzdHJ1Y3QgenJhbV93Yl9jdGwge1xuIFx0LyogaWRsZSBsaXN0IGlzIGFjY2Vzc2VkIG9ubHkgYnkgdGhlIHdyaXRlYmFjayB0YXNrLCBubyBjb25jdXJlbmN5ICovXG5AQCAtNTIyLDcgKzUyNCw3IEBAIHN0cnVjdCB6cmFtX3JiX3JlcSB7XG4gXHRcdC8qIGVycm9yIHN0YXR1cyAoc3luYyByZWFkKSAqL1xuIFx0XHRpbnQgZXJyb3I7XG4gXHR9O1xuLVx0dTMyIGluZGV4O1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiB9O1xuIFxuICNkZWZpbmUgRk9VUl9LKHgpICgoeCkgKiAoMSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMikpKVxuQEAgLTkxMCw3ICs5MTIsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FjY291bnRfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgenJhbSAqenJhbSlcbiBcbiBzdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX2NvbXBsZXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgenJhbV93Yl9yZXEgKnJlcSlcbiB7XG4tXHR1MzIgaW5kZXggPSByZXEtXHUwMDNlcHBzLVx1MDAzZWluZGV4O1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleCA9IHJlcS1cdTAwM2VwcHMtXHUwMDNlaW5kZXg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0ZXJyID0gYmxrX3N0YXR1c190b19lcnJubyhyZXEtXHUwMDNlYmlvLmJpX3N0YXR1cyk7XG5AQCAtMTAzMiw3ICsxMDM0LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcbiBcdHN0cnVjdCB6cmFtX3diX3JlcSAqcmVxID0gTlVMTDtcbiBcdHN0cnVjdCB6cmFtX3BwX3Nsb3QgKnBwcztcbiBcdGludCByZXQgPSAwLCBlcnIgPSAwO1xuLVx0dTMyIGluZGV4ID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSAwO1xuIFxuIFx0d2hpbGUgKChwcHMgPSBzZWxlY3RfcHBfc2xvdChjdGwpKSkge1xuIFx0XHRpZiAoenJhbS1cdTAwM2V3Yl9saW1pdF9lbmFibGUgXHUwMDI2XHUwMDI2ICF6cmFtLVx1MDAzZWJkX3diX2xpbWl0KSB7XG5AQCAtMTE5OCw3ICsxMjAwLDcgQEAgc3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3Jfd3JpdGViYWNrKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgbW9kZSxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBsbywgdW5zaWduZWQgbG9uZyBoaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHpyYW1fcHBfY3RsICpjdGwpXG4ge1xuLVx0dTMyIGluZGV4ID0gbG87XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbG87XG4gXG4gXHR3aGlsZSAoaW5kZXggXHUwMDNjIGhpKSB7XG4gXHRcdGJvb2wgb2sgPSB0cnVlO1xuQEAgLTEyMzUsNyArMTIzNyw3IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XG4tXHR1NjQgbnJfcGFnZXMgPSB6cmFtLVx1MDAzZWRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHpyYW0tXHUwMDNlZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR1bnNpZ25lZCBsb25nIGxvID0gMCwgaGkgPSBucl9wYWdlcztcbiBcdHN0cnVjdCB6cmFtX3BwX2N0bCAqcHBfY3RsID0gTlVMTDtcbiBcdHN0cnVjdCB6cmFtX3diX2N0bCAqd2JfY3RsID0gTlVMTDtcbkBAIC0xMzMzLDcgKzEzMzUsOCBAQCBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbitzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTM3NSw3ICsxMzc4LDcgQEAgc3RhdGljIHZvaWQgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB6cmFtX3JiX3JlcSwgd29yayk7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJpb19maXJzdF9wYWdlX2FsbChyZXEtXHUwMDNlYmlvKTtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gcmVxLVx1MDAzZXpyYW07XG4tXHR1MzIgaW5kZXggPSByZXEtXHUwMDNlaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcmVxLVx1MDAzZWluZGV4O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGRlY29tcHJlc3NfYmRldl9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbkBAIC0xNDI2LDcgKzE0MjksNyBAQCBzdGF0aWMgdm9pZCB6cmFtX2FzeW5jX3JlYWRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuIH1cbiBcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X2FzeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0XHRcdHUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBibGtfaWR4LFxuIFx0XHRcdFx0c3RydWN0IGJpbyAqcGFyZW50KVxuIHtcbiBcdHN0cnVjdCB6cmFtX3JiX3JlcSAqcmVxO1xuQEAgLTE0NzYsOCArMTQ3OSw4IEBAIHN0YXRpYyB2b2lkIHpyYW1fc3luY19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiAgKiBjaGFpbmVkIElPIHdpdGggcGFyZW50IElPIGluIHNhbWUgY29udGV4dCwgaXQncyBhIGRlYWRsb2NrLiBUbyBhdm9pZCB0aGF0LFxuICAqIHVzZSBhIHdvcmtlciB0aHJlYWQgY29udGV4dC5cbiAgKi9cbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYmxrX2lkeClcbitzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgpXG4ge1xuIFx0c3RydWN0IHpyYW1fcmJfcmVxIHJlcTtcbiBcbkBAIC0xNDk2LDggKzE0OTksOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgsXG4gXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXG4rXHRcdFx0ICBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0YXRvbWljNjRfaW5jKFx1MDAyNnpyYW0tXHUwMDNlc3RhdHMuYmRfcmVhZHMpO1xuIFx0aWYgKCFwYXJlbnQpIHtcbkBAIC0xNTA5LDggKzE1MTMsOSBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuIH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9iZGV2KHN0cnVjdCB6cmFtICp6cmFtKSB7fTtcbi1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBibGtfaWR4LCBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4rc3RhdGljIGludCByZWFkX2Zyb21fYmRldihzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0ICB1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGJsa19pZHgsXG4rXHRcdFx0ICBzdHJ1Y3QgYmlvICpwYXJlbnQpXG4ge1xuIFx0cmV0dXJuIC1FSU87XG4gfVxuQEAgLTE1MzgsNyArMTU0Myw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlYWRfYmxvY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRjaGFyICprYnVmO1xuLVx0c3NpemVfdCBpbmRleCwgd3JpdHRlbiA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuK1x0c3NpemVfdCB3cml0dGVuID0gMDtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0genJhbS1cdTAwM2VkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbkBAIC0xNTYwLDcgKzE1NjYsNyBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2Jsb2NrX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0Y29waWVkID0gc25wcmludGYoa2J1ZiArIHdyaXR0ZW4sIGNvdW50LFxuLVx0XHRcdFwiJTEyemQgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwiLFxuK1x0XHRcdFwiJTEybHUgJTEydS4lMDZkICVjJWMlYyVjJWMlY1xcblwiLFxuIFx0XHRcdGluZGV4LCB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUsIDAsXG4gXHRcdFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgPyAncycgOiAnLicsXG4gXHRcdFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fV0IpID8gJ3cnIDogJy4nLFxuQEAgLTE5NjcsOCArMTk3Myw4IEBAIHN0YXRpYyBzc2l6ZV90IGRlYnVnX3N0YXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcbiB7XG4tXHRzaXplX3QgbnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRzaXplX3QgaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IGRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdGlmICghenJhbS1cdTAwM2V0YWJsZSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE5ODUsNyArMTk5MSw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fbWV0YV9mcmVlKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXG4gXG4gc3RhdGljIGJvb2wgenJhbV9tZXRhX2FsbG9jKHN0cnVjdCB6cmFtICp6cmFtLCB1NjQgZGlza3NpemUpXG4ge1xuLVx0c2l6ZV90IG51bV9wYWdlcztcbitcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFxuIFx0bnVtX3BhZ2VzID0gZGlza3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR6cmFtLVx1MDAzZXRhYmxlID0gdnphbGxvYyhhcnJheV9zaXplKG51bV9wYWdlcywgc2l6ZW9mKCp6cmFtLVx1MDAzZXRhYmxlKSkpO1xuQEAgLTIwMDgsNyArMjAxNCw3IEBAIHN0YXRpYyBib29sIHpyYW1fbWV0YV9hbGxvYyhzdHJ1Y3QgenJhbSAqenJhbSwgdTY0IGRpc2tzaXplKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4KVxuK3N0YXRpYyB2b2lkIHNsb3RfZnJlZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcbkBAIC0yMDYyLDcgKzIwNjgsNyBAQCBzdGF0aWMgdm9pZCBzbG90X2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleClcbiB9XG4gXG4gc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRcdFx0IHUzMiBpbmRleClcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHZvaWQgKm1lbTtcbiBcbkBAIC0yMDczLDcgKzIwNzksNyBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0XHRcdCAgICB1MzIgaW5kZXgpXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYywgKmRzdDtcbkBAIC0yMDg4LDcgKzIwOTQsOCBAQCBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbitzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG5AQCAtMjExMyw3ICsyMTIwLDggQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiB9XG4gXG4gI2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG4tc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbitzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG5AQCAtMjE0NSw3ICsyMTUzLDggQEAgc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleClcbiAgKiBSZWFkcyAoZGVjb21wcmVzc2VzIGlmIG5lZWRlZCkgYSBwYWdlIGZyb20genNwb29sICh6c21hbGxvYykuXG4gICogQ29ycmVzcG9uZGluZyBaUkFNIHNsb3Qgc2hvdWxkIGJlIGxvY2tlZC5cbiAgKi9cbi1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4rc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRpZiAodGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHxcbiBcdCAgICAhZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KSlcbkBAIC0yMTU3LDggKzIxNjYsOCBAQCBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gXHRcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHpyYW1fcmVhZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4LFxuLVx0XHRcdCAgc3RydWN0IGJpbyAqcGFyZW50KVxuK3N0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdCAgdW5zaWduZWQgbG9uZyBpbmRleCwgc3RydWN0IGJpbyAqcGFyZW50KVxuIHtcbiBcdGludCByZXQ7XG4gXG5AQCAtMjE4MCw3ICsyMTg5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiBcbiBcdC8qIFNob3VsZCBORVZFUiBoYXBwZW4uIFJldHVybiBiaW8gZXJyb3IgaWYgaXQgZG9lcy4gKi9cbiBcdGlmIChXQVJOX09OKHJldCBcdTAwM2MgMCkpXG4tXHRcdHByX2VycihcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcXG5cIiwgcmV0LCBpbmRleCk7XG4rXHRcdHByX2VycihcIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JWx1XFxuXCIsIHJldCwgaW5kZXgpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjE5MCw3ICsyMTk5LDcgQEAgc3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHUzMiBpbmRleCxcbiAgKiBhbHdheXMgZXhwZWN0cyBhIGZ1bGwgcGFnZSBmb3IgdGhlIG91dHB1dC5cbiAgKi9cbiBzdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxuLVx0XHRcdFx0ICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTtcbiBcdGludCByZXQ7XG5AQCAtMjIwNSw3ICsyMjE0LDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZF9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbiB9XG4gXG4gc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4tXHRcdFx0ICB1MzIgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcbitcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbiBcdFx0cmV0dXJuIHpyYW1fYnZlY19yZWFkX3BhcnRpYWwoenJhbSwgYnZlYywgaW5kZXgsIG9mZnNldCk7XG5AQCAtMjIxMyw3ICsyMjIyLDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfcmVhZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4gfVxuIFxuIHN0YXRpYyBpbnQgd3JpdGVfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBmaWxsLFxuLVx0XHRcdFx0ICB1MzIgaW5kZXgpXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c2xvdF9sb2NrKHpyYW0sIGluZGV4KTtcbiBcdHNsb3RfZnJlZSh6cmFtLCBpbmRleCk7XG5AQCAtMjIyOCw3ICsyMjM3LDcgQEAgc3RhdGljIGludCB3cml0ZV9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGZpbGwsXG4gfVxuIFxuIHN0YXRpYyBpbnQgd3JpdGVfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0XHQgICAgIHUzMiBpbmRleClcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHZvaWQgKnNyYztcbkBAIC0yMjY4LDcgKzIyNzcsOCBAQCBzdGF0aWMgaW50IHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KVxuK3N0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG5AQCAtMjMzNSw3ICsyMzQ1LDcgQEAgc3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4gICogVGhpcyBpcyBhIHBhcnRpYWwgSU8uIFJlYWQgdGhlIGZ1bGwgcGFnZSBiZWZvcmUgd3JpdGluZyB0aGUgY2hhbmdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi1cdFx0XHRcdCAgIHUzMiBpbmRleCwgaW50IG9mZnNldClcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCBvZmZzZXQpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTtcbiBcdGludCByZXQ7XG5AQCAtMjM1Myw3ICsyMzYzLDcgQEAgc3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXG4gfVxuIFxuIHN0YXRpYyBpbnQgenJhbV9idmVjX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcbi1cdFx0XHQgICB1MzIgaW5kZXgsIGludCBvZmZzZXQpXG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IG9mZnNldClcbiB7XG4gXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcbiBcdFx0cmV0dXJuIHpyYW1fYnZlY193cml0ZV9wYXJ0aWFsKHpyYW0sIGJ2ZWMsIGluZGV4LCBvZmZzZXQpO1xuQEAgLTI0MjEsOCArMjQzMSw5IEBAIHN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbyxcbiAgKlxuICAqIENvcnJlc3BvbmRpbmcgWlJBTSBzbG90IHNob3VsZCBiZSBsb2NrZWQuXG4gICovXG4tc3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0ICAgdTY0ICpudW1fcmVjb21wX3BhZ2VzLCB1MzIgdGhyZXNob2xkLCB1MzIgcHJpbylcbitzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbitcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0ICpudW1fcmVjb21wX3BhZ2VzLFxuK1x0XHRcdCAgIHUzMiB0aHJlc2hvbGQsIHUzMiBwcmlvKVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZV9vbGQ7XG5AQCAtMjY3NCw3ICsyNjg1LDcgQEAgc3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgenJhbV9iaW9fZGlzY2FyZChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpbyAqYmlvKVxuIHtcbiBcdHNpemVfdCBuID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbi1cdHUzMiBpbmRleCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgXHUwMDNlXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XG4gXHR1MzIgb2Zmc2V0ID0gKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0U0VDVE9SX1NISUZUO1xuIFxuQEAgLTI3MTUsNyArMjcyNiw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcbiBcdHN0cnVjdCBidmVjX2l0ZXIgaXRlciA9IGJpby1cdTAwM2ViaV9pdGVyO1xuIFxuIFx0ZG8ge1xuLVx0XHR1MzIgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbitcdFx0dW5zaWduZWQgbG9uZyBpbmRleCA9IGl0ZXIuYmlfc2VjdG9yIFx1MDAzZVx1MDAzZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUO1xuIFx0XHR1MzIgb2Zmc2V0ID0gKGl0ZXIuYmlfc2VjdG9yIFx1MDAyNiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSBcdTAwM2NcdTAwM2NcbiBcdFx0XHRcdFNFQ1RPUl9TSElGVDtcbiBcdFx0c3RydWN0IGJpb192ZWMgYnYgPSBiaW9faXRlcl9pb3ZlYyhiaW8sIGl0ZXIpO1xuQEAgLTI3NDYsNyArMjc1Nyw3IEBAIHN0YXRpYyB2b2lkIHpyYW1fYmlvX3dyaXRlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pXG4gXHRzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIgPSBiaW8tXHUwMDNlYmlfaXRlcjtcbiBcbiBcdGRvIHtcbi1cdFx0dTMyIGluZGV4ID0gaXRlci5iaV9zZWN0b3IgXHUwMDNlXHUwMDNlIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpdGVyLmJpX3NlY3RvciBcdTAwM2VcdTAwM2UgU0VDVE9SU19QRVJfUEFHRV9TSElGVDtcbiBcdFx0dTMyIG9mZnNldCA9IChpdGVyLmJpX3NlY3RvciBcdTAwMjYgKFNFQ1RPUlNfUEVSX1BBR0UgLSAxKSkgXHUwMDNjXHUwMDNjXG4gXHRcdFx0XHRTRUNUT1JfU0hJRlQ7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMoYmlvLCBpdGVyKTtcbkBAIC0yODYwLDYgKzI4NzEsNyBAQCBzdGF0aWMgdm9pZCB6cmFtX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSlcbiBzdGF0aWMgc3NpemVfdCBkaXNrc2l6ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4rXHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbiBcdHU2NCBkaXNrc2l6ZTtcbiBcdHN0cnVjdCB6Y29tcCAqY29tcDtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbkBAIC0yODc3LDYgKzI4ODksMTEgQEAgc3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdH1cbiBcbiBcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XG4rXHRudW1fcGFnZXMgPSBkaXNrc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdC8qIFNsb3RzIGFyZSBhZGRyZXNzZWQgYnkgYW4gdW5zaWduZWQgbG9uZyBpbmRleCAqL1xuK1x0aWYgKCFudW1fcGFnZXMgfHwgKCh1NjQpbnVtX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAhPSBkaXNrc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NDYuODU2ODg1Nzk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0NjE5NTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpyYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyB0aGUgYGluZGV4YCB0eXBlIGZyb20gYHUzMmAgdG8gYHVuc2lnbmVkIGxvbmdgIGluIHRoZSBjb2RlLCB3aGljaCBpcyBhIGZhaXJseSBzaWduaWZpY2FudCBjaGFuZ2UuIEFsb25nc2lkZSB0aGlzIGNoYW5nZSBpcyBhIG5ldyBjaGVjayBpbiBgZGlza3NpemVfc3RvcmVgLiBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cblRoZSBuZXcgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYDpcbmBgYGNcblx0ZGlza3NpemUgPSBQQUdFX0FMSUdOKGRpc2tzaXplKTtcbitcdG51bV9wYWdlcyA9IGRpc2tzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXG4rXHRpZiAoIW51bV9wYWdlcyB8fCAoKHU2NCludW1fcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpICE9IGRpc2tzaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbmBgYFxuVGhpcyBhZGRpdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIHByZXZlbnRpbmcgdGhlIGBkaXNrc2l6ZWAgZnJvbSBleGNlZWRpbmcgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBgdW5zaWduZWQgbG9uZ2AgY2FuIHJlcHJlc2VudCB3aGVuIHNoaWZ0ZWQgYnkgYFBBR0VfU0hJRlRgLCBhcyB3ZWxsIGFzIHByZXZlbnRpbmcgYSBgZGlza3NpemVgIG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgYSBkZWZlbnNpdmUgbWVhc3VyZSB0byBwcmV2ZW50IGFuIG92ZXJmbG93IHNvbWV3aGVyZS5cblxuV2FpdCwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCBpcyAzMiBiaXRzLCByaWdodD8gU28gdGhlIHNpemUgbGltaXQgaXMgNEdCICgyXjMyKSwgYW5kIG9uIDY0LWJpdCBzeXN0ZW1zLCBgdW5zaWduZWQgbG9uZ2AgaXMgNjQgYml0cywgbWVhbmluZyB0aGUgc2l6ZSBsaW1pdCBpcyB0aGVvcmV0aWNhbGx5IG11Y2ggbGFyZ2VyLCByaWdodD8gVGh1cywgaWYgYGRpc2tzaXplYCBpcyBsYXJnZXIgdGhhbiBgMHhmZmZmZmZmZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVGAsIHdoaWNoIGlzIDE2VEIsIGl0IHdpbGwgb3ZlcmZsb3cgb24gMzIgYml0IHN5c3RlbXMuXG5cbkl0IHNlZW1zIGxpa2UgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgdGhlIGBpbmRleGAgd2FzIGEgYHUzMmAgYnV0IHRoZSBgZGlza3NpemVgIGNvdWxkIGJlIGxhcmdlciB0aGFuIGB1MzIgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlRgIG9uIDY0LWJpdCBzeXN0ZW1zLiBPciBwZXJoYXBzLCB0aGlzIGlzIGEgZml4IGZvciAzMiBiaXQgc3lzdGVtcy5cblxuTm93LCBvbiA2NC1iaXQgc3lzdGVtcywgdGhlIGNoYW5nZSB0byBgdW5zaWduZWQgbG9uZ2AgZWZmZWN0aXZlbHkgbWFrZXMgYGluZGV4YCA2NCBiaXRzLCBhbGxvd2luZyBmb3IgenJhbSBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIsIHdoaWNoIGlzIGAweGZmZmZmZmZmICogNDA5NmAuIEhvd2V2ZXIsIG9uIDMyLWJpdCBzeXN0ZW1zLCBgdW5zaWduZWQgbG9uZ2AgaXMgc3RpbGwgMzIgYml0cywgYnV0IHRoZSBjaGVjayBlbnN1cmVzIHRoYXQgYGRpc2tzaXplYCBkb2Vzbid0IGV4Y2VlZCAxNlRCLiBFc3NlbnRpYWxseSwgaXQgbm9ybWFsaXplcyB0aGlzIGJlaGF2aW9yIGFjcm9zcyBhcmNoaXRlY3R1cmVzLlxuXG5Pa2F5LCBpcyB0aGlzIHBhdGNoIGZ1enphYmxlPyBZZXMsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB6cmFtLCB3aGljaCBtZWFucyBpdCBpcyBhbiBpbXBvcnRhbnQgY2hhbmdlIGZvciBmdXp6aW5nLiBacmFtIGlzIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLiAqQ2FuKiBzeXprYWxsZXIgZnV6eiB6cmFtIHN5c2ZzPyBZZXMsIEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3Igc3lzZnMsIGluY2x1ZGluZyB6cmFtLiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZy4gWWVzLCBpdCdzIGBDT05GSUdfWlJBTWAuIEkgc2hvdWxkIGNoZWNrIGBkaXNrc2l6ZV9zdG9yZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mjo1NC4yMDMwODQ1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczMjA4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlza3NpemVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODU0PXN0YXRpYyB2b2lkIHpyYW1fcmVzZXRfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg3MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODcxOnN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg3Mi1cXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMTI4PXN0YXRpYyBpbnQgenJhbV9yZW1vdmUoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY0LVxcdC8qXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2NTpcXHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2Ni1cXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTY3OlxcdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY4LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mjo1NC4yNjA0MTExNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NjE3MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaXZpbmcgaW50byB0aGUgWnJhbSBDb2RlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgenJhbV9kcnYuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGRyaXZlciBmb3IgenJhbS4gTXkgZmlyc3QgbW92ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgenJhbS4gV2hhdCBzcGVjaWZpYyBhc3BlY3RzIGFyZSBiZWluZyBhbHRlcmVkIGhlcmU/IEknbSBub3QgZ29pbmcgdG8ganVzdCBibGluZGx5IGFwcGx5IGEgcGF0Y2ggdG8gdGhlIGRyaXZlciBpdHNlbGYgd2l0aG91dCBrbm93aW5nIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSB6cmFtIHN1YnN5c3RlbSBhbmQgd2hhdCB0aGUgKmludGVuZGVkKiBtb2RpZmljYXRpb24gaXMuIFRpbWUgdG8gdHJhY2UgdGhlIGNvbmZpZyBvcHRpb25zLCB0aGUgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycyB0byBnZXQgYSBmaXJtIGdyYXNwLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHpyYW0gYW5kIHRoZW4gdHJhY2UgdGhpcyBkb3duIHRvIHRoaXMgc291cmNlIGZpbGUsIHVuZGVyc3RhbmRpbmcgd2hhdCB2YWx1ZXMgbWlnaHQgYmUgc2V0IHRvIGNoYW5nZSB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mjo1Ny4zOTcwMzEzOTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MjA4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpSQU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTI6NTcuNDYwNDU2OTU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDc4NzY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpyYW0gUGF0Y2ggZm9yIExhcmdlIERldmljZSBTdXBwb3J0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50OiBpdCdzIGNoYW5naW5nIGB1MzIgaW5kZXhgIHRvIGB1bnNpZ25lZCBsb25nIGluZGV4YCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSwgYW5kIGl0IGluY2x1ZGVzIGEgbmV3IGNoZWNrIHdpdGhpbiBgZGlza3NpemVfc3RvcmVgLiBUaGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIGlzIGNsZWFyIOKAkyB0aGlzIGVuYWJsZXMgWnJhbSB0byBzdXBwb3J0IGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgYW5kIGl0J3MgYWxzbyBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvbiAzMi1iaXQgc3lzdGVtcy5cblxuV2FpdCBhIHNlY29uZCwgb24gMzItYml0IHN5c3RlbXMsIGB1bnNpZ25lZCBsb25nYCAqaXMqIDMyLWJpdCwgcmlnaHQ/IFNvLCBgbnVtX3BhZ2VzYCBpcyBsaW1pdGVkIHRvIDMyIGJpdHMuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBJZiB0aGUgcmVxdWVzdGVkIGBkaXNrc2l6ZWAgZXhjZWVkcyB0aGUgY2FwYWNpdHkgb2YgYSAzMi1iaXQgaW50ZWdlciBzaGlmdGVkIGxlZnQgYnkgdGhlIHBhZ2Ugc2l6ZSAoYDB4ZmZmZmZmZmYgXHUwMDNjXHUwMDNjIDEyYCwgb3IgYDB4ZmZmZmZmZmYwMDBgKSwgYG51bV9wYWdlc2Agd2lsbCBnZXQgdHJ1bmNhdGVkIGR1ZSB0byBvdmVyZmxvdy4gVGhhdCdzIHByZWNpc2VseSB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWRkcmVzcy4gVGhlIG5ldyBjaGVjazogYCgodTY0KW51bV9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgIT0gZGlza3NpemVgLCB3aWxsIGNhdGNoIHRoaXMgdHJ1bmNhdGlvbiBzY2VuYXJpbyBhbmQgcmV0dXJuIGAtRUlOVkFMYCB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIGRpc2sgc2l6ZS5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCBieSB0YWtpbmcgYSBsb29rIGF0IGBkaXNrc2l6ZV9zdG9yZWAgaW4gYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgYSBjYXJlZnVsIGV4YW1pbmF0aW9uIHdpbGwgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODU5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjAxLjc1NTI0Njc1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODcwOlxcdFxcbjI4NzE6XFx0c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4yODcyOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4yODczOlxcdHtcXG4yODc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xcbjI4NzU6XFx0XFx0dTY0IGRpc2tzaXplO1xcbjI4NzY6XFx0XFx0c3RydWN0IHpjb21wICpjb21wO1xcbjI4Nzc6XFx0XFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbjI4Nzg6XFx0XFx0aW50IGVycjtcXG4yODc5OlxcdFxcdHUzMiBwcmlvO1xcbjI4ODA6XFx0XFxuMjg4MTpcXHRcXHRkaXNrc2l6ZSA9IG1lbXBhcnNlKGJ1ZiwgTlVMTCk7XFxuMjg4MjpcXHRcXHRpZiAoIWRpc2tzaXplKVxcbjI4ODM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg4NDpcXHRcXG4yODg1OlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjI4ODY6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSkge1xcbjI4ODc6XFx0XFx0XFx0cHJfaW5mbyhcXFwiQ2Fubm90IGNoYW5nZSBkaXNrc2l6ZSBmb3IgaW5pdGlhbGl6ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4yODg4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjg4OTpcXHRcXHR9XFxuMjg5MDpcXHRcXG4yODkxOlxcdFxcdGRpc2tzaXplID0gUEFHRV9BTElHTihkaXNrc2l6ZSk7XFxuMjg5MjpcXHRcXHRudW1fcGFnZXMgPSBkaXNrc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjI4OTM6XFx0XFx0LyogU2xvdHMgYXJlIGFkZHJlc3NlZCBieSBhbiB1bnNpZ25lZCBsb25nIGluZGV4ICovXFxuMjg5NDpcXHRcXHRpZiAoIW51bV9wYWdlcyB8fCAoKHU2NCludW1fcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgIT0gZGlza3NpemUpXFxuMjg5NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODk2OlxcdFxcbjI4OTc6XFx0XFx0aWYgKCF6cmFtX21ldGFfYWxsb2MoenJhbSwgZGlza3NpemUpKVxcbjI4OTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjg5OTpcXHRcXG4yOTAwOlxcdFxcdGZvciAocHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QOyBwcmlvIFxcdTAwM2MgWlJBTV9NQVhfQ09NUFM7IHByaW8rKykge1xcbjI5MDE6XFx0XFx0XFx0aWYgKCF6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10pXFxuMjkwMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yOTAzOlxcdFxcbjI5MDQ6XFx0XFx0XFx0Y29tcCA9IHpjb21wX2NyZWF0ZSh6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10sXFxuMjkwNTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnpyYW0tXFx1MDAzZXBhcmFtc1twcmlvXSk7XFxuMjkwNjpcXHRcXHRcXHRpZiAoSVNfRVJSKGNvbXApKSB7XFxuMjkwNzpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIkNhbm5vdCBpbml0aWFsaXNlICVzIGNvbXByZXNzaW5nIGJhY2tlbmRcXFxcblxcXCIsXFxuMjkwODpcXHRcXHRcXHRcXHQgICAgICAgenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKTtcXG4yOTA5OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoY29tcCk7XFxuMjkxMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2NvbXBzO1xcbjI5MTE6XFx0XFx0XFx0fVxcbjI5MTI6XFx0XFxuMjkxMzpcXHRcXHRcXHR6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSA9IGNvbXA7XFxuMjkxNDpcXHRcXHR9XFxuMjkxNTpcXHRcXHR6cmFtLVxcdTAwM2VkaXNrc2l6ZSA9IGRpc2tzaXplO1xcbjI5MTY6XFx0XFx0c2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkoenJhbS1cXHUwMDNlZGlzaywgenJhbS1cXHUwMDNlZGlza3NpemUgXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUKTtcXG4yOTE3OlxcdFxcbjI5MTg6XFx0XFx0cmV0dXJuIGxlbjtcXG4yOTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzowMS43NTU0NDg1OThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxMDU3NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpyYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvdmVyZmxvdyBjaGVja3MgaW4gYGRpc2tzaXplX3N0b3JlYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBidW1wZWQgYGluZGV4YCB0byBhbiBgdW5zaWduZWQgbG9uZ2AgaW4gYSBidW5jaCBvZiBmdW5jdGlvbnMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBmdXp6IHRoaXMgdGhpbmcgdGhvcm91Z2hseS4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQuLi5cblxuV2FpdCBhIHNlY29uZCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBzeXNmcywgcmlnaHQ/IEFuZCBgZGlza3NpemVfc3RvcmVgICppcyogYSBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gQmluZ28hIFRoaXMgaXMgcGVyZmVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBoaXR0aW5nIGl0LiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIHRhcmdldCBhcmU6IGBkaXNrc2l6ZV9zdG9yZWAsIHRoZW4gYHpyYW1fbWV0YV9hbGxvY2AsIGB6cmFtX21ldGFfZnJlZWAsIGB6cmFtX3JlYWRfcGFnZWAsIGB6cmFtX3dyaXRlX3BhZ2VgLCBgenJhbV9idmVjX3JlYWRgLCBhbmQgYHpyYW1fYnZlY193cml0ZWAuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgY29uZmlybSBgZGlza3NpemVfc3RvcmVgIGlzbid0IHN0YXRpYy4gWWVwLCBpdCBpcy4gQnV0LCBpdCdzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIHRoZSBjb21waWxlciAqc2hvdWxkbid0KiBpbmxpbmUgaXQgYXdheSwgaXQncyByZWFjaGFibGUuIEkgaGF2ZSB0byBtYWtlIHN1cmUgaXQncyByZWFjaGFibGUuIFRoZSBpbnN0cnVjdGlvbnMgc2FpZCBzb21ldGhpbmcgYWJvdXQgdGhhdC4uLlxuXG5BaCwgcmlnaHQsIGhlcmUgaXQgaXM6IFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlwiIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBjYXNlLiBgZGlza3NpemVfc3RvcmVgIGlzIHN0YXRpYywgYnV0IGl0J3MgKm5vdCogaW5saW5lZCBiZWNhdXNlIGl0J3MgYSBzeXNmcyBjYWxsYmFjay5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSB0byBjb25zaWRlciBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjIsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzowNi43MDY1MDk0MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDg2Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bXmEtekEtWl0qW2EtekEtWl8wLTldKyBbYS16QS1aXzAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTU6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwienJhbTogXFxcIiBmbXRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQwOnN0YXRpYyBERUZJTkVfSURSKHpyYW1faW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKHpyYW1faW5kZXhfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQzLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTU0PXN0YXRpYyBpbmxpbmUgYm9vbCBzbG90X2FsbG9jYXRlZChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTUte1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1NjpcXHRyZXR1cm4gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCkgfHxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTctXFx0XFx0dGVzdF9zbG90X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fU0FNRSkgfHxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTM1NT1zdGF0aWMgc3NpemVfdCBpbml0c3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzYzLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjM2NDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zNjUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzY3PXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzcxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjM3MjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbGx1XFxcXG5cXFwiLCB6cmFtLVxcdTAwM2VkaXNrc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzczLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUxND1zdHJ1Y3QgenJhbV9yYl9yZXEge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTI5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjUzMDojZGVmaW5lIEZPVVJfSyh4KSAoKHgpICogKDEgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgLSAxMikpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTUzMS1zdGF0aWMgc3NpemVfdCBiZF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTU2Nz1zdGF0aWMgc3NpemVfdCBjb21wcmVzc2VkX3dyaXRlYmFja19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU3Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1Nzc6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHZhbCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNTc4LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTU5Nj1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfbGltaXRfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjA1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjYwNjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02MDctfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjM1PXN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19saW1pdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTY0My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo2NDQ6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWxsdVxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02NDUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjY2PXN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19iYXRjaF9zaXplX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNjc1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjY3NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgdmFsKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy02NzctfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NjkzPXN0YXRpYyBzc2l6ZV90IGJhY2tpbmdfZGV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNzA5LVxcdGlmIChJU19FUlIocCkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NzEwOlxcdFxcdHJldHVybiBQVFJfRVJSKHApO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTcxMS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0ODI9c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE0OTgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTQ5OTpcXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDAtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTUwMj1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUxMDpcXHRcXHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfc3luYyh6cmFtLCBwYWdlLCBpbmRleCwgYmxrX2lkeCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUxMS1cXHR9XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUxMjpcXHRyZXR1cm4gcmVhZF9mcm9tX2JkZXZfYXN5bmMoenJhbSwgcGFnZSwgaW5kZXgsIGJsa19pZHgsIHBhcmVudCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTUxMy19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTU2PXN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTYwLVxcdCAgICAhZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTYxOlxcdFxcdHJldHVybiByZWFkX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjItXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE2My1cXHRpZiAoIXRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX0hVR0UpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxNjQ6XFx0XFx0cmV0dXJuIHJlYWRfY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTY1LVxcdGVsc2VcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTY2OlxcdFxcdHJldHVybiByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjctfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjIxNj1zdGF0aWMgaW50IHpyYW1fYnZlY19yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMTktXFx0aWYgKGlzX3BhcnRpYWxfaW8oYnZlYykpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjIyMDpcXHRcXHRyZXR1cm4genJhbV9idmVjX3JlYWRfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjIxOlxcdHJldHVybiB6cmFtX3JlYWRfcGFnZSh6cmFtLCBidmVjLVxcdTAwM2Vidl9wYWdlLCBpbmRleCwgYmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjIyLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMzk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTMtXFx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyNTQ6XFx0XFx0cmV0dXJuIFBUUl9FUlIoKHZvaWQgKiloYW5kbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNTUtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMjgwPXN0YXRpYyBpbnQgenJhbV93cml0ZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTQtXFx0aWYgKHNhbWVfZmlsbGVkKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIyOTU6XFx0XFx0cmV0dXJuIHdyaXRlX3NhbWVfZmlsbGVkX3BhZ2UoenJhbSwgZWxlbWVudCwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyOTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzEwLVxcdFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMTE6XFx0XFx0cmV0dXJuIHdyaXRlX2luY29tcHJlc3NpYmxlX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzMTItXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMxOC1cXHRcXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzE5OlxcdFxcdHJldHVybiBQVFJfRVJSKCh2b2lkICopaGFuZGxlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzIwLVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNjU9c3RhdGljIGludCB6cmFtX2J2ZWNfd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW9fdmVjICpidmVjLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjM2OC1cXHRpZiAoaXNfcGFydGlhbF9pbyhidmVjKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzY5OlxcdFxcdHJldHVybiB6cmFtX2J2ZWNfd3JpdGVfcGFydGlhbCh6cmFtLCBidmVjLCBpbmRleCwgb2Zmc2V0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMzcwOlxcdHJldHVybiB6cmFtX3dyaXRlX3BhZ2UoenJhbSwgYnZlYy1cXHUwMDNlYnZfcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIzNzEtfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQzND1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MjMtXFx0XFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjUyNDpcXHRcXHRyZXR1cm4gUFRSX0VSUigodm9pZCAqKWhhbmRsZV9uZXcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MjUtXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhpb19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg2OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbV9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWJ1Z19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg4OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhjb21wYWN0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg5OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkaXNrc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MDpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW5pdHN0YXRlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkxOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZXNldCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MjpzdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX2xpbWl0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkzOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhtZW1fdXNlZF9tYXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTQ6c3RhdGljIERFVklDRV9BVFRSX1dPKGlkbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTU6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk2LSNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk4OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhiYWNraW5nX2Rldik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5OTpzdGF0aWMgREVWSUNFX0FUVFJfV08od3JpdGViYWNrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAwOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyh3cml0ZWJhY2tfbGltaXQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDE6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdF9lbmFibGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19iYXRjaF9zaXplKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAzOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wcmVzc2VkX3dyaXRlYmFjayk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA1LSNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNjpzdGF0aWMgREVWSUNFX0FUVFJfUlcocmVjb21wX2FsZ29yaXRobSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNzpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb21wcmVzcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwOC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhhbGdvcml0aG1fcGFyYW1zKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzEyOD1zdGF0aWMgaW50IHpyYW1fcmVtb3ZlKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE2NS1cXHQgKiBkaXNrc2l6ZV9zdG9yZSgpIG1heSBiZSBjYWxsZWQgaW4gYmV0d2VlbiB6cmFtX3Jlc2V0X2RldmljZSgpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2NjpcXHQgKiBhbmQgZGVsX2dlbmRpc2soKSwgc28gcnVuIHRoZSBsYXN0IHJlc2V0IHRvIGF2b2lkIGxlYWtpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTY3LVxcdCAqIGFueXRoaW5nIGFsbG9jYXRlZCB3aXRoIGRpc2tzaXplX3N0b3JlKClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxODQ9c3RhdGljIHNzaXplX3QgaG90X2FkZF9zaG93KGNvbnN0IHN0cnVjdCBjbGFzcyAqY2xhc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTk1LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE5NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTk3LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMyMDI9c3RhdGljIHNzaXplX3QgaG90X3JlbW92ZV9zdG9yZShjb25zdCBzdHJ1Y3QgY2xhc3MgKmNsYXNzLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzIzMC19XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzIzMTpzdGF0aWMgQ0xBU1NfQVRUUl9XTyhob3RfcmVtb3ZlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzowNi43NjkwMDI1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM2NDE5MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHdpdGhpbiB0aGUgWlJBTSBjb2RlLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyB3ZSBoYW5kbGUgZGlzayBzaXplIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHdlIGluZGV4IGRhdGEuIFNwZWNpZmljYWxseSwgdGhlIGBkaXNrc2l6ZV9zdG9yZWAgaXMgZ2V0dGluZyB0d2Vha2VkLCBhbmQgdGhlIGBpbmRleGAgdmFyaWFibGUgaXMgYmVpbmcgcHJvbW90ZWQgdG8gYW4gYHVuc2lnbmVkIGxvbmdgIGluIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbW1lZGlhdGVseSBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFkZHJlc3NpbmcgYW5kIG92ZXJhbGwgY2FwYWNpdHkgbGltaXRzIHdpdGhpbiB0aGUgWlJBTSBkZXZpY2UuXG5cbkknbSBzZWVpbmcgdGhhdCBmdW5jdGlvbnMgbGlrZSBgenJhbV9idmVjX3JlYWRgLCBgenJhbV9idmVjX3dyaXRlYCwgYHpyYW1fcmVhZF9wYWdlYCwgYHpyYW1fd3JpdGVfcGFnZWAsIGB6cmFtX2Jpb19yZWFkYCwgYHpyYW1fYmlvX3dyaXRlYCwgYW5kIGB6cmFtX2Jpb19kaXNjYXJkYCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSB1dGlsaXppbmcgdGhpcyBuZXcgYGluZGV4YCB0eXBlLiBUaGF0J3MgYSBwcmV0dHkgYnJvYWQgc2NvcGUsIHdoaWNoIG1lYW5zIHRoaXMgY2hhbmdlIGlzIGZvdW5kYXRpb25hbCB0byBob3cgWlJBTSBpbnRlcmFjdHMgd2l0aCBib3RoIHRoZSBibG9jayBkZXZpY2UgYW5kIHBhZ2UtbGV2ZWwgb3BlcmF0aW9ucy5cblxuTm93LCB0aG9zZSBgenJhbV9iaW9fLi4uYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgcmlnaHQ/IFllcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgYXJlIGNhbGxlZC4gQWgsIHRoZXkncmUgY2FsbGVkIGZyb20gYHpyYW1fc3VibWl0X2Jpb2AuIEFuZCB3YWl0IGEgbWludXRlLi4uIGB6cmFtX3N1Ym1pdF9iaW9gIGlzICoqbm90Kiogc3RhdGljLiBJdCdzIHRoZSBgc3VibWl0X2Jpb2AgY2FsbGJhY2sgZm9yIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucy4gU28sIGFueSBjaGFuZ2UgdGhlcmUgaXMgcHJldHR5IGNyaXRpY2FsLiBUaGlzIGlzIG1ha2luZyBtZSB0aGluayB3ZSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaGFwcGVucyBhdCB0aGUgYmlvIHN1Ym1pc3Npb24gbGV2ZWwgaW4gcmVsYXRpb24gdG8gdGhlc2UgaW5kZXggY2hhbmdlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcG90ZW50aWFsIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgZGF0YSBpbnRlZ3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjExLjMwNTQyNjM3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1MzAxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9zdWJtaXRfYmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI3NTQ9c3RhdGljIHZvaWQgenJhbV9iaW9fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODYtICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjc4NzpzdGF0aWMgdm9pZCB6cmFtX3N1Ym1pdF9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI3ODgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5NzktXFx0Lm9wZW4gPSB6cmFtX29wZW4sXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk4MDpcXHQuc3VibWl0X2JpbyA9IHpyYW1fc3VibWl0X2JpbyxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTgxLVxcdC5zd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPSB6cmFtX3Nsb3RfZnJlZV9ub3RpZnksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjExLjM2Njk2MjIyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3NTI2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBjaGVja2xpc3QgaGVyZSByZWdhcmRpbmcgdGhlIGB6cmFtYCBkcml2ZXIuLi5cblxuKipacmFtIERyaXZlciBFbnRyeSBQb2ludCBBbmFseXNpcyoqXG5cblJpZ2h0LCBgenJhbV9zdWJtaXRfYmlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIGEga2V5IGludGVybmFsIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgZGlyZWN0bHkgZXhwb3NlZCBleHRlcm5hbGx5LiBUaGVyZWZvcmUsIGl0IHdvbid0IGJlIGNhbGxlZCBkaXJlY3RseS4gT2theSwgZ29vZC5cblxuU28sIGlmIGB6cmFtX3N1Ym1pdF9iaW9gIGlzIHRoZSB3b3JraG9yc2UgaW50ZXJuYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBleHRlcm5hbGx5IGV4cG9zZWQgZW50cnkgcG9pbnRzIGFuZCBjb25zaWRlciBob3cgdGhlIGRhdGEgZmxvd3MgYXJvdW5kIHRoaXMgaW50ZXJuYWwgZnVuY3Rpb24uIExldCBtZSBqb3QgZG93biB0aGUgcG90ZW50aWFsIGNhbmRpZGF0ZXM6IGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX21ldGFfYWxsb2NgLCBhbmQgYHpyYW1fbWV0YV9mcmVlYC4gVGhvc2UgKmZlZWwqIGxpa2UgdGhlIHBsYWNlcyB3aGVyZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkcml2ZXIgd291bGQgdHJ1bHkgb3JpZ2luYXRlLiBgZGlza3NpemVfc3RvcmVgLCB0aGUgc2l6ZSBvZiB0aGUgZGlzaywgdGhlbiB0aGUgYWxsb2NhdGlvbiwgdGhlbiBmcmVlaW5nLCBzZWVtcyBsaWtlIGEgdmFsaWQsIGFuZCB0eXBpY2FsLCBsaWZlY3ljbGUuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGFyZSAqYW55KiBmdW5jdGlvbnMgaW4gYHpyYW1fZHJ2LmNgICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYz8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gYXQgdGhpcyBwb2ludC4gVGhhdCdzIHRoZSBrZXkgdG8gdHJhY2luZyB0aGUgcGF0aCBvZiBjb21tYW5kIGZsb3cuIElmIHRoZXJlIGFyZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhhdCBjb3VsZCByZWFsbHkgaW1wYWN0IHRoZSBlbnRpcmUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg4LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6MTUuMzY0NDkwODA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc5Njg0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgW2EtekEtWl8wLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQwOnN0YXRpYyBERUZJTkVfSURSKHpyYW1faW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00MS0vKiBpZHIgaW5kZXggbXVzdCBiZSBwcm90ZWN0ZWQgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0MjpzdGF0aWMgREVGSU5FX01VVEVYKHpyYW1faW5kZXhfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQzLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpyYW1fZGV2b3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjk4NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhpb19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg2OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhtbV9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWJ1Z19zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg4OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhjb21wYWN0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTg5OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkaXNrc2l6ZSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MDpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaW5pdHN0YXRlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkxOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZXNldCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5MjpzdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX2xpbWl0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTkzOnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhtZW1fdXNlZF9tYXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTQ6c3RhdGljIERFVklDRV9BVFRSX1dPKGlkbGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5OTU6c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk2LSNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk4OnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhiYWNraW5nX2Rldik7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjk5OTpzdGF0aWMgREVWSUNFX0FUVFJfV08od3JpdGViYWNrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAwOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyh3cml0ZWJhY2tfbGltaXQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDE6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19saW1pdF9lbmFibGUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKHdyaXRlYmFja19iYXRjaF9zaXplKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDAzOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wcmVzc2VkX3dyaXRlYmFjayk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwNC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA1LSNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNjpzdGF0aWMgREVWSUNFX0FUVFJfUlcocmVjb21wX2FsZ29yaXRobSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAwNzpzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjb21wcmVzcyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAwOC0jZW5kaWZcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhhbGdvcml0aG1fcGFyYW1zKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzIwMj1zdGF0aWMgc3NpemVfdCBob3RfcmVtb3ZlX3N0b3JlKGNvbnN0IHN0cnVjdCBjbGFzcyAqY2xhc3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMjMwLX1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMjMxOnN0YXRpYyBDTEFTU19BVFRSX1dPKGhvdF9yZW1vdmUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMyMzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjE2LjA0MjQ2NDAzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk0NzMxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgenJhbV9kcnYuY2AgZm9yIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhc2lkZSBmcm9tIHRoZSBtb2R1bGUgaW5pdCBhbmQgZXhpdCBmdW5jdGlvbnMsIGB6cmFtX2Rydi5jYCBzZWVtZWQgdG8gbGFjayBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhlbiBJIHJlbWVtYmVyZWQgYHpyYW1fc3VibWl0X2Jpb2AgYW5kIGBkaXNrc2l6ZV9zdG9yZWAuIFdhaXQsIHRob3NlIGFyZSBhY3R1YWxseSAqdGhlKiBlbnRyeSBwb2ludHMgZm9yIEkvTyBhbmQgZGV2aWNlIHNpemUgY29uZmlndXJhdGlvbiwgcmVzcGVjdGl2ZWx5LiBJIHdhcyBnb2luZyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHdoYXQgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5LiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuXG5cblRoZSBnb29kIG5ld3MgaXMsIHNpbmNlIGBkaXNrc2l6ZV9zdG9yZWAgYW5kIGB6cmFtX3N1Ym1pdF9iaW9gIGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gc3lzZnMgYW5kIHRoZSBibG9jayBsYXllciwgdGhleSdyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIFRoZXkgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBzbyB0aGV5IGZpdCB0aGUgY3JpdGVyaWEgcGVyZmVjdGx5LiBJIHdpbGwgaW5jbHVkZSB0aG9zZS5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgdG8gY2hlY2sgaWYgSSBtaXNzZWQgYW55IG90aGVyIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIHN1Y2ggYXMgYHpyYW1fYnZlY19yZWFkYCwgYHpyYW1fYnZlY193cml0ZWAsIGB6cmFtX3JlYWRfcGFnZWAsIGFuZCBgenJhbV93cml0ZV9wYWdlYCBhcmUgY2FsbGVkIGZyb20gYHpyYW1fYmlvX3JlYWRgIGFuZCBgenJhbV9iaW9fd3JpdGVgIHdoaWNoIGluIHR1cm4gYXJlIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBUaGV5ICptaWdodCogYmUgaW5saW5lZC4gQnV0LCBpdCBpcyBzYWZlIHRvIGp1c3QgaW5jbHVkZSBgenJhbV9zdWJtaXRfYmlvYCBhbmQgYGRpc2tzaXplX3N0b3JlYC5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSXQncyBvYnZpb3VzIHRoYXQgYENPTkZJR19aUkFNYCBpcyBuZWVkZWQuIE5vdywgdGhlIHBhdGNoIG1vZGlmaWVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGxpa2UgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgYHJlYWRfZnJvbV96c3Bvb2xgLCBgenJhbV93cml0ZWJhY2tfY29tcGxldGVgLCBhbmQgbWFueSBtb3JlIHVuZGVyIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLiBBbHNvLCBgcmVjb21wcmVzc19zbG90YCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGVyZWZvcmUsIEknbGwgbmVlZCB0byBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBhbmQgYFpSQU1fTVVMVElfQ09NUGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjIyLjIzNzE5ODM2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3Mjc2MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaUkFNX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTk1PWNvbmZpZyBaUkFNX0RFRl9DT01QXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjIyLjM0NDQ4MDk4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyMDE0NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYFpSQU1fV1JJVEVCQUNLYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBgWlJBTV9XUklURUJBQ0tgIHNldHRpbmcgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgZXNwZWNpYWxseSBnaXZlbiBteSBleHBlcmllbmNlLiBXaGF0IGV4YWN0bHkgcmVsaWVzIG9uIHRoaXMgZmVhdHVyZT8gSXMgaXQgYSBjb3JlIGNvbXBvbmVudCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG1vZHVsZXMsIGRyaXZlcnMsIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVwZW5kIG9uIGBaUkFNX1dSSVRFQkFDS2AgYmVpbmcgZW5hYmxlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3MgbGlrZWx5IGEgcmlwcGxlIGVmZmVjdDsgY2hhbmdpbmcgdGhpcyBjb3VsZCBpbXBhY3Qgc2V2ZXJhbCBvdGhlciBhcmVhcy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3IgYW55IGNvZGUgZGlyZWN0bHkgcmVmZXJlbmNpbmcgdGhlIHN5bWJvbCwgdGhlbiB3b3JrIG91dHdhcmRzLCB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrcyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIGNyaXRpY2FsLiBUaGlzIGFsc28gd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZSBzZXR1cCBhbmQgaWYgYW55IGNoYW5nZXMgc2hvdWxkIGJlIG1hZGUgdG8gb3B0aW1pemUgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBhIG5vdGUgdG8gbXlzZWxmIHRvIGVuc3VyZSB0aGF0IG15IGluZm9ybWF0aW9uIGdhdGhlcmluZyBpcyBjb21wbGV0ZSBiZWZvcmUgbWFraW5nIGFueSBzdWdnZXN0aW9ucywgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJIHNob3VsZCBiZSBjb21wcmVoZW5zaXZlIGluIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjMwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6MjYuMzM2NDk4MDU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRkZWZhdWx0IFxcXCJsejRcXFwiIGlmIFpSQU1fREVGX0NPTVBfTFo0XFxuIDEwMTpcXHRcXHRkZWZhdWx0IFxcXCJsejRoY1xcXCIgaWYgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbiAxMDI6XFx0XFx0ZGVmYXVsdCBcXFwienN0ZFxcXCIgaWYgWlJBTV9ERUZfQ09NUF9aU1REXFxuIDEwMzpcXHRcXHRkZWZhdWx0IFxcXCJkZWZsYXRlXFxcIiBpZiBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG4gMTA0OlxcdFxcdGRlZmF1bHQgXFxcIjg0MlxcXCIgaWYgWlJBTV9ERUZfQ09NUF84NDJcXG4gMTA1OlxcdFxcdGRlZmF1bHQgXFxcInVuc2V0LXZhbHVlXFxcIlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgWlJBTV9XUklURUJBQ0tcXG4gMTA4OlxcdCAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4gMTA5OlxcdCAgICAgICBkZXBlbmRzIG9uIFpSQU1cXG4gMTEwOlxcdCAgICAgICBoZWxwXFxuIDExMTpcXHRcXHQgVGhpcyBsZXRzIHpyYW0gZW50cmllcyAoaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlcykgYmUgd3JpdHRlblxcbiAxMTI6XFx0XFx0IGJhY2sgdG8gYSBiYWNraW5nIGRldmljZSwgaGVscGluZyBzYXZlIG1lbW9yeS5cXG4gMTEzOlxcdFxcdCBGb3IgdGhpcyBmZWF0dXJlLCBhZG1pbiBzaG91bGQgc2V0IHVwIGJhY2tpbmcgZGV2aWNlIHZpYVxcbiAxMTQ6XFx0XFx0IC9zeXMvYmxvY2svenJhbVgvYmFja2luZ19kZXYuXFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdCBXaXRoIC9zeXMvYmxvY2svenJhbVgve2lkbGUsd3JpdGViYWNrfSwgYXBwbGljYXRpb24gY291bGQgYXNrXFxuIDExNzpcXHRcXHQgaWRsZSBwYWdlJ3Mgd3JpdGViYWNrIHRvIHRoZSBiYWNraW5nIGRldmljZSB0byBzYXZlIGluIG1lbW9yeS5cXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0IFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxMjA6XFx0XFxuIDEyMTpcXHRjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG4gMTIyOlxcdFxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4gMTIzOlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAxMjQ6XFx0XFx0aGVscFxcbiAxMjU6XFx0XFx0ICBXaXRoIHRoaXMgZmVhdHVyZSB6cmFtIHRyYWNrcyBhY2Nlc3MgdGltZSBvZiBldmVyeSBzdG9yZWRcXG4gMTI2OlxcdFxcdCAgZW50cnkgKHBhZ2UpLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYSBtb3JlIGZpbmUgZ3JhaW5lZCBJRExFXFxuIDEyNzpcXHRcXHQgIHBhZ2VzIHdyaXRlYmFjay5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuIDEzMDpcXHRcXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4gMTMxOlxcdFxcdGRlcGVuZHMgb24gWlJBTSBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbiAxMzI6XFx0XFx0c2VsZWN0IFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuIDEzMzpcXHRcXHRoZWxwXFxuIDEzNDpcXHRcXHQgIFdpdGggdGhpcyBmZWF0dXJlLCBhZG1pbiBjYW4gdHJhY2sgdGhlIHN0YXRlIG9mIGFsbG9jYXRlZCBibG9ja3NcXG4gMTM1OlxcdFxcdCAgb2YgelJBTS4gQWRtaW4gY291bGQgc2VlIHRoZSBpbmZvcm1hdGlvbiB2aWFcXG4gMTM2OlxcdFxcdCAgL3N5cy9rZXJuZWwvZGVidWcvenJhbS96cmFtWC9ibG9ja19zdGF0ZS5cXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi96cmFtLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMTM5OlxcdFxcbiAxNDA6XFx0Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbiAxNDE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcXFwiXFxuIDE0MjpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gMTQzOlxcdFxcdGhlbHBcXG4gMTQ0OlxcdFxcdCAgVGhpcyB3aWxsIGVuYWJsZSBtdWx0aS1jb21wcmVzc2lvbiBzdHJlYW1zLCBzbyB0aGF0IFpSQU0gY2FuXFxuIDE0NTpcXHRcXHQgIHJlLWNvbXByZXNzIHBhZ2VzIHVzaW5nIGEgcG90ZW50aWFsbHkgc2xvd2VyIGJ1dCBtb3JlIGVmZmVjdGl2ZVxcbiAxNDY6XFx0XFx0ICBjb21wcmVzc2lvbiBhbGdvcml0aG0uIE5vdGUsIHRoYXQgSURMRSBwYWdlIHJlY29tcHJlc3Npb25cXG4gMTQ3OlxcdFxcdCAgcmVxdWlyZXMgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjI2LjMzNjU2ODIwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU0MjIwOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBaUkFNIENvbmZpZ3VyYXRpb24gYW5kIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIFpSQU0gY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGFuZCBgWlJBTV9NVUxUSV9DT01QYC4gSG1tLCB3YWl0LCBpdCBsb29rcyBsaWtlIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgYWxzbyBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2g/IEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBgcmVhZF9ibG9ja19zdGF0ZWAuIExvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgYGluZGV4YCB2YXJpYWJsZSB0eXBlLCBjaGFuZ2luZyBpdCBmcm9tIGBzc2l6ZV90YCB0byBgdW5zaWduZWQgbG9uZ2AuIEFuZCB0aGVyZSdzIGFsc28gYSBmb3JtYXQgc3RyaW5nIGNoYW5nZSBpbiBgc25wcmludGZgIGZyb20gYCV6ZGAgdG8gYCVsdWAuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGxhcmdlciB2YWx1ZXMgcG90ZW50aWFsbHkuIFRoZSBgcmVhZF9ibG9ja19zdGF0ZWAgZnVuY3Rpb24gc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGJsb2NrIHRvIHRoZSB1c2VyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZC4gVGhlIHB1cnBvc2UgaXMgdG8gY2hlY2sgdGhlIGFjdGl2aXR5IHN0YXRlIGFuZCB3aGV0aGVyIHdyaXRlYmFjayBpcyBlbmFibGVkIGZvciBlYWNoIGJsb2NrLlxuXG5TaW5jZSBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgIGlzIGJlaW5nIG1vZGlmaWVkLCB0aGF0IGNvbmZpZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvby4gSXQgbG9va3MgbGlrZSBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgIGlzIHNlbGVjdGVkIGJ5IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgaW1wb3J0YW50IHN5bWJvbHMuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlOiBgZGlza3NpemVfc3RvcmVgLCBgenJhbV9zdWJtaXRfYmlvYCwgYHJlYWRfYmxvY2tfc3RhdGVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYW5kIGByZWNvbXByZXNzX3N0b3JlYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBgd3JpdGViYWNrX3N0b3JlYCBhbmQgYHJlY29tcHJlc3Nfc3RvcmVgIGFyZSBhY3R1YWxseSBwcmVzZW50LCBJIHRoaW5rIHRoYXQgaXMgdGhlIG5leHQgc3RlcCB0byByZXZpZXcgdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjMyLjI5MDc5MjIwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MTM0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGViYWNrX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTUzMT1zdGF0aWMgc3NpemVfdCBiZF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU0Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo1NDc6c3RhdGljIHNzaXplX3QgY29tcHJlc3NlZF93cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTU0OC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTE5OT1zdGF0aWMgdm9pZCBzY2FuX3Nsb3RzX2Zvcl93cml0ZWJhY2soc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTIzNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMjM1OnN0YXRpYyBzc2l6ZV90IHdyaXRlYmFja19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTIzNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjMyLjM1ODcwOTIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjY1OTY0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEFja25vd2xlZGdtZW50IG9mIGB3cml0ZWJhY2tfc3RvcmVgKipcblxuUmlnaHQsIHNvLCB0aGUgaW5pdGlhbCBwcmVtaXNlIGlzIGNsZWFyIC0gdGhlIGB3cml0ZWJhY2tfc3RvcmVgIGV4aXN0cy4gTm8gbmVlZCB0byBiZWxhYm9yIHRoZSBwb2ludC4gV2UncmUgc3RhcnRpbmcgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY29tcG9uZW50LCBvciBkYXRhIHN0cnVjdHVyZSwgaXMgaW5kZWVkIHByZXNlbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBzeXN0ZW0gd2UncmUgYW5hbHl6aW5nLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBnaXZlbi4gV2UncmUgbm90IGRlYmF0aW5nIGl0cyBleGlzdGVuY2U7IHdlJ3JlIHByb2NlZWRpbmcgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCdzIHRoZXJlIGFuZCBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIFdlIGNhbiBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjM1LjM4NTMwOTA5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2MDQwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjb21wcmVzc19zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDM0PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjU0MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNTQxOnN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1NDItXFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjM1LjQ1NDkxNzY2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIyMDE3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVmVyaWZ5aW5nIEtleSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgY29kZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgYHJlY29tcHJlc3Nfc3RvcmVgLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIG9mIHRoZSBgcmVhZF9ibG9ja19zdGF0ZWAgZnVuY3Rpb24uIEl0cyBjb3JyZWN0IG9wZXJhdGlvbiBpcyBjcml0aWNhbCBmb3IgZXZlcnl0aGluZyB0byB3b3JrIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrIHN0YXRlIGlzIGJlaW5nIHJlYWQgY29ycmVjdGx5LCBvdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHN0b3JlIHdpbGwganVzdCByZXR1cm4gZ2FyYmFnZS4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGFsbCB0aGUgcG9zc2libGUgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1MzozOC4zNzY5Mzg2NjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDA3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfYmxvY2tfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTUzNz1zdGF0aWMgdm9pZCB6cmFtX2RlYnVnZnNfZGVzdHJveSh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU0MS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTQyOnN0YXRpYyBzc2l6ZV90IHJlYWRfYmxvY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTU0My1cXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY196cmFtX2Jsb2NrX3N0YXRlX29wID0ge1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1OTgtXFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTk5OlxcdC5yZWFkID0gcmVhZF9ibG9ja19zdGF0ZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjAwLVxcdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6MzguNDU0MzUwMjkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTIzMjQ5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb24qKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGNvbmZpcm1zIHRoYXQgYHJlYWRfYmxvY2tfc3RhdGVgIGlzIGRlZmluaXRlbHkgYXZhaWxhYmxlLiBHb29kLCB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gYW5kIHdlIG5lZWQgdG8gaGF2ZSB0aGF0IHJlYWR5LlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgdG9vIGZhciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZXRhZGF0YSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHdvcmsgd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvbiBgenJhbV9tZXRhX2FsbG9jYCBhbmQgYHpyYW1fbWV0YV9mcmVlYC4gSSB3aWxsIHdhbnQgdG8gYmUgY29tZm9ydGFibGUgd2l0aCB0aGlzIGNvZGUsIGFuZCBrbm93IHRoYXQgaXQgaXMgbm90IGJ1Z2d5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjQxLjgwNjY3OTczMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0OTMyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienJhbV9tZXRhX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE5NzQ9c3RhdGljIHZvaWQgenJhbV9tZXRhX2ZyZWUoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE5OTEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTk5MjpzdGF0aWMgYm9vbCB6cmFtX21ldGFfYWxsb2Moc3RydWN0IHpyYW0gKnpyYW0sIHU2NCBkaXNrc2l6ZSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xOTkzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4NzE9c3RhdGljIHNzaXplX3QgZGlza3NpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4OTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6Mjg5NzpcXHRpZiAoIXpyYW1fbWV0YV9hbGxvYyh6cmFtLCBkaXNrc2l6ZSkpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg5OC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6NTM6NDEuODYyMTc3Mjg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzIzMzE5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBJbmxpbmluZyBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHpyYW1fbWV0YV9hbGxvY2AgYW5kIGB6cmFtX21ldGFfZnJlZWAgYXJlIGluZGVlZCBwcmVzZW50IGluIHRoZSBjb2RlIGJhc2UuIE15IGluaXRpYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHMgaW5jbHVkZWQgdGhvc2UsIGFuZCBpdCBzZWVtZWQgbGlrZSBhIHZhbGlkIHN0YXJ0aW5nIHBvaW50LlxuXG5CdXQgbm93IEknbSB0aGlua2luZywgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGVzZSBmdW5jdGlvbnMsIGB6cmFtX21ldGFfYWxsb2NgIGFuZCBgenJhbV9tZXRhX2ZyZWVgLCBhcmUgc3RhdGljLCBhbmQgdGhlIG9ubHkgY2FsbCBzaXRlcyBJJ20gc2VlaW5nIGFyZSBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgYW5kIGB6cmFtX3Jlc2V0X2RldmljZWAuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpbmxpbmluZyBpcyBhIGxpa2VseSBvcHRpbWl6YXRpb24uIElmIHRoZXkgKmFyZSogaW5saW5lZCwgdGhlbiBmb2N1c2luZyBvbiB0aGUgKmNhbGxlcnMqIG9mIHRob3NlIGZ1bmN0aW9ucyAoc3BlY2lmaWNhbGx5IGBkaXNrc2l6ZV9zdG9yZWAgYW5kIGB6cmFtX3Jlc2V0X2RldmljZWApIGlzIHRoZSBiZXR0ZXIgYXBwcm9hY2guXG5cbkxldCBtZSBjb25maXJtIHRoZSBjYWxsIHNpdGVzOiBgenJhbV9tZXRhX2FsbG9jYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSB3aXRoaW4gYGRpc2tzaXplX3N0b3JlYCwgc3VnZ2VzdGluZyBpdCdzIHJpcGUgZm9yIGlubGluaW5nLiBgenJhbV9tZXRhX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGB6cmFtX3Jlc2V0X2RldmljZWAgYW5kIGFsc28sIGltcG9ydGFudGx5LCBmcm9tIGBkaXNrc2l6ZV9zdG9yZWAgKGxpa2VseSBvbiB0aGUgZXJyb3IgcGF0aCkuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIHNpbXBsaWZ5IG15IGZvY3VzLiBJbnN0ZWFkIG9mIGxpc3RpbmcgYHpyYW1fbWV0YV9hbGxvY2AgYW5kIGB6cmFtX21ldGFfZnJlZWAsIGl0J3MgbXVjaCBtb3JlIHJlbGV2YW50IHRvIGluY2x1ZGUgYGRpc2tzaXplX3N0b3JlYCBhbmQgZWl0aGVyIGB6cmFtX3Jlc2V0X2RldmljZWAgb3IsIHBlcmhhcHMgbW9yZSBnZW5lcmljYWxseSwgdGhlIGByZXNldF9zdG9yZWAgZnVuY3Rpb24sIGlmIHRoYXQncyBhIG1vcmUgYWNjdXJhdGUgbmFtZSB3aXRoaW4gdGhlIGNvZGUncyBjb250ZXh0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mzo0Ni43MzQ1MTI0MzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEyMjQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNldF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODcxPXN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTI1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI5MjY6c3RhdGljIHNzaXplX3QgcmVzZXRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI5MjctXFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMxMjg9c3RhdGljIGludCB6cmFtX3JlbW92ZShzdHJ1Y3QgenJhbSAqenJhbSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNDYtXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ3OlxcdFxcdCAqIElmIHdlIHdlcmUgY2xhaW1lZCBieSByZXNldF9zdG9yZSgpLCBkZWxfZ2VuZGlzaygpIHdpbGxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTQ4OlxcdFxcdCAqIHdhaXQgdW50aWwgcmVzZXRfc3RvcmUoKSBpcyBkb25lLCBzbyBub3RoaW5nIG5lZWQgdG8gZG8uXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzE0OS1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNjAtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzE2MTpcXHQvKiBkZWxfZ2VuZGlzayBkcmFpbnMgcGVuZGluZyByZXNldF9zdG9yZSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxNjItXFx0V0FSTl9PTl9PTkNFKGNsYWltZWQgXFx1MDAyNlxcdTAwMjYgenJhbS1cXHUwMDNlY2xhaW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1Mzo0Ni44NTE2NTA3NTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MTM5NDYwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFpSQU0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGByZXNldF9zdG9yZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50IGluIHRoZSBjb2RlLiBHaXZlbiB0aGF0LCBhbmQgYWZ0ZXIgZXhhbWluaW5nIHRoZSBjb2RlLCBJIHRoaW5rIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZTogYGRpc2tzaXplX3N0b3JlYCwgYHpyYW1fc3VibWl0X2Jpb2AsIGByZWFkX2Jsb2NrX3N0YXRlYCwgYHdyaXRlYmFja19zdG9yZWAsIGByZWNvbXByZXNzX3N0b3JlYCwgYW5kIGByZXNldF9zdG9yZWAuICBUaGV5IHNlZW0gdG8gY292ZXIgdGhlIGtleSBhcmVhcyBvZiB0aGUgY2hhbmdlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEkgaW5pdGlhbGx5IHRob3VnaHQgYENPTkZJR19aUkFNYCBtaWdodCBiZSBlbm91Z2gsIGJ1dCBhIGNsb3NlciBsb29rIHRlbGxzIG1lIHdlIGFsc28gbmVlZCBgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCwgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLCBhbmQgYENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR2AuICBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19ERUJVR19GU2AgaXMgYSBkZXBlbmRlbmN5IGZvciBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGluY2x1ZGVkIGFzIHdlbGwuICBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgIGRlcGVuZGVuY3kuLi5ZZXAsIGl0IGRlcGVuZHMgb24gYm90aCBgWlJBTWAgYW5kIGBERUJVR19GU2AuIEFuZCBJIHNlZSB0aGF0IGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgaXMgc2VsZWN0ZWQgYnkgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYC5cblxuU28sIHRoZSBkZWZpbml0aXZlIGVuYWJsZSBjb25maWdzIHNob3VsZCBiZTogYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AuXG5cbkknbGwgcXVpY2tseSBzY2FuIHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBjb25maWdzLiAgUmlnaHQsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGNvdmVyIGZ1bmN0aW9ucyB1bmRlciBgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCBsaWtlIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGByZWFkX2Zyb21fenNwb29sYCwgYHpyYW1fd3JpdGViYWNrX2NvbXBsZXRlYCwgYHpyYW1fd3JpdGViYWNrX3Nsb3RzYCwgYHNjYW5fc2xvdHNfZm9yX3dyaXRlYmFja2AsIGB3cml0ZWJhY2tfc3RvcmVgLCBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgenJhbV9kZWZlcnJlZF9kZWNvbXByZXNzYCwgYHJlYWRfZnJvbV9iZGV2X2FzeW5jYCwgYHJlYWRfZnJvbV9iZGV2X3N5bmNgLCBhbmQgYHJlYWRfZnJvbV9iZGV2YCwgYW5kIGByZWFkX2Jsb2NrX3N0YXRlYCB1bmRlciBgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGByZWNvbXByZXNzX3Nsb3RgIGFuZCBgcmVjb21wcmVzc19zdG9yZWAgdW5kZXIgYENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiAgU28gbXkgZWFybGllciBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiBpcyBzb2xpZC5cblxuQWxyaWdodCwgbGV0J3MgcmV2aXNpdCB0aG9zZSBmb2N1cyBzeW1ib2xzOiBgZGlza3NpemVfc3RvcmVgLCBgenJhbV9zdWJtaXRfYmlvYCwgYHJlYWRfYmxvY2tfc3RhdGVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBhbmQgYHJlc2V0X3N0b3JlYC4gIFRoZXkncmUgYWxsIGVpdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBBUEkgZW50cnkgcG9pbnRzLCBzcGVjaWZpY2FsbHkgc3lzZnMsIGJsb2NrIGxheWVyLCBvciBkZWJ1Z2ZzLiAgQ3J1Y2lhbGx5LCB0aGV5J3JlICpub3QqIGlubGluZWQgYW5kIGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBUaGF0IGxvb2tzIGdvb2QuXG5cbk5vdywgbGV0IG1lIGNvbmZpcm0gdGhhdCBgenJhbV9zdWJtaXRfYmlvYCBpcyB0aGUgY29ycmVjdCBibG9jayBsYXllciBlbnRyeSBwb2ludC4gIFllcywgaXQncyBhc3NpZ25lZCB0byBgenJhbV9kZXZvcHMuc3VibWl0X2Jpb2AuICBBcmUgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gY29uc2lkZXI/IFJpZ2h0LCBgenJhbV9idmVjX3JlYWRgIGFuZCBgenJhbV9idmVjX3dyaXRlYCBhcmUgY2FsbGVkIGZyb20gYHpyYW1fYmlvX3JlYWRgIGFuZCBgenJhbV9iaW9fd3JpdGVgLCB3aGljaCBhcmUgKmluIHR1cm4qIGNhbGxlZCBmcm9tIGB6cmFtX3N1Ym1pdF9iaW9gLiBTbywgYHpyYW1fc3VibWl0X2Jpb2AgYWN0cyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnQuXG5cbk9rYXksIGxldCdzIGNyeXN0YWxsaXplIHRoZSB0ZXN0IHJhdGlvbmFsZS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIHRoZSB6cmFtIHNsb3QgaW5kZXggdHlwZSBmcm9tIGB1MzJgIHRvIGB1bnNpZ25lZCBsb25nYCB0aHJvdWdob3V0IHRoZSBkcml2ZXIuIFRoaXMgaXMgdG8gc3VwcG9ydCBsYXJnZXIgZGV2aWNlcyAob3ZlciAxNlRCKSBvbiA2NC1iaXQgc3lzdGVtcyBhbmQgYXZvaWQgb3ZlcmZsb3cgaXNzdWVzIG9uIDMyLWJpdC4gSXQgKmFsc28qIGFkZHMgYSBzaXplIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIGV4Y2VlZCB0aGUgbGltaXRzIG9mIGFuIGB1bnNpZ25lZCBsb25nYCBpbmRleC4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGNvcmUgenJhbSBsb2dpYy4gVGhlcmVmb3JlLCB0aGUgdGVzdGluZyBzdHJhdGVneSBzaG91bGQgZm9jdXMgb24gZnV6emluZyB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiAgVG8gZmFjaWxpdGF0ZSB0aGlzLCB3ZSdsbCBlbmFibGUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBgWlJBTV9NVUxUSV9DT01QYCwgYFpSQU1fTUVNT1JZX1RSQUNLSU5HYCwgYW5kIGBERUJVR19GU2AgdG8gZW5zdXJlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzLCBhcmUgY29tcGlsZWQgYW5kIGV4ZXJjaXNlZC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGBaUkFNX01FTU9SWV9UUkFDS0lOR2AgaXMgcmlnaHQgZm9yIGByZWFkX2Jsb2NrX3N0YXRlYC4gWXVwLCBpdCBpcy4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjU3LjY2NTYwMDM1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExMzA1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTIxPWNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiVHJhY2sgelJhbSBibG9jayBzdGF0dXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjUzOjU3Ljc0NjczNTA4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg1MTY1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBaUkFNIE1lbW9yeSBUcmFja2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHByb21wdCBpcyBzaW1wbGUgZW5vdWdoLCBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlllcywgaXQgaXMuXCIgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHJlYWRfYmxvY2tfc3RhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcuIE15IG5leHQgc3RlcCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIGlzIHRvIGNvbmZpcm0gaXRzIGluY2x1c2lvbiB1bmRlciBgI2lmZGVmIENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR2AuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29kZSdzIGJlaGF2aW9yIHVuZGVyIGRpZmZlcmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaW4gWlJBTS4gTGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyBub3QgYmVlbiBzZXQgYnkgc29tZSBvdGhlciBtZWFucyB0aGF0IEkgaGF2ZW4ndCBjb21lIGFjcm9zcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDowMC45MzE5MDUwOTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzY3NTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWlJBTV9NRU1PUllfVFJBQ0tJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNTIzPXN0YXRpYyB2b2lkIHpyYW1fcmVsZWFzZV9iZGV2X2Jsb2NrKHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGJsa19pZHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNTI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE1Mjg6I2lmZGVmIENPTkZJR19aUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MjktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaD0xMDc9c3RydWN0IHpyYW0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQyLSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjE0MzojaWZkZWYgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQ0LVxcdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDowMS4wNDk1ODYyNjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5ODY3NjU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgUmVjb21wcmVzc2lvbiBMb2dpYyoqXG5cbk9rYXksIHllcywgdGhhdCdzIHJpZ2h0LiBOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGZ1bmN0aW9uIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBtdWx0aS1jb21wcmVzc2lvbiBaUkFNIGNvbmZpZ3VyYXRpb24uIFRvIHZlcmlmeSB0aGlzLCBJIG5lZWQgdG8gY29uZmlybSBpdHMgcGxhY2VtZW50LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24ncyBkZWZpbml0aW9uIGlzIG5lc3RlZCB1bmRlciBgI2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBgLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgbG9naWMgaXMgY29ycmVjdGx5IGNvbXBpbGVkIGFuZCBoYW5kbGVkIHdoZW4gbXVsdGktY29tcHJlc3Npb24gaXMgZW5hYmxlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHRoYXQgaXQgaXNuJ3QgY2F1c2luZyBhbnkgY29uZmxpY3RzIGlmIHRoYXQncyBub3QgdGhlIGNvbmZpZ3VyYXRpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBzYW5pdHkgY2hlY2sgYmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byBhbnkgcmVsYXRlZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjU0OjA1LjU0ODI2NTAxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2ODU2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1pSQU1fTVVMVElfQ09NUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNS1zdHJ1Y3QgenJhbV9wcF9zbG90IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE4MTk9c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgzMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxODMxOiNpZmRlZiBDT05GSUdfWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgzMi1zdGF0aWMgc3NpemVfdCByZWNvbXBfYWxnb3JpdGhtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjM2NT1zdGF0aWMgaW50IHpyYW1fYnZlY193cml0ZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IGJpb192ZWMgKmJ2ZWMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzNzM6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzc0LSNkZWZpbmUgUkVDT01QUkVTU19JRExFXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMDM9c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXByZXNzZWRfd3JpdGViYWNrKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA0LSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMDU6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDA2LXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhyZWNvbXBfYWxnb3JpdGhtKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAzMS1cXHRcXHUwMDI2ZGV2X2F0dHJfZGVidWdfc3RhdC5hdHRyLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwMzI6I2lmZGVmIENPTkZJR19aUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDMzLVxcdFxcdTAwMjZkZXZfYXR0cl9yZWNvbXBfYWxnb3JpdGhtLmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaD03OT1zdHJ1Y3QgenJhbV9zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC05Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDo5NzojaWZkZWYgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTk4LSNkZWZpbmUgWlJBTV9QUklNQVJZX0NPTVBcXHQwVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDowNS42Mjc5NjE4NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MTM1MDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGV4cHJlc3NlZCBhcyB0aG91Z2ggdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBXcml0ZWJhY2sgU3RvcmUqKlxuXG5ZZXMsIHRoYXQncyByaWdodCwgaXQgZGVmaW5pdGVseSBpcy4gXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWlja2x5LiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYHdyaXRlYmFja19zdG9yZWAgaXMgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGAjaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3BlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgYmVoYXZpb3IuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCBpdCdzIG9ubHkgaW5jbHVkZWQgd2hlbiB3cml0ZWJhY2sgc3VwcG9ydCBpcyBlbmFibGVkLiBPdGhlcndpc2UsIHRoZXJlIGNvdWxkIGJlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy4gR290dGEgbWFrZSBzdXJlIHRoZSBjb25kaXRpb25hbCBsb2dpYyBpcyBzb3VuZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzo1NDoxMC4yOTkzMTU3MDZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTk1MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19aUkFNX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQ6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNS1zdHJ1Y3QgenJhbV9wcF9zbG90IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mj1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODQtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg1OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODYtI2RlZmluZSBJTlZBTElEX0JERVZfQkxPQ0tcXHRcXHQofjBVTClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIwOTc9c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTIxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMjI6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEyMy1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5OTU9c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yOTk3LXN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAxOS1cXHRcXHUwMDI2ZGV2X2F0dHJfY29tcF9hbGdvcml0aG0uYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDIwOiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDIxLVxcdFxcdTAwMjZkZXZfYXR0cl9iZF9zdGF0LmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDQ2PXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwODQtXFx0aW5pdF9yd3NlbShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwODU6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwODYtXFx0enJhbS1cXHUwMDNld2JfYmF0Y2hfc2l6ZSA9IDMyO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9Nzk9c3RydWN0IHpyYW1fc3RhdHMge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtODktXFx0YXRvbWljNjRfdCBtaXNzX2ZyZWU7XFx0XFx0Lyogbm8uIG9mIG1pc3NlZCBmcmVlICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg6OTA6I2lmZGVmXFx0Q09ORklHX1pSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtOTEtXFx0YXRvbWljNjRfdCBiZF9jb3VudDtcXHRcXHQvKiBuby4gb2YgcGFnZXMgaW4gYmFja2luZyBkZXZpY2UgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTEwNz1zdHJ1Y3QgenJhbSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xMzItXFx0Ym9vbCBjbGFpbTsgLyogUHJvdGVjdGVkIGJ5IGRpc2stXFx1MDAzZW9wZW5fbXV0ZXggKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxMzM6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTEzNC1cXHRzdHJ1Y3QgZmlsZSAqYmFja2luZ19kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjU0OjEwLjM1NDkxNzkyMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODk0MjY2NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpSQU0gQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCdzIGFsbCBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyLiBJJ3ZlIGdvdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIG1pbmQ6IGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpSQU1fTVVMVElfQ09NUGAsIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIGFuZCBgREVCVUdfRlNgLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGZvY3VzIHN5bWJvbHMgSSdtIGRlYWxpbmcgd2l0aC4gSSBoYXZlIGBkaXNrc2l6ZV9zdG9yZWAsIGB6cmFtX3N1Ym1pdF9iaW9gLCBgcmVhZF9ibG9ja19zdGF0ZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGFuZCBgcmVzZXRfc3RvcmVgIHRoYXQgbmVlZCB0byBiZSB2ZXJpZmllZC4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSByaWdodCBuYW1lcyBhbmQgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoLlxuXG5GaXJzdCwgbGV0J3MgY29uZmlybSBgcmVzZXRfc3RvcmVgLiBZZXMsIGxvb2tzIGdvb2Qg4oCTIHRoZSBzaWduYXR1cmUgbWF0Y2hlczogYHN0YXRpYyBzc2l6ZV90IHJlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilgLiBFeGNlbGxlbnQuXG5cbk5vdywgb24gdG8gYHpyYW1fc3VibWl0X2Jpb2AuIFllcCwgdGhlIGRlZmluaXRpb24gaXMgY29ycmVjdDogYHN0YXRpYyB2b2lkIHpyYW1fc3VibWl0X2JpbyhzdHJ1Y3QgYmlvICpiaW8pYC5cblxuQ2hlY2tpbmcgYGRpc2tzaXplX3N0b3JlYDogYHN0YXRpYyBzc2l6ZV90IGRpc2tzaXplX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilgLiBBbGwgaW4gb3JkZXIuXG5cbk5leHQsIGByZWFkX2Jsb2NrX3N0YXRlYDogYHN0YXRpYyBzc2l6ZV90IHJlYWRfYmxvY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKWAuIENvbmZpcm1lZC5cblxuYHdyaXRlYmFja19zdG9yZWA6IGBzdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKWAuIFJpZ2h0IG9uIHRhcmdldC5cblxuRmluYWxseSwgYHJlY29tcHJlc3Nfc3RvcmVgOiBgc3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pYC4gUGVyZmVjdC5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgbmFtZXMgYW5kIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYXJlIGV4YWN0bHkgYXMgSSBleHBlY3RlZC4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MjIsIk91dHB1dFRva2VucyI6MzE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjU0OjE3LjI0OTE4NzI5OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDk2Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9XUklURUJBQ0tcIixcbiAgICBcIlpSQU1fTVVMVElfQ09NUFwiLFxuICAgIFwiWlJBTV9NRU1PUllfVFJBQ0tJTkdcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlza3NpemVfc3RvcmVcIixcbiAgICBcInpyYW1fc3VibWl0X2Jpb1wiLFxuICAgIFwicmVhZF9ibG9ja19zdGF0ZVwiLFxuICAgIFwid3JpdGViYWNrX3N0b3JlXCIsXG4gICAgXCJyZWNvbXByZXNzX3N0b3JlXCIsXG4gICAgXCJyZXNldF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHpyYW0gc2xvdCBpbmRleCBmcm9tIGB1MzJgIHRvIGB1bnNpZ25lZCBsb25nYCB0aHJvdWdob3V0IHRoZSB6cmFtIGRyaXZlciB0byBzdXBwb3J0IGRldmljZXMgbGFyZ2VyIHRoYW4gMTZUQiBvbiA2NC1iaXQgc3lzdGVtcyBhbmQgcHJldmVudCBvdmVyZmxvdyBvbiAzMi1iaXQgc3lzdGVtcy4gSXQgYWxzbyBhZGRzIGEgY2hlY2sgaW4gYGRpc2tzaXplX3N0b3JlYCB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIGEgZGlzayBzaXplIHRoYXQgd291bGQgb3ZlcmZsb3cgdGhlIGB1bnNpZ25lZCBsb25nYCBpbmRleC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHpyYW0gZHJpdmVyIGxvZ2ljLiBUbyB0ZXN0IHRoZXNlIGNoYW5nZXMsIHdlIHNob3VsZCBmdXp6IHRoZSBzeXNmcyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgKGBkaXNrc2l6ZV9zdG9yZWAsIGB3cml0ZWJhY2tfc3RvcmVgLCBgcmVjb21wcmVzc19zdG9yZWAsIGByZXNldF9zdG9yZWApLCB0aGUgZGVidWdmcyBpbnRlcmZhY2UgKGByZWFkX2Jsb2NrX3N0YXRlYCksIGFuZCB0aGUgYmxvY2sgZGV2aWNlIElPIGVudHJ5IHBvaW50IChgenJhbV9zdWJtaXRfYmlvYCkuIFdlIG5lZWQgdG8gZW5hYmxlIGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpSQU1fTVVMVElfQ09NUGAsIGBaUkFNX01FTU9SWV9UUkFDS0lOR2AsIGFuZCBgREVCVUdfRlNgIHRvIGNvbXBpbGUgYW5kIHRlc3QgYWxsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fV1JJVEVCQUNLXCIsXG4gICAgXCJaUkFNX01VTFRJX0NPTVBcIixcbiAgICBcIlpSQU1fTUVNT1JZX1RSQUNLSU5HXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc2tzaXplX3N0b3JlXCIsXG4gICAgXCJ6cmFtX3N1Ym1pdF9iaW9cIixcbiAgICBcInJlYWRfYmxvY2tfc3RhdGVcIixcbiAgICBcIndyaXRlYmFja19zdG9yZVwiLFxuICAgIFwicmVjb21wcmVzc19zdG9yZVwiLFxuICAgIFwicmVzZXRfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB6cmFtIHNsb3QgaW5kZXggZnJvbSBgdTMyYCB0byBgdW5zaWduZWQgbG9uZ2AgdGhyb3VnaG91dCB0aGUgenJhbSBkcml2ZXIgdG8gc3VwcG9ydCBkZXZpY2VzIGxhcmdlciB0aGFuIDE2VEIgb24gNjQtYml0IHN5c3RlbXMgYW5kIHByZXZlbnQgb3ZlcmZsb3cgb24gMzItYml0IHN5c3RlbXMuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBkaXNrc2l6ZV9zdG9yZWAgdG8gcHJldmVudCBjb25maWd1cmluZyBhIGRpc2sgc2l6ZSB0aGF0IHdvdWxkIG92ZXJmbG93IHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5kZXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB6cmFtIGRyaXZlciBsb2dpYy4gVG8gdGVzdCB0aGVzZSBjaGFuZ2VzLCB3ZSBzaG91bGQgZnV6eiB0aGUgc3lzZnMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIChgZGlza3NpemVfc3RvcmVgLCBgd3JpdGViYWNrX3N0b3JlYCwgYHJlY29tcHJlc3Nfc3RvcmVgLCBgcmVzZXRfc3RvcmVgKSwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIChgcmVhZF9ibG9ja19zdGF0ZWApLCBhbmQgdGhlIGJsb2NrIGRldmljZSBJTyBlbnRyeSBwb2ludCAoYHpyYW1fc3VibWl0X2Jpb2ApLiBXZSBuZWVkIHRvIGVuYWJsZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGBaUkFNX01VTFRJX0NPTVBgLCBgWlJBTV9NRU1PUllfVFJBQ0tJTkdgLCBhbmQgYERFQlVHX0ZTYCB0byBjb21waWxlIGFuZCB0ZXN0IGFsbCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkv5g6[1] Phase: Succeeded StartedAt: 2026-08-06 03:54:29 +0000 UTC FinishedAt: 2026-08-06 03:54:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 03:54:29 +0000 UTC FinishedAt: 2026-08-06 03:54:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2] Phase: Succeeded StartedAt: 2026-08-06 03:54:29 +0000 UTC FinishedAt: 2026-08-06 07:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 03:54:29 +0000 UTC FinishedAt: 2026-08-06 07:36:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 03:54:29 +0000 UTC FinishedAt: 2026-08-06 03:54:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 03:54:29 +0000 UTC FinishedAt: 2026-08-06 03:54:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkv5g6/series-workflowkv5g6-convert-artifact-1257186620/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 03:54:39 +0000 UTC FinishedAt: 2026-08-06 04:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 03:54:39 +0000 UTC FinishedAt: 2026-08-06 04:10:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5ab1a1af-a15a-472e-9eae-8efd7616182b,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-workflowkv5g6/series-workflowkv5g6-convert-artifact-1257186620/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": "7678e139-d861-4fc3-b098-b8325a5d36d4", "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-workflowkv5g6/series-workflowkv5g6-build-action-3602101866/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 03:54:39 +0000 UTC FinishedAt: 2026-08-06 04:10:30 +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:*5ab1a1af-a15a-472e-9eae-8efd7616182b,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-workflowkv5g6/series-workflowkv5g6-convert-artifact-1257186620/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": "7678e139-d861-4fc3-b098-b8325a5d36d4", "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-workflowkv5g6/series-workflowkv5g6-build-action-3602101866/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 04:10:40 +0000 UTC FinishedAt: 2026-08-06 04:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 04:10:40 +0000 UTC FinishedAt: 2026-08-06 04:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 04:10:40 +0000 UTC FinishedAt: 2026-08-06 04:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 04:10:40 +0000 UTC FinishedAt: 2026-08-06 04:10:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkv5g6/series-workflowkv5g6-convert-artifact-261204347/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 04:10:50 +0000 UTC FinishedAt: 2026-08-06 04:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 04:10:50 +0000 UTC FinishedAt: 2026-08-06 04:12:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7678e139-d861-4fc3-b098-b8325a5d36d4,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-workflowkv5g6/series-workflowkv5g6-build-action-3602101866/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-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 04:13:06 +0000 UTC FinishedAt: 2026-08-06 04:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 04:13:06 +0000 UTC FinishedAt: 2026-08-06 04:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 04:13:06 +0000 UTC FinishedAt: 2026-08-06 04:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 04:13:06 +0000 UTC FinishedAt: 2026-08-06 04:28: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:*5ab1a1af-a15a-472e-9eae-8efd7616182b,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-workflowkv5g6/series-workflowkv5g6-convert-artifact-261204347/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": "f1fb18f1-716c-42f2-9c3a-2e380ad945e3", "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-workflowkv5g6/series-workflowkv5g6-build-action-2043682207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 04:13:06 +0000 UTC FinishedAt: 2026-08-06 04:28: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:*5ab1a1af-a15a-472e-9eae-8efd7616182b,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-workflowkv5g6/series-workflowkv5g6-convert-artifact-261204347/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": "f1fb18f1-716c-42f2-9c3a-2e380ad945e3", "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-workflowkv5g6/series-workflowkv5g6-build-action-2043682207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 04:28:53 +0000 UTC FinishedAt: 2026-08-06 04:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 04:28:53 +0000 UTC FinishedAt: 2026-08-06 04:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 04:28:53 +0000 UTC FinishedAt: 2026-08-06 04:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 04:28:53 +0000 UTC FinishedAt: 2026-08-06 04:30:36 +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:*f1fb18f1-716c-42f2-9c3a-2e380ad945e3,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-workflowkv5g6/series-workflowkv5g6-build-action-2043682207/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-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 07:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 07:36:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"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:*7678e139-d861-4fc3-b098-b8325a5d36d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1fb18f1-716c-42f2-9c3a-2e380ad945e3,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-workflowkv5g6/series-workflowkv5g6-build-action-3602101866/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-workflowkv5g6/series-workflowkv5g6-build-action-2043682207/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 04:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 04:30:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"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-workflowkv5g6/series-workflowkv5g6-convert-artifact-3498996084/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 04:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 04:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 04:30:43 +0000 UTC FinishedAt: 2026-08-06 04:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 04:30:53 +0000 UTC FinishedAt: 2026-08-06 07:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkv5g6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["disksize_store","zram_submit_bio","read_block_state","writeback_store","recompress_store","reset_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZRAM_MULTI_COMP","ZRAM_MEMORY_TRACKING","DEBUG_FS"],"series_id":"8438b9ed-e870-44a2-a8b8-a5bedec2a0bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 04:30:53 +0000 UTC FinishedAt: 2026-08-06 07:36:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7678e139-d861-4fc3-b098-b8325a5d36d4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1fb18f1-716c-42f2-9c3a-2e380ad945e3,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-workflowkv5g6/series-workflowkv5g6-build-action-3602101866/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-workflowkv5g6/series-workflowkv5g6-build-action-2043682207/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-workflowkv5g6/series-workflowkv5g6-convert-artifact-3498996084/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,}