Name: series-workflowvrjzp Phase: Succeeded StartedAt: 2026-07-26 02:39:24 +0000 UTC FinishedAt: 2026-07-26 07:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[0] Phase: Succeeded StartedAt: 2026-07-26 02:39:24 +0000 UTC FinishedAt: 2026-07-26 02:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 02:39:24 +0000 UTC FinishedAt: 2026-07-26 02:57:07 +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": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "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": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "series_id": "d65723f6-d03b-428f-a744-5e5391caa093" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_device_pages", "migrate_vma_pages", "migrate_device_coherent_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIGZvciBtaWdyYXRpbmcgZGV2aWNlIG1lbW9yeS4gSXQgYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNsZWFyIHRoZSBtYXBwaW5nIG9mIGEgZm9saW8gYWZ0ZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AsIHdoaWNoIGFyZSB1c2VkIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgYHRlc3RfaG1tYCBtb2R1bGUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE4NDVkMjJlMmRhOGY1M2VkY2RiZWMzZjRlODQ5YTJjZjYzYTkyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMjo1NTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggNTU0NzU0ZWIyNmZmMmYuLmZhN2ZiYWNhYzUxNDM4IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTEyMDQsNiAmIzQzOzEyMDQsMTIgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbiBcdFx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+TUlHUkFURV9QRk5fTUlHUkFURTtcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIGZvbGlvX2ZyZWVfc3dhcCgpIHJlbW92ZWQgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXBcbiYjNDM7XHRcdFx0XHQgKiBjYWNoZS4gTWlncmF0ZSBpdCBhcyBhIG1hcHBpbmdsZXNzIGFub255bW91cyBmb2xpby5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRtYXBwaW5nID0gTlVMTDtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoZm9saW9faXNfem9uZV9kZXZpY2UobmV3Zm9saW8pKSB7XG4gXHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX2RldmljZV9wYWdlcyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9wYWdlcyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCB3aGljaCBpcyBhIGNvcmUgZnVuY3Rpb24gZm9yIG1pZ3JhdGluZyBkZXZpY2UgbWVtb3J5LiBJdCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY2xlYXIgdGhlIG1hcHBpbmcgb2YgYSBmb2xpbyBhZnRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCwgd2hpY2ggYXJlIHVzZWQgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBgdGVzdF9obW1gIG1vZHVsZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgZW50cnkgcG9pbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTg0NWQyMmUyZGE4ZjUzZWRjZGJlYzNmNGU4NDlhMmNmNjNhOTI4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDAyOjU1OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggNTU0NzU0ZWIyNmZmMmYuLmZhN2ZiYWNhYzUxNDM4IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTEyMDQsNiAmIzQzOzEyMDQsMTIgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywKIAkJCQkJc3JjX3BmbnNbaV0gJmFtcDs9IH5NSUdSQVRFX1BGTl9NSUdSQVRFOwogCQkJCQlnb3RvIG5leHQ7CiAJCQkJfQomIzQzOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwCiYjNDM7CQkJCSAqIGNhY2hlLiBNaWdyYXRlIGl0IGFzIGEgbWFwcGluZ2xlc3MgYW5vbnltb3VzIGZvbGlvLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJbWFwcGluZyA9IE5VTEw7CiAJCQl9CiAJCX0gZWxzZSBpZiAoZm9saW9faXNfem9uZV9kZXZpY2UobmV3Zm9saW8pKSB7CiAJCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGEgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCoqCgpBbHJpZ2h0LCBhIHBhdGNoIGp1c3QgY3Jvc3NlZCBteSBkZXNrIHRvdWNoaW5nIGBtbS9taWdyYXRlX2RldmljZS5jYC4gSG1tLCBJIHNlZSBpdCYjMzk7cyBhZGRpbmcgYG1hcHBpbmcgPSBOVUxMO2AgaW5zaWRlIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSB6ZXJvaW5nIG91dCBgbWFwcGluZ2AgdGhlcmUuIElzIHRoaXMgYSBkZWZlbnNpdmUgbWVhc3VyZT8gQXJlIHdlIHRyeWluZyB0byBlbnN1cmUgYSBjbGVhbiBzdGF0ZSBiZWZvcmUgYSBuZXcgbWFwcGluZyBpcyBhc3NpZ25lZCwgb3IgcGVyaGFwcyBjbGVhcmluZyBhIHBvdGVudGlhbCBzdGFsZSB2YWx1ZT8gUGVyaGFwcyB0aGlzIGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcHJvYmxlbSByZWxhdGVkIHRvIGRldmljZSBtaWdyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBgbWFwcGluZ2AgdmFyaWFibGUgaXMgdXNlZCBmb3Igd2l0aGluIHRoZSBmdW5jdGlvbiwgd2hhdCBoYXBwZW5zIHdpdGggaXQgYmVmb3JlIHRoaXMgbGluZSwgYW5kIHdoYXQgaGFwcGVucyBhZnRlci4gVGhpcyBpcyBjbGVhcmx5IGEgY2hhbmdlIHRoYXQgY291bGQgaW1wYWN0IGRldmljZSBtaWdyYXRpb24gcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBmdWxsIGltcGFjdCBhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBzZWVtaW5nbHkgc2ltcGxlIGFzc2lnbm1lbnQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXG5tbS9taWdyYXRlX2RldmljZS5jOjEwOTg6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5OS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNTM9dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU1LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1NjpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU3LX1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjcwOlx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIHR3ZWFraW5nIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgY29yZSBvZiBkZXZpY2UgcGFnZSBtaWdyYXRpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMsIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSBsb3Qgb2YgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbnRlcmFjdGlvbnMuCgpJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgY2hhbmdlcyB0aGV5JiMzOTtyZSBtYWtpbmcgdG8gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBHb3R0YSBzZWUgcHJlY2lzZWx5IHdoYXQgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIGluIHRoYXQgZnVuY3Rpb24uIFdoYXQgYXJlIHRoZXkgKmRvaW5nKiB3aXRoIHRoZSBtaWdyYXRpb24gcHJvY2Vzcz8gQXJlIHRoZXkgYWRkaW5nIGEgbmV3IGNoZWNrPyBNb2RpZnlpbmcgaG93IHBhZ2VzIGFyZSBtb3ZlZCBvciBpbnZhbGlkYXRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaW1wbGljYXRpb25zPyBBbnkgY2hhbmNlIHRoaXMgaXMgZ29pbmcgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBvbmdvaW5nIHdvcmsgaW4gdGhpcyBhcmVhPyBXaXRob3V0IHNlZWluZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudC4gTGV0JiMzOTtzIGdldCB0aGF0IGNvZGUgc25pcHBldCBwdWxsZWQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5hcmd1bWVudCAmIzM0O0ZpcnN0TGluZSYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogJiMzNDsxMTkwJiMzNDssCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogJiMzNDs0MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2FyZ3VtZW50IFwmIzM0O0ZpcnN0TGluZVwmIzM0OyBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOgoKKipJbnRlZ2VyIElucHV0IFJlcXVpcmVtZW50KioKClJpZ2h0LCBzbyB0aGUgQVBJIGludGVyYWN0aW9uIGhhcyBmbGFnZ2VkIHNvbWV0aGluZy4gSXQmIzM5O3MgZXhwZWN0aW5nIGFuIGludGVnZXIgYXMgaW5wdXQuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIG15IGN1cnJlbnQgd29ya2Zsb3cuIElzIHRoZSBkYXRhIEkmIzM5O20gZmVlZGluZyBpdCBhbHJlYWR5IGluIGFuIGludGVnZXIgZm9ybWF0PyBJZiBub3QsIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXBwcm9wcmlhdGUgY29udmVyc2lvbiBtZXRob2QuIERlcGVuZGluZyBvbiB0aGUgc291cmNlIGRhdGEsIHRoaXMgY291bGQgaW52b2x2ZSBjYXN0aW5nLCByb3VuZGluZywgb3IgZXZlbiBtb3JlIGNvbXBsZXggdHJhbnNmb3JtYXRpb25zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgY29tcGF0aWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgZGF0YSB0eXBlcyBhbmQgcHJlLXByb2Nlc3Npbmcgc3RlcHMuIFBvdGVudGlhbCBlcnJvcnMgY291bGQgYXJpc2UgZnJvbSBzZW5kaW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3Igc3RyaW5ncyB0aGF0IHRoZSBBUEkgbWlnaHQgbWlzaW50ZXJwcmV0LiBCZXN0IHRvIGFkZHJlc3MgdGhpcyB1cGZyb250IGFuZCBhdm9pZCBkb3duc3RyZWFtIGlzc3VlcyBvciB1bmV4cGVjdGVkIEFQSSBiZWhhdmlvci4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGVuc3VyZSBhIGNsZWFuLCB2YWxpZGF0ZWQgaW50ZWdlciBpcyBwYXNzZWQgdG8gdGhhdCBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTkwOlx0XHRcdH1cbjExOTE6XHRcbjExOTI6XHRcbjExOTM6XHRcdFx0aWYgKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKG5ld2ZvbGlvKSB8fFxuMTE5NDpcdFx0XHQgICAgZm9saW9faXNfZGV2aWNlX2NvaGVyZW50KG5ld2ZvbGlvKSkge1xuMTE5NTpcdFx0XHRcdGlmIChtYXBwaW5nKSB7XG4xMTk2Olx0XHRcdFx0XHQvKlxuMTE5NzpcdFx0XHRcdFx0ICogRm9yIG5vdyBvbmx5IHN1cHBvcnQgYW5vbnltb3VzIG1lbW9yeSBtaWdyYXRpbmcgdG9cbjExOTg6XHRcdFx0XHRcdCAqIGRldmljZSBwcml2YXRlIG9yIGNvaGVyZW50IG1lbW9yeS5cbjExOTk6XHRcdFx0XHRcdCAqXG4xMjAwOlx0XHRcdFx0XHQgKiBUcnkgdG8gZ2V0IHJpZCBvZiBzd2FwIGNhY2hlIGlmIHBvc3NpYmxlLlxuMTIwMTpcdFx0XHRcdFx0ICovXG4xMjAyOlx0XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykgfHxcbjEyMDM6XHRcdFx0XHRcdCAgICAhZm9saW9fZnJlZV9zd2FwKGZvbGlvKSkge1xuMTIwNDpcdFx0XHRcdFx0XHRzcmNfcGZuc1tpXSBcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xuMTIwNTpcdFx0XHRcdFx0XHRnb3RvIG5leHQ7XG4xMjA2Olx0XHRcdFx0XHR9XG4xMjA3Olx0XG4xMjA4Olx0XHRcdFx0XHQvKlxuMTIwOTpcdFx0XHRcdFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxuMTIxMDpcdFx0XHRcdFx0ICogY2FjaGUuIE1pZ3JhdGUgaXQgYXMgYSBtYXBwaW5nbGVzcyBhbm9ueW1vdXMgZm9saW8uXG4xMjExOlx0XHRcdFx0XHQgKi9cbjEyMTI6XHRcdFx0XHRcdG1hcHBpbmcgPSBOVUxMO1xuMTIxMzpcdFx0XHRcdH1cbjEyMTQ6XHRcdFx0fSBlbHNlIGlmIChmb2xpb19pc196b25lX2RldmljZShuZXdmb2xpbykpIHtcbjEyMTU6XHRcdFx0XHQvKlxuMTIxNjpcdFx0XHRcdCAqIE90aGVyIHR5cGVzIG9mIFpPTkVfREVWSUNFIHBhZ2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4xMjE3Olx0XHRcdFx0ICovXG4xMjE4Olx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+TUlHUkFURV9QRk5fTUlHUkFURTtcbjEyMTk6XHRcdFx0XHRnb3RvIG5leHQ7XG4xMjIwOlx0XHRcdH1cbjEyMjE6XHRcbjEyMjI6XHRcdFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG4xMjIzOlx0XG4xMjI0Olx0XHRcdGlmIChtaWdyYXRlIFx1MDAyNlx1MDAyNiBtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UgPT0gcGFnZSlcbjEyMjU6XHRcdFx0XHRleHRyYV9jbnQgPSAxO1xuMTIyNjpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuciBcdTAwMjZcdTAwMjYgaSAmIzQzOyBqIFx1MDAzYyBucGFnZXM7IGomIzQzOyYjNDM7KSB7XG4xMjI3Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaSYjNDM7al0pKTtcbjEyMjg6XHRcdFx0XHRuZXdmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpJiM0MztqXSkpO1xuMTIyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgUGF0Y2ggaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb246IGBtYXBwaW5nID0gTlVMTDtgIGFmdGVyIHRoYXQgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgIGNhbGwgaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLCBhbmQgdGhlIGludGVudGlvbiBpcyBsaWtlbHkgdG8gemVybyBvdXQgdGhhdCBwb2ludGVyIGFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBmcmVlZC4gSSB1bmRlcnN0YW5kIHRoaXMgaXMgb2NjdXJyaW5nIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIGtlcm5lbCBmb3IgaGFuZGxpbmcgcGFnZSBtaWdyYXRpb24sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZW52aXJvbm1lbnQgaXQgbWF5IGJlIHJ1bm5pbmcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgZmlsZS4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBtYXkgcmVxdWlyZSBhIHJldmlldyBvZiByZWxhdGVkIGNvbW1pdHMsIGJ1dCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYnJvYWRlciBwaWN0dXJlIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3MsIHdpdGggYSBmb2N1cyBvbiBhIGZpZWxkIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgdGFzayBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUga2V5LiBCdXQgd2hhdCBlbHNlIGlzIHRpZWQgdG8gdGhhdD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIGVsc2Ugd2l0aGluIHRoZSBzeXN0ZW0uIElzIHRoaXMganVzdCBhIGZsYWcsIG9yIGRvZXMgaXQgdW5sb2NrIGEgd2hvbGUgY2FzY2FkZSBvZiBvdGhlciBzZXR0aW5ncyBvciBwcmVyZXF1aXNpdGVzPyBXZSBhbGwga25vdyB0aGF0IGNvbmZpZ3VyYXRpb25zIHJhcmVseSBleGlzdCBpbiBpc29sYXRpb247IHRoZXJlJiMzOTtzIGFsd2F5cyBhIHdlYiBvZiBkZXBlbmRlbmNpZXMgdG8gdW5yYXZlbCB0byBlbnN1cmUgdGhpbmdzIHdvcmsgcHJlZGljdGFibHkgYW5kIHNhZmVseS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRlc3Rpbmcgb3IgaW50ZWdyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGl0IHB1bGxzIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk5LVxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNzAxLVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBZGRyZXNzaW5nIHRoZSBJbmZyYXN0cnVjdHVyZSBTaGlmdCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBzaGlmdCwgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyBib3RoIGBNSUdSQVRJT05gIGFuZCBhIGBaT05FX0RFVklDRWAuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoYXQgYFpPTkVfREVWSUNFYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGF0IHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIHRoZSBzeXN0ZW0gaXMgdGVsbGluZyBtZSB0aGF0IGBERVZJQ0VfTUlHUkFUSU9OYCBkZXBlbmRzIG9uIGJvdGggYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IGlmIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBldmVuIHNlbGVjdGFibGUgYXQgYWxsLCBvciBpZiBpdCYjMzk7cyBpbXBsaWNpdGx5IGRlZmluZWQuIEFoLCBpdCYjMzk7cyBhIGBkZWZfYm9vbGAgdGllZCB0byBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgZW5hYmxlIGBERVZJQ0VfTUlHUkFUSU9OYDsgaW5zdGVhZCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0ICpib3RoKiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCBhcmUgc2V0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSB0d28uIE9rYXksIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYE1JR1JBVElPTmAgbm93IGFuZCBzZWVpbmcgd2hhdCB0aGF0IGVudGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYE1JR1JBVElPTmAgQm9vbGVhbioqCgpBbHJpZ2h0LCBzbyBgTUlHUkFUSU9OYCBpcyBmbGFnZ2VkIGFzIGEgYm9vbGVhbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4mIzM0OyBJdCYjMzk7cyBhIGJpbmFyeSBzdGF0ZSwgZWl0aGVyIHRydWUgb3IgZmFsc2UuIE15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYWN0aXZhdGVzIHRoaXMgYm9vbGVhbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXMsIHdoZXJlIGluIHRoZSBjb2RlIGlzIGl0IGJlaW5nIHNlbGVjdGVkIG9yIGVuYWJsZWQ/IFdoYXQgcGllY2VzIG9mIGxvZ2ljIGFyZSBzZXR0aW5nIGl0IHRvIHRydWUsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgZmluZCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyB0aGF0IG1hbmlwdWxhdGUgdGhpcyBgTUlHUkFUSU9OYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHRyaWdnZXIgbWVjaGFuaXNtIGJlZm9yZSBJIGNhbiBldmFsdWF0ZSBpdHMgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbi0tXG5tbS9LY29uZmlnLTU5NC1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWc6NTk1Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy01OTYtXG4tLVxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY1Ni1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2NTc6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY1OC1cdGRlcGVuZHMgb24gTU1VXG4tLVxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODgtXHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZzo2ODk6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY5MC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxuLS1cbm1tL0tjb25maWctMTA2OS1cdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjEwNzA6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTEwNzEtXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgRGF0YWJhc2UgRGVwbG95bWVudCBTdHJhdGVneSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgc3lzdGVtIGNob3NlIGBDT01QQUNUSU9OYCwgYW5kIGl0IHNlZW1zIGBDT01QQUNUSU9OYCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzZWxlY3RlZCBkaXJlY3RseSBpbXBsaWVzIHRoYXQgYE1JR1JBVElPTmAgaXMgbGlrZWx5IGFsc28gZW5hYmxlZCwgZ2l2ZW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uIENvbXBhY3Rpb24gaXMgdGhlIGZvdW5kYXRpb24sIG1ha2luZyBtaWdyYXRpb24gcG9zc2libGUuCgpCdXQgdGhlIHF1ZXN0aW9uIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgaXMsIHdoYXQmIzM5O3MgaGFwcGVuaW5nIG9uIGBaT05FX0RFVklDRWA/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjaG9zZW4gc3RyYXRlZ3kgYWxpZ25zIHdpdGggdGhlIGRldmljZSBpbiB1c2UuIExldCBtZSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGBaT05FX0RFVklDRWAgcmVsYXRpdmUgdG8gYENPTVBBQ1RJT05gIGFuZCBgTUlHUkFUSU9OYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBaT05FX0RFVklDRSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBUaGlzIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGFueSBtb2R1bGVzLCBmdW5jdGlvbnMsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgdXRpbGl6ZSBvciByZWZlcmVuY2UgdGhhdCBzcGVjaWZpYyB2YXJpYWJsZSBvciBvYmplY3QuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdCwgYnV0IGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGNvdWxkIGJlIGNydWNpYWwg4oCTIHNvbWV0aGluZyB0aGF0IGNhbGxzIGEgZnVuY3Rpb24gdGhhdCAqdXNlcyogYFpPTkVfREVWSUNFYCwgZm9yIGV4YW1wbGUuIEkmIzM5O2xsIG5lZWQgdG8gYXBwcm9hY2ggdGhpcyBtZXRob2RpY2FsbHksIHBlcmhhcHMgc3RhcnRpbmcgd2l0aCBhIGNvZGUgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgdGhlIHZhcmlhYmxlIGFuZCB0aGVuIGJ1aWxkaW5nIGEgbWFwIG9mIGhvdyB0aGV5IHJlbGF0ZSB0byBvdGhlciBjb21wb25lbnRzLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGtleSBoZXJlLiBEZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZSwgSSBtaWdodCBsZXZlcmFnZSBzb21lIHRvb2xpbmcgdG8gYXV0b21hdGUgdGhlIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG8gc29tZSBleHRlbnQuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWx2ZSBpbnRvIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy4gVGhlIGFpbSBpcyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZSBvciBtb2RpZmljYXRpb24gdG8gYFpPTkVfREVWSUNFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM2Olx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjM3Olx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbjEyMzk6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTI0MDpcdFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuMTI0MTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTI0MjpcdFxuMTI0MzpcdFx0aGVscFxuMTI0NDpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTI0NTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTI0NjpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyNDc6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjQ4Olx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyNDk6XHRcbjEyNTA6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTI1MTpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMjUyOlx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbjEyNTM6XHRcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXG4xMjU0Olx0XHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxuMTI1NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTE3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIHRvIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMgZm9yIFpPTkVfREVWSUNFKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgWk9ORV9ERVZJQ0VgIGZlYXR1cmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaGluZ2VzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE1ha2VzIHNlbnNlLCB0aGUgYWJpbGl0eSB0byBtYW5hZ2UgZGV2aWNlIG1lbW9yeSB6b25lcyBkeW5hbWljYWxseSByZXF1aXJlcyB0aG9zZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gR2l2ZW4gdGhpcywgSSB0aGluayB3ZSBzaG91bGQgZW5hYmxlIGBaT05FX0RFVklDRWAuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGRpZ2dpbmcgaW50byB0aGUgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIHBhZ2VzIHRvIG9yIGZyb20gZGV2aWNlIHpvbmVzLCBzbyBpdOKAmXMgY3JpdGljYWwuIEkgY2FuIHNlZSBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgYnkgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hvICpjYWxscyogdGhvc2UgdHdvIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBwYXRocyB0byB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBjb25maWRlbmNlIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgaXMgYSBnb29kIGNoYW5nZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbCBjaGFpbiB0byB0aG9yb3VnaGx5IHZldCB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMDk9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc0LVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIGRzdCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTc1Olx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjLCBkc3QsIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc2LVx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9NDc1PW5vdXZlYXVfZG1lbV9ldmljdF9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kbWVtX2NodW5rICpjaHVuaylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy01MTctXHRub3V2ZWF1X2ZlbmNlX25ldyhcdTAwMjZmZW5jZSwgY2h1bmstXHUwMDNlZHJtLVx1MDAzZWRtZW0tXHUwMDNlbWlncmF0ZS5jaGFuKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjUxODpcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTUxOS1cdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFx1MDAyNmZlbmNlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xOTg9aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5OTp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTIwMC1cdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MTg4PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKHN0cnVjdCBkbWlycm9yX2NodW5rICpjaHVuaylcbi0tXG5saWIvdGVzdF9obW0uYy0yMzEtXHR9XG5saWIvdGVzdF9obW0uYzoyMzI6XHRtaWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG5saWIvdGVzdF9obW0uYy0yMzMtXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NjU9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTA5ODpzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDk5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0NC0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI0NTogKiBtaWdyYXRlX2RldmljZV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjQ2LSAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUyLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjUzOnZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU0LVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU1LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1NjpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU3LX1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjcwOlx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5My0gKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM5NDogKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5NS0gKi9cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NjE9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg1LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDg2Olx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXHUwMDI2c3JjX3BmbiwgXHUwMDI2ZHN0X3BmbiwgMSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODctXHRpZiAoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYSBmZXcgaW50ZXJlc3RpbmcgcGxhY2VzLiBGaXJzdCwgSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0JiMzOTtzIGdvb2QsIGEgdGVzdCBtb2R1bGUgaXMgYWx3YXlzIGEgc2Vuc2libGUgcGxhY2UgdG8gZmluZCBhIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBtaWdyYXRpb24g4oCTIHRoZXkgYXJlIG9mdGVuIGdyZWF0IGZvciBmdXp6aW5nIGFuZCBzdHJlc3MtdGVzdGluZy4gTWFrZXMgc2Vuc2UuIFRoZW4gdGhlcmUmIzM5O3MgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBzcGVjaWZpY2FsbHkgaW4gYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiBpcywgc28gaXQmIzM5O3Mgbm90IGEgc3VycHJpc2UgdG8gc2VlIGl0IHRoZXJlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGNvaGVyZW50IGZvbGlvcywgd2hpY2ggb2Z0ZW4gbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGR1cmluZyBtaWdyYXRpb24uCgpIbW0sIGludGVyZXN0aW5nLCBpdCYjMzk7cyBhbHNvIGluIGBub3V2ZWF1X2RtZW0uY2AgYW5kIGBkcm1fcGFnZW1hcC5jYC4gVGhhdCBwb2ludHMgdG8gZGV2aWNlIGRyaXZlciB1c2UsIGxpa2VseSByZWxhdGVkIHRvIG1vdmluZyBwYWdlcyB0byBhbmQgZnJvbSBncmFwaGljcyBoYXJkd2FyZSwgb3Igb3RoZXIgRE1BLWNhcGFibGUgZGV2aWNlcy4gR3JhcGhpY3Mgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgbmVlZHMgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWlncmF0aW9uLCBzbyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIHRvIHNlZSB3aGVyZSB0aGUgVk1BJiMzOTtzIGFyZSByZWxhdGVkIHRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjM2NTo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTM2Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjk4OjQuIGBgbWlncmF0ZV92bWFfcGFnZXMoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5OS1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU3OC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTc5Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTgwLVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzg3LVx0Km1pZy5kc3QgPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihkcGFnZSkpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo3ODg6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03ODktb3V0X2ZpbmFsaXplOlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9Mzk0PXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUxLVx0ciA9IHN2bV9taWdyYXRlX2NvcHlfdG9fdnJhbShub2RlLCBwcmFuZ2UsIFx1MDAyNm1pZ3JhdGUsIFx1MDAyNm1mZW5jZSwgc2NyYXRjaCwgdHRtX3Jlc19vZmZzZXQpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0NTI6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUzLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03NTUtXHRcdFx0XHQgICAgc2NyYXRjaCwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzU2Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz02MTY9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTgxMi1lcnJfYWJvcnRlZF9taWdyYXRpb246XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4MTM6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTgxNC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMjExPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzA0LVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzMDU6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMDYtXHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcdTAwMjZtaWdyYXRlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2Ny1cdG5vdXZlYXVfZmVuY2VfbmV3KFx1MDAyNmZlbmNlLCBkbWVtLVx1MDAzZW1pZ3JhdGUuY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyNjg6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2OS1cdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFx1MDAyNmZlbmNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz03ODM9c3RhdGljIHZvaWQgbm91dmVhdV9kbWVtX21pZ3JhdGVfY2h1bmsoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODA5LVx0bm91dmVhdV9mZW5jZV9uZXcoXHUwMDI2ZmVuY2UsIGRybS1cdTAwM2VkbWVtLVx1MDAzZW1pZ3JhdGUuY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4MTA6XHRtaWdyYXRlX3ZtYV9wYWdlcyhhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgxMS1cdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFx1MDAyNmZlbmNlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjUtXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NjpcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucy5cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ny1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Mz1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NDp2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTUtdm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTExNzUtXG5saWIvdGVzdF9obW0uYzoxMTc2Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTExNzctXHRcdGNtZC1cdTAwM2VjcGFnZXMgJiM0Mzs9IGRtaXJyb3Jfc3VjY2Vzc2Z1bF9taWdyYXRlZF9wYWdlcyhcdTAwMjZhcmdzKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQ4LVx0XHRkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoXHUwMDI2YXJncywgZG1pcnJvcik7XG5saWIvdGVzdF9obW0uYzoxMjQ5Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNTAtXHRcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFx1MDAyNmFyZ3MsIGRtaXJyb3IpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcxOC1cdH1cbmxpYi90ZXN0X2htbS5jOjE3MTk6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTE3MjAtXHQvKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjU5PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTY5OS0gKiB0aGlzIGNhbiBzdGlsbCBmYWlsLCBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgeW91IG11c3QgY2hlY2sgaWYgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjcwMDogKiBtaWdyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgZm9yIHRob3NlIGVudHJpZXMgYWZ0ZXIgY2FsbGluZyBtaWdyYXRlX3ZtYV9wYWdlcygpLFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDEtICoganVzdCBsaWtlIGZvciByZWd1bGFyIG1pZ3JhdGlvbi5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzAyLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjcwMzogKiBBZnRlciB0aGF0LCB0aGUgY2FsbGVycyBtdXN0IGNhbGwgbWlncmF0ZV92bWFfcGFnZXMoKSB0byBnbyBvdmVyIGVhY2ggZW50cnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA0LSAqIGluIHRoZSBzcmMgYXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWdcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA1LSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzA2OiAqIHRoZW4gbWlncmF0ZV92bWFfcGFnZXMoKSB0byBtaWdyYXRlIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDctICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGVcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MTU6ICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJlXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNi0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTgtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzE5OiAqIEl0IGlzIHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGFmdGVyIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgYmVjYXVzZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjAtICogYm90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIHBhZ2UgYXJlIHN0aWxsIGxvY2tlZCwgYW5kIHRoZSBtbWFwX2xvY2sgaXMgaGVsZFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTA5OD1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0OS0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjUwOiAqIEVxdWl2YWxlbnQgdG8gbWlncmF0ZV92bWFfcGFnZXMoKS4gVGhpcyBpcyBjYWxsZWQgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLSAqIG1ldGEtZGF0YSBmcm9tIHNvdXJjZSBzdHJ1Y3QgcGFnZSB0byBkZXN0aW5hdGlvbi5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNTg9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYwLS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjYxOiAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjItICogQG1pZ3JhdGU6IG1pZ3JhdGUgc3RydWN0IGNvbnRhaW5pbmcgYWxsIG1pZ3JhdGlvbiBpbmZvcm1hdGlvblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2Ny0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2ODp2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkxldmVyYWdpbmcgRXhpc3RpbmcgVGVzdCBJbmZyYXN0cnVjdHVyZSoqCgpJIHNlZSB0aGF0IHRoZSBgbWlncmF0ZV92bWFfcGFnZXNgIGZ1bmN0aW9uLCB0aGUgb25lIEkmIzM5O20gd29ya2luZyB3aXRoLCBpcyBhbHNvIGludm9rZWQgZnJvbSBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGUgZm9sa3Mgd2hvIHdyb3RlIHRoYXQgdGVzdCBoYXJuZXNzIHByb2JhYmx5IGFscmVhZHkgaGF2ZSBhIHNvbGlkIGZyYW1ld29yayBmb3IgZXhlcmNpc2luZyAqdGhpcyogdmVyeSBwaWVjZSBvZiBjb2RlLiBSYXRoZXIgdGhhbiByZWludmVudGluZyB0aGUgd2hlZWwsIEkgc2hvdWxkIGFic29sdXRlbHkgbGV2ZXJhZ2UgdGhhdCBleGlzdGluZyB0ZXN0IGluZnJhc3RydWN0dXJlLiBVc2luZyBgbGliL3Rlc3RfaG1tLmNgIHNlZW1zIGxpa2UgYSBzbWFydCB3YXkgdG8gcmlnb3JvdXNseSB0ZXN0IHRoZSBjb2RlIGNoYW5nZXMgSSYjMzk7bSBtYWtpbmcuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgYGxpYi90ZXN0X2htbS5jYCB0byBzZWUgaG93IEkgY2FuIGludGVncmF0ZSBteSB0ZXN0IGNhc2VzIGVmZmVjdGl2ZWx5LiBJdCB3b3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfaG1tLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX1RFU1RfSE1NYCwgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBzZXRzIHVwIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYGxpYi90ZXN0X2htbS5jYCBmaWxlLiBOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBteSBuZXh0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgdGVzdGluZyBmcmFtZXdvcmsgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0JiMzOTtzIHJlcXVpcmVkIGZvciBpdCB0byBidWlsZCBhbmQgZnVuY3Rpb24gY29ycmVjdGx5LiBJIG5lZWQgdG8gZW5zdXJlIEkga25vdyB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWJyYXJpZXMsIG9yIG1vZHVsZXMgYENPTkZJR19URVNUX0hNTWAgcmVsaWVzIHVwb24uIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX0hNTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM1NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiB0aGUgYEtjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMzU0LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGF0IGZpbGUgbG9jYXRpb24gZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHRyeWluZyB0byBkZWNpcGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM1NDpcdGNvbmZpZyBURVNUX0hNTVxuMzM1NTpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4zMzU2Olx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4zMzU3Olx0XHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXG4zMzU4Olx0XHRzZWxlY3QgSE1NX01JUlJPUlxuMzM1OTpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMzM2MDpcdFx0aGVscFxuMzM2MTpcdFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cbjMzNjI6XHRcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxuMzM2MzpcdFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXG4zMzY0Olx0XG4zMzY1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzY2Olx0XG4zMzY3Olx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xuMzM2ODpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBmcmVlaW5nIHBhZ2VzXCYjMzQ7XG4zMzY5Olx0XHRoZWxwXG4zMzcwOlx0XHQgIFRlc3QgdGhhdCBhIG1lbW9yeSBsZWFrIGRvZXMgbm90IG9jY3VyIGR1ZSB0byBhIHJhY2UgYmV0d2VlblxuMzM3MTpcdFx0ICBmcmVlaW5nIGEgYmxvY2sgb2YgcGFnZXMgYW5kIGEgc3BlY3VsYXRpdmUgcGFnZSByZWZlcmVuY2UuXG4zMzcyOlx0XHQgIExvYWRpbmcgdGhpcyBtb2R1bGUgaXMgc2FmZSBpZiB5b3VyIGtlcm5lbCBoYXMgdGhlIGJ1ZyBmaXhlZC5cbjMzNzM6XHRcdCAgSWYgdGhlIGJ1ZyBpcyBub3QgZml4ZWQsIGl0IHdpbGwgbGVhayBnaWdhYnl0ZXMgb2YgbWVtb3J5IGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBTY29wZTogUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIGBURVNUX0hNTWAgaXMgZmxhZ2dlZCBhcyBkZXBlbmRpbmcgb24gYm90aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHByZXR0eSBjb21tb24gdGhlc2UgZGF5cywgYW5kIGl0cyBpbXBhY3QgaXMgdXN1YWxseSB3ZWxsLXVuZGVyc3Rvb2QsIGJ1dCBgREVWSUNFX1BSSVZBVEVgLi4uIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJdCBjYW4gaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgY29uc3RyYWludHMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2VjdXJpdHkgY29udGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCBgREVWSUNFX1BSSVZBVEVgIHNwZWNpZmljYWxseSBlbnRhaWxzIGluIHRoaXMgY29udGV4dCBiZWZvcmUgSSBwcm9jZWVkLiBUaGlzIGNvdWxkIGRlZmluZSB0aGUgc2NvcGUsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBMZXQgbWUgc2VlIHdoYXQmIzM5O3Mgd2hhdCB3aXRoIGBERVZJQ0VfUFJJVkFURWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG1tL0tjb25maWdgLiBJdCYjMzk7cyBhIGtleSBmaWxlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBhcm91bmQgbGluZSAxMjY3IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9yIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3Igd2hhdGV2ZXIgb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhlIHNwZWNpZmljIGxpbmUgcmFuZ2UgaGVscHMgbWUgbmF2aWdhdGUgZWZmaWNpZW50bHkgYW5kIGF2b2lkIGdldHRpbmcgbG9zdCBpbiB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIHNwYWNlLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24g4oCTIG1heWJlIGEgc2ltcGxlIGBjb25maWdgIGJsb2NrIHdpdGggc29tZSBkZXBlbmRlbmNpZXMgb3IgYSB0cmlzdGF0ZSBvcHRpb24uIE9yIHBlcmhhcHMgdGhpcyBhcmVhIGRlYWxzIHdpdGggaG93IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBzcGVjaWZpYyBvcHRpb24gaXMgY29uZmlndXJlZC4gRWl0aGVyIHdheSwgdGhpcyBzaG91bGQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24mIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNjc6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNjg6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjY5Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjcwOlx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjcxOlx0XG4xMjcyOlx0XHRoZWxwXG4xMjczOlx0XHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXG4xMjc0Olx0XHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcbjEyNzU6XHRcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxuMTI3NjpcdFxuMTI3NzpcdGNvbmZpZyBWTUFQX1BGTlxuMTI3ODpcdFx0Ym9vbFxuMTI3OTpcdFxuMTI4MDpcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcbjEyODE6XHRcdGJvb2xcbjEyODI6XHRjb25maWcgQVJDSF9IQVNfUEtFWVNcbjEyODM6XHRcdGJvb2xcbjEyODQ6XHRcbjEyODU6XHRjb25maWcgQVJDSF9VU0VTX1BHX0FSQ0hfMlxuMTI4NjpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgY2hhaW4gZm9ybWluZy4gYERFVklDRV9QUklWQVRFYCByZWxpZXMgb24gYFpPTkVfREVWSUNFYCwgYW5kIGBURVNUX0hNTWAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBERVZJQ0VfUFJJVkFURWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRoZSBtb2RpZmljYXRpb24gdG8gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIHdpdGhpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdGl2ZWx5IHVzZWQgYnkgYHRlc3RfaG1tLmNgLgoKR29vZCwgaXQgbG9va3MgbGlrZSBgdGVzdF9obW0uY2AgKmRvZXMqIGNhbGwgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgd2hpY2ggaW4gdHVybiBjYWxsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gRXhjZWxsZW50LiBTbyB0aGUgY2hhbmdlIHdpdGhpbiBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXMgZGVmaW5pdGVseSByZWxldmFudCB0byBgdGVzdF9obW0uY2AuCgpUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgYG1hcHBpbmcgPSBOVUxMO2AgaXMgYWRkZWQgYWZ0ZXIgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgZWZmZWN0IG9uIGBtYXBwaW5nYCBoZXJlIGlzIHRoZSBjb3JlIG9mIHdoYXQgbmVlZHMgdG8gYmUgbG9va2VkIGF0LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZm9yIHNpZGUgZWZmZWN0cy4KCk5vdywgdG8gem9vbSBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AgLSB0aGV5JiMzOTtyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBleGVjdXRpb24gcGF0aC4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgdGhhdCBjYWxsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBzbyB0aGF0IEkgY2FuIGxvb2sgYXQgdGhlIG90aGVyIGNhbGxpbmcgcG9pbnRzIHRvIHNlZSB0aGUgZW50aXJlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXG5tbS9taWdyYXRlX2RldmljZS5jOjEwOTg6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5OS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNDQtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDU6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0Ni0gKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Mi0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1Mzp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NC1cdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NS17XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTY6XHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Ny19XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTg6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTktXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjY4PXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY5LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MDpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMobWlncmF0ZS1cdTAwM2VzcmMsIG1pZ3JhdGUtXHUwMDNlZHN0LCBtaWdyYXRlLVx1MDAzZW5wYWdlcywgbWlncmF0ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzEtfVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTMtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXG5tbS9taWdyYXRlX2RldmljZS5jOjEzOTQ6ICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTUtICovXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDYxPWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4NS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4NjpcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVx0aWYgKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuCgoqKlRoaW5raW5nIFRocm91Z2ggdGhlIERldmljZSBQYWdlIE1pZ3JhdGlvbiBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYXJlIHRoZSB0d28gdG9wLWxldmVsIGV4cG9ydGVkIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkga25vdyB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBvdmVyYWxsIHBhZ2UgbWlncmF0aW9uIHN5c3RlbS4gVGhlcmUmIzM5O3MgYWxzbyBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIOKAkyB0aGF0IG5hbWUgc291bmRzIGZhbWlsaWFyLCBzb21ldGhpbmcgc3BlY2lmaWMgdG8gY29oZXJlbnQgbWVtb3J5IHJlZ2lvbnMgb24gZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGF0IG9uZSBhbHNvIGV4cG9ydGVkLCBvciBpcyBpdCBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIGlzIGFjdHVhbGx5IHBhcnQgb2YgdGhlIHB1YmxpY2x5IGF2YWlsYWJsZSBBUEkuIFRoYXQmIzM5O2xsIGluZm9ybSBob3cgSSBhcHByb2FjaCBpbnRlZ3JhdGluZyB3aXRoIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MTA5OD1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEyNy1cdFx0XHQgKiBUaGUgb25seSB0aW1lIHRoZXJlIGlzIG5vIHZtYSBpcyB3aGVuIGNhbGxlZCBmcm9tXG5tbS9taWdyYXRlX2RldmljZS5jOjExMjg6XHRcdFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbiYjMzk7dFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI5LVx0XHRcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDU0PUVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYwLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDYxOmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkZWx2ZSBpbnRvIGxpbmUgMTQ2MSBhbmQgY3JhZnQgYSBzdW1tYXJ5IGFzIGlmIHRoZXNlIHdlcmUgKm15KiB0aG91Z2h0cy4gSGVyZSB3ZSBnbzoKCioqRGl2aW5nIGludG8gdGhlIE51YW5jZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZSAxNDYxLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UgYW5kIGV4cGVydGlzZSBpbiB0aGlzIGZpZWxkLCBJIGFudGljaXBhdGUgdGhpcyBzZWdtZW50IGlzIGxpa2VseSBkaXNjdXNzaW5nIFsqKmluc2VydCB5b3VyIHByZWRpY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgb2YgeW91ciBmaWVsZCoqXS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgWyoqbWVudGlvbmluZyB0aGUgYW50aWNpcGF0ZWQga2V5IGNvbmNlcHRzLCBtZXRob2RzLCBvciB0aGVvcmllcyB0aGF0IHlvdSBleHBlY3QgdG8gZW5jb3VudGVyKipdLiBHaXZlbiB0aGUgdHlwaWNhbCBmbG93IG9mIHJlc2VhcmNoIGluIHRoaXMgYXJlYSwgaXQgbWlnaHQgYmUgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciBhIGxhcmdlciBwb2ludC4gTXkgaW50ZXJuYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0IHdpbGwgZWxhYm9yYXRlIG9uIHNvbWV0aGluZyBJ4oCZdmUgc2VlbiBiZWZvcmUgYnV0IGl0IHdpbGwgYXBwcm9hY2ggaXQgZnJvbSBhIHVuaXF1ZSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGVhZ2VyIHRvIHNlZSBpZiBpdCBjaGFsbGVuZ2VzIG15IHByZS1jb25jZWl2ZWQgbm90aW9ucyBvciBjb3Jyb2JvcmF0ZXMgcHJldmlvdXMgZmluZGluZ3MuIExldCYjMzk7cyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGxpbmUgMTQ2MSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYxOlx0aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xNDYyOlx0e1xuMTQ2MzpcdFx0dW5zaWduZWQgbG9uZyBzcmNfcGZuLCBkc3RfcGZuID0gMDtcbjE0NjQ6XHRcdHN0cnVjdCBmb2xpbyAqZGZvbGlvO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKTtcbjE0Njc6XHRcbjE0Njg6XHRcdGZvbGlvX2xvY2soZm9saW8pO1xuMTQ2OTpcdFx0c3JjX3BmbiA9IG1pZ3JhdGVfcGZuKGZvbGlvX3Bmbihmb2xpbykpIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbjE0NzA6XHRcbjE0NzE6XHRcdC8qXG4xNDcyOlx0XHQgKiBXZSBkb24mIzM5O3QgaGF2ZSBhIFZNQSBhbmQgZG9uJiMzOTt0IG5lZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMgdG8gZmluZFxuMTQ3MzpcdFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxuMTQ3NDpcdFx0ICogZm9saW8gYXMgbWlncmF0ZV92bWFfc2V0dXAoKSB3aWxsIGZhaWwgaWYgYXJncy52bWEgPT0gTlVMTC5cbjE0NzU6XHRcdCAqL1xuMTQ3NjpcdFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoXHUwMDI2c3JjX3BmbiwgMSwgTlVMTCk7XG4xNDc3Olx0XHRpZiAoIShzcmNfcGZuIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSlcbjE0Nzg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjE0Nzk6XHRcbjE0ODA6XHRcdGRmb2xpbyA9IGZvbGlvX2FsbG9jKEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipDb2hlcmVudCBGb2xpbyBNaWdyYXRpb246IEV4cG9ydCBTdGF0dXMgQ2hlY2sqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIGZ1bmN0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtJcyB0aGlzIHRoaW5nIGV2ZW4gZXhwb3NlZCB0byB0aGUgb3V0c2lkZSB3b3JsZD8mIzM0OyBJbiB0aGlzIGNvbnRleHQsICYjMzQ7ZXhwb3J0ZWQmIzM0OyBtZWFucyBpcyB0aGlzIGZ1bmN0aW9uIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgbW9kdWxlcyBvciBjb21wb25lbnRzIHRvIGNhbGwsIG9yIGlzIGl0IGhpZGRlbiB3aXRoaW4gYSBzcGVjaWZpYyBpbnRlcm5hbCBtb2R1bGU/IEtub3dpbmcgd2hldGhlciBhIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGlzIGZvdW5kYXRpb25hbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIElzIGl0IHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksIG9yIGlzIGl0IHB1cmVseSBmb3IgaW50ZXJuYWwsIHByaXZhdGUgdXNlPyBUaGlzIGltcGFjdHMgaG93IEkgd291bGQgYXBwcm9hY2ggZGVidWdnaW5nLCBleHRlbmRpbmcsIG9yIGV2ZW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24gYXJvdW5kIGZvbGlvIG1pZ3JhdGlvbi4gS25vd2luZyB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIGluZm9ybXMgbWUgb24gaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0ODE6XHRcdGlmIChkZm9saW8pIHtcbjE0ODI6XHRcdFx0Zm9saW9fbG9jayhkZm9saW8pO1xuMTQ4MzpcdFx0XHRkc3RfcGZuID0gbWlncmF0ZV9wZm4oZm9saW9fcGZuKGRmb2xpbykpO1xuMTQ4NDpcdFx0fVxuMTQ4NTpcdFxuMTQ4NjpcdFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXHUwMDI2c3JjX3BmbiwgXHUwMDI2ZHN0X3BmbiwgMSk7XG4xNDg3Olx0XHRpZiAoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcbjE0ODg6XHRcdFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcbjE0ODk6XHRcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xuMTQ5MDpcdFxuMTQ5MTpcdFx0aWYgKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXG4xNDkyOlx0XHRcdHJldHVybiAwO1xuMTQ5MzpcdFx0cmV0dXJuIC1FQlVTWTtcbjE0OTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIHRoZSBVbmRvY3VtZW50ZWQ6IEEgUXVpY2sgSW52ZXN0aWdhdGl2ZSBQYXRoKioKCkhtbSwgdGhpcyBmdW5jdGlvbiwgbW9kdWxlLCBvciBwaWVjZSBvZiBkYXRh4oCmIGl0IGFwcGVhcnMgdG8gYmUgKnVuZXhwb3J0ZWQqLiBUaGF0JiMzOTtzIHRoZSBpbml0aWFsIHJlZCBmbGFnLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSBjb250ZXh0LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgaGllcmFyY2h5LiBMZXQmIzM5O3MgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGZpbmRpbmcgdGhlICoqY2FsbGVycyoqIG9mIHRoaXMgaXRlbS4gRm9yZ2V0IGFzc3VtaW5nLCBJIG5lZWQgc29saWQgZXZpZGVuY2UsIG5vdCBjb25qZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGljaCBjb21wb25lbnRzIGRlcGVuZCBvbiB0aGlzIGFwcGFyZW50bHktdW5leHBvcnRlZCBwaWVjZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEgcG90ZW50aWFsIHByb2JsZW0sIHJlZmFjdG9yaW5nIHRhc2ssIG9yIG1pc3NpbmcgbGluayBpbiBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ndXAuYz0yMzIxPW1pZ3JhdGVfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3Moc3RydWN0IGxpc3RfaGVhZCAqbW92YWJsZV9mb2xpb19saXN0LFxuLS1cbm1tL2d1cC5jLTIzMzktXG5tbS9ndXAuYzoyMzQwOlx0XHRcdGlmIChtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhmb2xpbykpIHtcbm1tL2d1cC5jLTIzNDEtXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tLVxubW0vaW50ZXJuYWwuaD0xNTg0PXZvaWQgZnJlZV96b25lX2RldmljZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmg6MTU4NTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oLTE1ODYtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMDk4PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI3LVx0XHRcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEyODpcdFx0XHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJiMzOTt0XG5tbS9taWdyYXRlX2RldmljZS5jLTExMjktXHRcdFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTQ9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wZm5zKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjAtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NjE6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRGV2aWNlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgZGV2aWNlIG1pZ3JhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc29tZSBrZXkgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBtaWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCBjYWxscyBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIGluIGBtbS9ndXAuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlIGNvcmUgR1VQIG1lY2hhbmlzbS4gTm93LCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFyZSBhbHNvIG91dCB0aGVyZSwgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBgdGVzdF9obW0uY2AgbW9kdWxlLgoKTXkgcHJpbWFyeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9uczogYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AuIFRvIGVuc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSB0byBlbmFibGUgdGhlc2UsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuCgpgREVWSUNFX01JR1JBVElPTmAgc2VlbXMgaW1wb3J0YW50LiBJdCBkZXBlbmRzIG9uIGJvdGggYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIGBaT05FX0RFVklDRWAgaXMgYSBtdXN0LCBjbGVhcmx5LiBBbmQgYFRFU1RfSE1NYCBlbmFibGVzIHRoZSB0ZXN0IGRyaXZlciB0aGF0IG1ha2VzIGNhbGxzIHRvIHRob3NlIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBURVNUX0hNTWAgaXMgc3VmZmljaWVudCBvbiBpdHMgb3duLiBOb3csIGBURVNUX0hNTWAgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBBbmQgYERFVklDRV9QUklWQVRFYCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAuIFNvLCBlbmFibGluZyBgVEVTVF9ITU1gIGF1dG9tYXRpY2FsbHkgcHVsbHMgaW4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKU28sIGhlcmUmIzM5O3MgdGhlIGxpc3Qgb2YgY29uZmlncyB0aGF0IEkmIzM5O2xsIG5lZWQgdG8ga25vdyBhYm91dDoKCiogICBgVEVTVF9ITU1gCiogICBgREVWSUNFX1BSSVZBVEVgCiogICBgWk9ORV9ERVZJQ0VgCiogICBgREVWSUNFX01JR1JBVElPTmAKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBNSUdSQVRJT05gCgpJIGp1c3QgZG91YmxlLWNoZWNrZWQgYW5kIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbGAgdGllZCB0byBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU28sIGVuYWJsaW5nIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgaXQuIFN0aWxsLCBJJiMzOTtsbCBrZWVwIGl0IG9uIHRoZSBsaXN0IGZvciBjbGFyaXR5LgoKT2ggd2FpdCwgYE1JR1JBVElPTmAgaXMgYSBib29sZWFuIGFuZCBzZWxlY3RlZCBieSBgQ09NUEFDVElPTmAgd2hpY2ggZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTssIHNvIGl0IGlzIGxpa2VseSBlbmFibGVkIGFscmVhZHkuIEp1c3QgYW5vdGhlciBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzM1My1cbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBDb25maWd1cmF0aW9uIFN0YXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtZZXMsIGBURVNUX0hNTWAgaXMgY29uZmlybWVkIHRvIGJlIHRyaXN0YXRlLiYjMzQ7IFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byBleGFtaW5lIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgREVWSUNFX1BSSVZBVEVgIGludGVyYWN0cyB3aXRoLCBvciBpcyBpbmZsdWVuY2VkIGJ5LCB0aGlzIGBURVNUX0hNTWAgdHJpc3RhdGUuIFdoYXQgZG9lcyB0aGlzIHJldmVhbCBhYm91dCBvdmVyYWxsIGRldmljZSBzZWN1cml0eSBvciBiZWhhdmlvdXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBEZXZpY2UgUGFyYW1ldGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGlzIGluZGVlZCBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCBpbXBsaWNhdGlvbnMgb2YgYFpPTkVfREVWSUNFYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBudWFuY2UgaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYERFVklDRV9QUklWQVRFYCwgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gV2hhdCBhcmUgdGhlIGFsbG93ZWQgdmFsdWVzIG9mIGBaT05FX0RFVklDRWAsIGFuZCBpbiB3aGF0IGNvbnRleHRzIGlzIGBaT05FX0RFVklDRWAgZXZhbHVhdGVkPyAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGV2aWNlIFN0YXRlcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3N1bXB0aW9uOiBgWk9ORV9ERVZJQ0VgIGlzIGluZGVlZCBhIGJvb2xlYW4gdmFsdWUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaG93IEkgaW50ZXJwcmV0IHRoZSBzdGF0ZSBvZiB0aGlzIHN5c3RlbSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGRldmljZS1yZWxhdGVkIHNldHRpbmdzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZsYWcgYW5kIHRoZSBicm9hZGVyIG1pZ3JhdGlvbiBwcm9jZWR1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIGV4cGVjdC4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzIHRvIGV2YWx1YXRpbmcgdGhlIGBERVZJQ0VfTUlHUkFUSU9OYCBzZXR0aW5nIG5leHQuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gc2V0dGluZ3MgaXMgcHJvYmFibHkgaW1wb3J0YW50IGZvciBob3cgdGhpcyB3aG9sZSB0aGluZyB3b3Jrcy4gSXQgZGljdGF0ZXMgaG93IHRoZSB3aG9sZSBzeXN0ZW0gcmVzcG9uZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTktXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZy03MDEtXHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjM0CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUgYW5kIFRlc3QgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGluZGVlZCBhIGRlZl9ib29sIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhY3RpdmF0ZSBpdC4gSXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29uZmlncyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIGFyZTogYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkmIzM5O2xsIG1ha2UgYSBub3RlIHRvIGRvdWJsZS1jaGVjayB0aG9zZS4KCkRpZ2dpbmcgZGVlcGVyLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoaXMgaXMgdGhlIGNydXggb2YgaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjbGVhcmluZyBhIGZvbGlvJiMzOTtzIG1hcHBpbmcgYWZ0ZXIgaXQmIzM5O3MgcmVtb3ZlZCBmcm9tIHRoZSBzd2FwIGNhY2hlLgoKVG8gdGVzdCB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGlzIGNvcmUgZnVuY3Rpb24gaXMgcmVhY2hlZC4gTG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBoYXZlIHRocmVlIGtleSBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nOiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1dGlsaXplZCBieSBkZXZpY2UgZHJpdmVycywgc28gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbnMgY291bGQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBjYWxscyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc3RydWN0IHNvbWUgdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIGFsbCBvZiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHN0cmVzcyB0aGUgZm9saW8gY2xlYXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4KCkkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIGZvciBtaWdyYXRpbmcgZGV2aWNlIG1lbW9yeS4gSXQgYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNsZWFyIHRoZSBtYXBwaW5nIG9mIGEgZm9saW8gYWZ0ZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AsIHdoaWNoIGFyZSB1c2VkIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgYHRlc3RfaG1tYCBtb2R1bGUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjA3LjE2NzQ0Mjc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTI0ODg5MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjA3LjE2NzQ1NzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcxMjI3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxODQ1ZDIyZTJkYThmNTNlZGNkYmVjM2Y0ZTg0OWEyY2Y2M2E5Mjg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDAyOjU1OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuaW5kZXggNTU0NzU0ZWIyNmZmMmYuLmZhN2ZiYWNhYzUxNDM4IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuQEAgLTEyMDQsNiArMTIwNCwxMiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbiBcXHRcXHRcXHRcXHRcXHRzcmNfcGZuc1tpXSBcXHUwMDI2PSB+TUlHUkFURV9QRk5fTUlHUkFURTtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwXFxuK1xcdFxcdFxcdFxcdCAqIGNhY2hlLiBNaWdyYXRlIGl0IGFzIGEgbWFwcGluZ2xlc3MgYW5vbnltb3VzIGZvbGlvLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0bWFwcGluZyA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIGlmIChmb2xpb19pc196b25lX2RldmljZShuZXdmb2xpbykpIHtcXG4gXFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MDcuODM1NTU5NzY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA3ODU2NzYzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE4NDVkMjJlMmRhOGY1M2VkY2RiZWMzZjRlODQ5YTJjZjYzYTkyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMjo1NTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXG5pbmRleCA1NTQ3NTRlYjI2ZmYyZi4uZmE3ZmJhY2FjNTE0MzggMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlX2RldmljZS5jXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXG5AQCAtMTIwNCw2ICsxMjA0LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4gXHRcdFx0XHRcdHNyY19wZm5zW2ldIFx1MDAyNj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7XG4gXHRcdFx0XHRcdGdvdG8gbmV4dDtcbiBcdFx0XHRcdH1cbitcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwXG4rXHRcdFx0XHQgKiBjYWNoZS4gTWlncmF0ZSBpdCBhcyBhIG1hcHBpbmdsZXNzIGFub255bW91cyBmb2xpby5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0bWFwcGluZyA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKG5ld2ZvbGlvKSkge1xuIFx0XHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTowNy44MzU1NjIzNjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI4NDU4Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYSBEZXZpY2UgTWlncmF0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgYSBwYXRjaCBqdXN0IGNyb3NzZWQgbXkgZGVzayB0b3VjaGluZyBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIEhtbSwgSSBzZWUgaXQncyBhZGRpbmcgYG1hcHBpbmcgPSBOVUxMO2AgaW5zaWRlIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiwgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSB6ZXJvaW5nIG91dCBgbWFwcGluZ2AgdGhlcmUuIElzIHRoaXMgYSBkZWZlbnNpdmUgbWVhc3VyZT8gQXJlIHdlIHRyeWluZyB0byBlbnN1cmUgYSBjbGVhbiBzdGF0ZSBiZWZvcmUgYSBuZXcgbWFwcGluZyBpcyBhc3NpZ25lZCwgb3IgcGVyaGFwcyBjbGVhcmluZyBhIHBvdGVudGlhbCBzdGFsZSB2YWx1ZT8gUGVyaGFwcyB0aGlzIGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcHJvYmxlbSByZWxhdGVkIHRvIGRldmljZSBtaWdyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBgbWFwcGluZ2AgdmFyaWFibGUgaXMgdXNlZCBmb3Igd2l0aGluIHRoZSBmdW5jdGlvbiwgd2hhdCBoYXBwZW5zIHdpdGggaXQgYmVmb3JlIHRoaXMgbGluZSwgYW5kIHdoYXQgaGFwcGVucyBhZnRlci4gVGhpcyBpcyBjbGVhcmx5IGEgY2hhbmdlIHRoYXQgY291bGQgaW1wYWN0IGRldmljZSBtaWdyYXRpb24gcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgaW1wYWN0IGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHNlZW1pbmdseSBzaW1wbGUgYXNzaWdubWVudC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjExLjE2NDAyNDE5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NDcxNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19taWdyYXRlX2RldmljZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5Ny1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEwOTg6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjUzPXZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU1LXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTY6XFx0X19taWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU3LX1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI2OD12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MDpcXHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKG1pZ3JhdGUtXFx1MDAzZXNyYywgbWlncmF0ZS1cXHUwMDNlZHN0LCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjExLjI4MjY3NTU3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODE3MjUyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBiZWNhdXNlIGl0J3MgYXQgdGhlIGNvcmUgb2YgZGV2aWNlIHBhZ2UgbWlncmF0aW9uLCBhbmQgaXQncyBjYWxsZWQgYnkgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMsIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIHBvdGVudGlhbGx5IGltcGFjdGluZyBhIGxvdCBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGludGVyYWN0aW9ucy5cblxuSSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNoYW5nZXMgdGhleSdyZSBtYWtpbmcgdG8gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBHb3R0YSBzZWUgcHJlY2lzZWx5IHdoYXQgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIGluIHRoYXQgZnVuY3Rpb24uIFdoYXQgYXJlIHRoZXkgKmRvaW5nKiB3aXRoIHRoZSBtaWdyYXRpb24gcHJvY2Vzcz8gQXJlIHRoZXkgYWRkaW5nIGEgbmV3IGNoZWNrPyBNb2RpZnlpbmcgaG93IHBhZ2VzIGFyZSBtb3ZlZCBvciBpbnZhbGlkYXRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaW1wbGljYXRpb25zPyBBbnkgY2hhbmNlIHRoaXMgaXMgZ29pbmcgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBvbmdvaW5nIHdvcmsgaW4gdGhpcyBhcmVhPyBXaXRob3V0IHNlZWluZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXQncyBpbXBvc3NpYmxlIHRvIG1ha2UgYSBzb2xpZCBhc3Nlc3NtZW50LiBMZXQncyBnZXQgdGhhdCBjb2RlIHNuaXBwZXQgcHVsbGVkIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MTQuNTY0NDAzMTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyOTAsIkVycm9yIjoiYXJndW1lbnQgXCJGaXJzdExpbmVcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IFwiMTE5MFwiLFxuICBcIkxpbmVDb3VudFwiOiBcIjQwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYXJndW1lbnQgXFxcIkZpcnN0TGluZVxcXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjE0LjU2NDQzNjg1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTUxODAwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHByb2Nlc3NpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW50ZWdlciBJbnB1dCBSZXF1aXJlbWVudCoqXG5cblJpZ2h0LCBzbyB0aGUgQVBJIGludGVyYWN0aW9uIGhhcyBmbGFnZ2VkIHNvbWV0aGluZy4gSXQncyBleHBlY3RpbmcgYW4gaW50ZWdlciBhcyBpbnB1dC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IHRoaXMgaW1wYWN0cyBteSBjdXJyZW50IHdvcmtmbG93LiBJcyB0aGUgZGF0YSBJJ20gZmVlZGluZyBpdCBhbHJlYWR5IGluIGFuIGludGVnZXIgZm9ybWF0PyBJZiBub3QsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcHByb3ByaWF0ZSBjb252ZXJzaW9uIG1ldGhvZC4gRGVwZW5kaW5nIG9uIHRoZSBzb3VyY2UgZGF0YSwgdGhpcyBjb3VsZCBpbnZvbHZlIGNhc3RpbmcsIHJvdW5kaW5nLCBvciBldmVuIG1vcmUgY29tcGxleCB0cmFuc2Zvcm1hdGlvbnMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBjb21wYXRpYmlsaXR5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGRhdGEgdHlwZXMgYW5kIHByZS1wcm9jZXNzaW5nIHN0ZXBzLiBQb3RlbnRpYWwgZXJyb3JzIGNvdWxkIGFyaXNlIGZyb20gc2VuZGluZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIHN0cmluZ3MgdGhhdCB0aGUgQVBJIG1pZ2h0IG1pc2ludGVycHJldC4gQmVzdCB0byBhZGRyZXNzIHRoaXMgdXBmcm9udCBhbmQgYXZvaWQgZG93bnN0cmVhbSBpc3N1ZXMgb3IgdW5leHBlY3RlZCBBUEkgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhbiwgdmFsaWRhdGVkIGludGVnZXIgaXMgcGFzc2VkIHRvIHRoYXQgQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjE3LjQ3OTYxODk3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5MDpcXHRcXHRcXHR9XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcbjExOTM6XFx0XFx0XFx0aWYgKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKG5ld2ZvbGlvKSB8fFxcbjExOTQ6XFx0XFx0XFx0ICAgIGZvbGlvX2lzX2RldmljZV9jb2hlcmVudChuZXdmb2xpbykpIHtcXG4xMTk1OlxcdFxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuMTE5NjpcXHRcXHRcXHRcXHRcXHQvKlxcbjExOTc6XFx0XFx0XFx0XFx0XFx0ICogRm9yIG5vdyBvbmx5IHN1cHBvcnQgYW5vbnltb3VzIG1lbW9yeSBtaWdyYXRpbmcgdG9cXG4xMTk4OlxcdFxcdFxcdFxcdFxcdCAqIGRldmljZSBwcml2YXRlIG9yIGNvaGVyZW50IG1lbW9yeS5cXG4xMTk5OlxcdFxcdFxcdFxcdFxcdCAqXFxuMTIwMDpcXHRcXHRcXHRcXHRcXHQgKiBUcnkgdG8gZ2V0IHJpZCBvZiBzd2FwIGNhY2hlIGlmIHBvc3NpYmxlLlxcbjEyMDE6XFx0XFx0XFx0XFx0XFx0ICovXFxuMTIwMjpcXHRcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykgfHxcXG4xMjAzOlxcdFxcdFxcdFxcdFxcdCAgICAhZm9saW9fZnJlZV9zd2FwKGZvbGlvKSkge1xcbjEyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3JjX3BmbnNbaV0gXFx1MDAyNj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7XFxuMTIwNTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMTIwNjpcXHRcXHRcXHRcXHRcXHR9XFxuMTIwNzpcXHRcXG4xMjA4OlxcdFxcdFxcdFxcdFxcdC8qXFxuMTIwOTpcXHRcXHRcXHRcXHRcXHQgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwXFxuMTIxMDpcXHRcXHRcXHRcXHRcXHQgKiBjYWNoZS4gTWlncmF0ZSBpdCBhcyBhIG1hcHBpbmdsZXNzIGFub255bW91cyBmb2xpby5cXG4xMjExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjEyMTI6XFx0XFx0XFx0XFx0XFx0bWFwcGluZyA9IE5VTEw7XFxuMTIxMzpcXHRcXHRcXHRcXHR9XFxuMTIxNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKG5ld2ZvbGlvKSkge1xcbjEyMTU6XFx0XFx0XFx0XFx0LypcXG4xMjE2OlxcdFxcdFxcdFxcdCAqIE90aGVyIHR5cGVzIG9mIFpPTkVfREVWSUNFIHBhZ2UgYXJlIG5vdCBzdXBwb3J0ZWQuXFxuMTIxNzpcXHRcXHRcXHRcXHQgKi9cXG4xMjE4OlxcdFxcdFxcdFxcdHNyY19wZm5zW2ldIFxcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xcbjEyMTk6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjEyMjA6XFx0XFx0XFx0fVxcbjEyMjE6XFx0XFxuMTIyMjpcXHRcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0XFx0aWYgKG1pZ3JhdGUgXFx1MDAyNlxcdTAwMjYgbWlncmF0ZS1cXHUwMDNlZmF1bHRfcGFnZSA9PSBwYWdlKVxcbjEyMjU6XFx0XFx0XFx0XFx0ZXh0cmFfY250ID0gMTtcXG4xMjI2OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuciBcXHUwMDI2XFx1MDAyNiBpICsgaiBcXHUwMDNjIG5wYWdlczsgaisrKSB7XFxuMTIyNzpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpK2pdKSk7XFxuMTIyODpcXHRcXHRcXHRcXHRuZXdmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpK2pdKSk7XFxuMTIyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MTcuNDc5NzE4MzA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMDEwNDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgUGF0Y2ggaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb246IGBtYXBwaW5nID0gTlVMTDtgIGFmdGVyIHRoYXQgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgIGNhbGwgaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLCBhbmQgdGhlIGludGVudGlvbiBpcyBsaWtlbHkgdG8gemVybyBvdXQgdGhhdCBwb2ludGVyIGFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBmcmVlZC4gSSB1bmRlcnN0YW5kIHRoaXMgaXMgb2NjdXJyaW5nIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIGtlcm5lbCBmb3IgaGFuZGxpbmcgcGFnZSBtaWdyYXRpb24sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZW52aXJvbm1lbnQgaXQgbWF5IGJlIHJ1bm5pbmcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgZmlsZS4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBtYXkgcmVxdWlyZSBhIHJldmlldyBvZiByZWxhdGVkIGNvbW1pdHMsIGJ1dCBJJ2xsIGZvY3VzIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjIwLjc3OTgyNDczM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDcwMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MjAuODkxOTA0MDM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjYwNjIwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3MsIHdpdGggYSBmb2N1cyBvbiBhIGZpZWxkIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgdGFzayBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHRoZSBrZXkuIEJ1dCB3aGF0IGVsc2UgaXMgdGllZCB0byB0aGF0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gYW55dGhpbmcgZWxzZSB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgdGhpcyBqdXN0IGEgZmxhZywgb3IgZG9lcyBpdCB1bmxvY2sgYSB3aG9sZSBjYXNjYWRlIG9mIG90aGVyIHNldHRpbmdzIG9yIHByZXJlcXVpc2l0ZXM/IFdlIGFsbCBrbm93IHRoYXQgY29uZmlndXJhdGlvbnMgcmFyZWx5IGV4aXN0IGluIGlzb2xhdGlvbjsgdGhlcmUncyBhbHdheXMgYSB3ZWIgb2YgZGVwZW5kZW5jaWVzIHRvIHVucmF2ZWwgdG8gZW5zdXJlIHRoaW5ncyB3b3JrIHByZWRpY3RhYmx5IGFuZCBzYWZlbHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRob3NlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIgd2l0aCB0ZXN0aW5nIG9yIGludGVncmF0aW9uLiBMZXQncyBzZWUgd2hhdCBlbHNlIGl0IHB1bGxzIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MjMuODU3OTY4NDAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4NDI5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9NSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5OS1cXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxcbm1tL0tjb25maWctNzAxLVxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NToyMy45OTA4MTU4MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI3MDY0NzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFkZHJlc3NpbmcgdGhlIEluZnJhc3RydWN0dXJlIFNoaWZ0KipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBzaGlmdCwgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyBib3RoIGBNSUdSQVRJT05gIGFuZCBhIGBaT05FX0RFVklDRWAuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoYXQgYFpPTkVfREVWSUNFYC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgaW52b2x2ZWQgaW4gdGhhdCBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjI2LjI2MTQ2NTg4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NTI5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MjYuMzg4MDAxNTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MjQ3NTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aGUgc3lzdGVtIGlzIHRlbGxpbmcgbWUgdGhhdCBgREVWSUNFX01JR1JBVElPTmAgZGVwZW5kcyBvbiBib3RoIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBSaWdodCwgbWFrZXMgc2Vuc2UuIExldCdzIHF1aWNrbHkgdmVyaWZ5IGlmIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBldmVuIHNlbGVjdGFibGUgYXQgYWxsLCBvciBpZiBpdCdzIGltcGxpY2l0bHkgZGVmaW5lZC4gQWgsIGl0J3MgYSBgZGVmX2Jvb2xgIHRpZWQgdG8gYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFNvIEkgY2FuJ3QgZGlyZWN0bHkgZW5hYmxlIGBERVZJQ0VfTUlHUkFUSU9OYDsgaW5zdGVhZCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0ICpib3RoKiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCBhcmUgc2V0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSB0d28uIE9rYXksIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgTUlHUkFUSU9OYCBub3cgYW5kIHNlZWluZyB3aGF0IHRoYXQgZW50YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjI5LjU0MDQ3OTY2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODU2NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjk1LVxcbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY5Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjI5LjY4MzM0MDg2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk4ODEyNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgTUlHUkFUSU9OYCBCb29sZWFuKipcblxuQWxyaWdodCwgc28gYE1JR1JBVElPTmAgaXMgZmxhZ2dlZCBhcyBhIGJvb2xlYW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIHRyYWNlIHRoaXMgYmFjay5cIiBJdCdzIGEgYmluYXJ5IHN0YXRlLCBlaXRoZXIgdHJ1ZSBvciBmYWxzZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBhY3RpdmF0ZXMgdGhpcyBib29sZWFuLiBUaGUgY29yZSBxdWVzdGlvbiBpcywgd2hlcmUgaW4gdGhlIGNvZGUgaXMgaXQgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZD8gV2hhdCBwaWVjZXMgb2YgbG9naWMgYXJlIHNldHRpbmcgaXQgdG8gdHJ1ZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMgYW5kIGZpbmQgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgdGhhdCBtYW5pcHVsYXRlIHRoaXMgYE1JR1JBVElPTmAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB0cmlnZ2VyIG1lY2hhbmlzbSBiZWZvcmUgSSBjYW4gZXZhbHVhdGUgaXRzIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozMi40ODIxNTU1MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTcxMDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTk0LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjU5NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01OTYtXFxuLS1cXG5tbS9LY29uZmlnPTY1ND1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTYtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NTc6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjg4LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY4OTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA2OS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA3MDpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDcxLVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjMyLjU4Mzg3NDc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIzNzA3NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBEYXRhYmFzZSBEZXBsb3ltZW50IFN0cmF0ZWd5KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgc3lzdGVtIGNob3NlIGBDT01QQUNUSU9OYCwgYW5kIGl0IHNlZW1zIGBDT01QQUNUSU9OYCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCBpdCdzIHNlbGVjdGVkIGRpcmVjdGx5IGltcGxpZXMgdGhhdCBgTUlHUkFUSU9OYCBpcyBsaWtlbHkgYWxzbyBlbmFibGVkLCBnaXZlbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQ29tcGFjdGlvbiBpcyB0aGUgZm91bmRhdGlvbiwgbWFraW5nIG1pZ3JhdGlvbiBwb3NzaWJsZS5cblxuQnV0IHRoZSBxdWVzdGlvbiBpbiB0aGUgYmFjayBvZiBteSBtaW5kIGlzLCB3aGF0J3MgaGFwcGVuaW5nIG9uIGBaT05FX0RFVklDRWA/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjaG9zZW4gc3RyYXRlZ3kgYWxpZ25zIHdpdGggdGhlIGRldmljZSBpbiB1c2UuIExldCBtZSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGBaT05FX0RFVklDRWAgcmVsYXRpdmUgdG8gYENPTVBBQ1RJT05gIGFuZCBgTUlHUkFUSU9OYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjM1LjUwNzU4NTI2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkxMzAyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozNS41OTY3MjA2MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1OTU4MTYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFpPTkVfREVWSUNFKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gVGhpcyBtZWFucyBJJ20gZ29pbmcgdG8gaGF2ZSB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGFueSBtb2R1bGVzLCBmdW5jdGlvbnMsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgdXRpbGl6ZSBvciByZWZlcmVuY2UgdGhhdCBzcGVjaWZpYyB2YXJpYWJsZSBvciBvYmplY3QuIEknbGwgbmVlZCB0byBjb25zaWRlciBkaXJlY3QgZGVwZW5kZW5jaWVzIGZpcnN0LCBidXQgYWxzbyBrZWVwIGluIG1pbmQgdGhhdCBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgY291bGQgYmUgY3J1Y2lhbCDigJMgc29tZXRoaW5nIHRoYXQgY2FsbHMgYSBmdW5jdGlvbiB0aGF0ICp1c2VzKiBgWk9ORV9ERVZJQ0VgLCBmb3IgZXhhbXBsZS4gSSdsbCBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LCBwZXJoYXBzIHN0YXJ0aW5nIHdpdGggYSBjb2RlIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIHRoZSB2YXJpYWJsZSBhbmQgdGhlbiBidWlsZGluZyBhIG1hcCBvZiBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgY29tcG9uZW50cy4gVGhlIGFyY2hpdGVjdHVyZSBpcyBrZXkgaGVyZS4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgY29kZWJhc2UsIEkgbWlnaHQgbGV2ZXJhZ2Ugc29tZSB0b29saW5nIHRvIGF1dG9tYXRlIHRoZSBkZXBlbmRlbmN5IGFuYWx5c2lzIHRvIHNvbWUgZXh0ZW50LiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gZGVsdmUgaW50byB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZSBhaW0gaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2Ugb3IgbW9kaWZpY2F0aW9uIHRvIGBaT05FX0RFVklDRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozOC42NTYzMDQ5MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjM3OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIzODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuMTIzOTpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjQwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4xMjQxOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0aGVscFxcbjEyNDQ6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyNDU6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyNDY6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjQ3OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjQ4OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyNDk6XFx0XFxuMTI1MDpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjUxOlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyNTI6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI1MzpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNTQ6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjU1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozOC42NTY0NTQwNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMDkzOTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIHRvIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZXBlbmRlbmNpZXMgYW5kIFJlYWNoYWJpbGl0eSBBbmFseXNpcyBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgWk9ORV9ERVZJQ0VgIGZlYXR1cmUuIEl0J3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gTWFrZXMgc2Vuc2UsIHRoZSBhYmlsaXR5IHRvIG1hbmFnZSBkZXZpY2UgbWVtb3J5IHpvbmVzIGR5bmFtaWNhbGx5IHJlcXVpcmVzIHRob3NlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzLiBHaXZlbiB0aGlzLCBJIHRoaW5rIHdlIHNob3VsZCBlbmFibGUgYFpPTkVfREVWSUNFYC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyBkaWdnaW5nIGludG8gdGhlIGltcGxpY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gSXQncyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIHBhZ2VzIHRvIG9yIGZyb20gZGV2aWNlIHpvbmVzLCBzbyBpdOKAmXMgY3JpdGljYWwuIEkgY2FuIHNlZSBpdCdzIGNhbGxlZCBkaXJlY3RseSBieSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aG8gKmNhbGxzKiB0aG9zZSB0d28gZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHRvIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGNvbmZpZGVuY2UgSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBhIGdvb2QgY2hhbmdlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjYWxsIGNoYWluIHRvIHRob3JvdWdobHkgdmV0IHRoZSBpbXBhY3Qgb24gdGhlIGV4aXN0aW5nIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjQzLjU4NzM5NTc1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NzMwMzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV9wYWdlc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTA5PWludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc0LVxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgZHN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTc1OlxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzYtXFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz00NzU9bm91dmVhdV9kbWVtX2V2aWN0X2NodW5rKHN0cnVjdCBub3V2ZWF1X2RtZW1fY2h1bmsgKmNodW5rKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtNTE3LVxcdG5vdXZlYXVfZmVuY2VfbmV3KFxcdTAwMjZmZW5jZSwgY2h1bmstXFx1MDAzZWRybS1cXHUwMDNlZG1lbS1cXHUwMDNlbWlncmF0ZS5jaGFuKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo1MTg6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTUxOS1cXHRub3V2ZWF1X2RtZW1fZmVuY2VfZG9uZShcXHUwMDI2ZmVuY2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9MTk4PWludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTk5OnZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTIwMC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xODg9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmsoc3RydWN0IGRtaXJyb3JfY2h1bmsgKmNodW5rKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjMxLVxcdH1cXG5saWIvdGVzdF9obW0uYzoyMzI6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMpO1xcbmxpYi90ZXN0X2htbS5jLTIzMy1cXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk2NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMDk4OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDk5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0NC0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDU6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNDYtICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Mi0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTM6dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NS17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU2OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Ny19XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY5LXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzA6XFx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVxcdTAwM2VzcmMsIG1pZ3JhdGUtXFx1MDAzZWRzdCwgbWlncmF0ZS1cXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzEtfVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzkzLSAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM5NDogKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTUtICovXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NjE9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODUtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDg2OlxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxcdGlmIChzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NDYuMTc0NzA0NzAxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzkwNDA2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgKipcblxuUmlnaHQsIGxldCdzIHNlZSwgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGEgZmV3IGludGVyZXN0aW5nIHBsYWNlcy4gRmlyc3QsIEkgc2VlIGl0J3MgdXNlZCBpbiBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0J3MgZ29vZCwgYSB0ZXN0IG1vZHVsZSBpcyBhbHdheXMgYSBzZW5zaWJsZSBwbGFjZSB0byBmaW5kIGEgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIG1pZ3JhdGlvbiDigJMgdGhleSBhcmUgb2Z0ZW4gZ3JlYXQgZm9yIGZ1enppbmcgYW5kIHN0cmVzcy10ZXN0aW5nLiBNYWtlcyBzZW5zZS4gVGhlbiB0aGVyZSdzIGBtbS9taWdyYXRlX2RldmljZS5jYCwgc3BlY2lmaWNhbGx5IGluIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiBpcywgc28gaXQncyBub3QgYSBzdXJwcmlzZSB0byBzZWUgaXQgdGhlcmUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gY29oZXJlbnQgZm9saW9zLCB3aGljaCBvZnRlbiBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZHVyaW5nIG1pZ3JhdGlvbi5cblxuSG1tLCBpbnRlcmVzdGluZywgaXQncyBhbHNvIGluIGBub3V2ZWF1X2RtZW0uY2AgYW5kIGBkcm1fcGFnZW1hcC5jYC4gVGhhdCBwb2ludHMgdG8gZGV2aWNlIGRyaXZlciB1c2UsIGxpa2VseSByZWxhdGVkIHRvIG1vdmluZyBwYWdlcyB0byBhbmQgZnJvbSBncmFwaGljcyBoYXJkd2FyZSwgb3Igb3RoZXIgRE1BLWNhcGFibGUgZGV2aWNlcy4gR3JhcGhpY3Mgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgbmVlZHMgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWlncmF0aW9uLCBzbyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgbGV0J3MgZGlnIGludG8gYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgdG8gc2VlIHdoZXJlIHRoZSBWTUEncyBhcmUgcmVsYXRlZCB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDcwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NTAuMDUzNzQ4NjI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIzNzAzMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3BhZ2VzXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI2Ni1mdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIG1ha2UgZHJpdmVycyBlYXNpZXIgdG8gd3JpdGUgYW5kIHRvIGNlbnRyYWxpemUgY29tbW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozNjU6NC4gYGBtaWdyYXRlX3ZtYV9wYWdlcygpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI5ODo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjk5LVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz01MTM9c3RhdGljIGludCBfX2t2bXBwY19zdm1fcGFnZV9vdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU3OC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjU3OTpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU4MC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03ODctXFx0Km1pZy5kc3QgPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihkcGFnZSkpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6Nzg4OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzg5LW91dF9maW5hbGl6ZTpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9Mzk0PXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00NTEtXFx0ciA9IHN2bV9taWdyYXRlX2NvcHlfdG9fdnJhbShub2RlLCBwcmFuZ2UsIFxcdTAwMjZtaWdyYXRlLCBcXHUwMDI2bWZlbmNlLCBzY3JhdGNoLCB0dG1fcmVzX29mZnNldCk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0NTI6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzU1LVxcdFxcdFxcdFxcdCAgICBzY3JhdGNoLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzU2OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MTItZXJyX2Fib3J0ZWRfbWlncmF0aW9uOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgxMzpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODE0LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIxMT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzA0LVxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzMDU6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMDYtXFx0bWlncmF0ZV92bWFfZmluYWxpemUoXFx1MDAyNm1pZ3JhdGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2Ny1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRtZW0tXFx1MDAzZW1pZ3JhdGUuY2hhbik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjY4OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjktXFx0bm91dmVhdV9kbWVtX2ZlbmNlX2RvbmUoXFx1MDAyNmZlbmNlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTc4Mz1zdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fbWlncmF0ZV9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgwOS1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRybS1cXHUwMDNlZG1lbS1cXHUwMDNlbWlncmF0ZS5jaGFuKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4MTA6XFx0bWlncmF0ZV92bWFfcGFnZXMoYXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODExLVxcdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFxcdTAwMjZmZW5jZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NS1cXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjY6XFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ny1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Mz1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTQ6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NS12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTExNzUtXFxubGliL3Rlc3RfaG1tLmM6MTE3NjpcXHRcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTE3Ny1cXHRcXHRjbWQtXFx1MDAzZWNwYWdlcyArPSBkbWlycm9yX3N1Y2Nlc3NmdWxfbWlncmF0ZWRfcGFnZXMoXFx1MDAyNmFyZ3MpO1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTE4OT1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2Uoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMjQ4LVxcdFxcdGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShcXHUwMDI2YXJncywgZG1pcnJvcik7XFxubGliL3Rlc3RfaG1tLmM6MTI0OTpcXHRcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTI1MC1cXHRcXHRkbWlycm9yX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcChcXHUwMDI2YXJncywgZG1pcnJvcik7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNjUzPXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTcxOC1cXHR9XFxubGliL3Rlc3RfaG1tLmM6MTcxOTpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTcyMC1cXHQvKlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTktICogdGhpcyBjYW4gc3RpbGwgZmFpbCwgYW5kIHRodXMgaW5zaWRlIHRoZSBkZXZpY2UgZHJpdmVyIHlvdSBtdXN0IGNoZWNrIGlmIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzAwOiAqIG1pZ3JhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBmb3IgdGhvc2UgZW50cmllcyBhZnRlciBjYWxsaW5nIG1pZ3JhdGVfdm1hX3BhZ2VzKCksXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDEtICoganVzdCBsaWtlIGZvciByZWd1bGFyIG1pZ3JhdGlvbi5cXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMi0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzAzOiAqIEFmdGVyIHRoYXQsIHRoZSBjYWxsZXJzIG11c3QgY2FsbCBtaWdyYXRlX3ZtYV9wYWdlcygpIHRvIGdvIG92ZXIgZWFjaCBlbnRyeVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA0LSAqIGluIHRoZSBzcmMgYXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWdcXG5tbS9taWdyYXRlX2RldmljZS5jLTcwNS0gKiBzZXQuIElmIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGRzdCBhcnJheSBoYXMgTUlHUkFURV9QRk5fVkFMSUQgZmxhZyBzZXQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MDY6ICogdGhlbiBtaWdyYXRlX3ZtYV9wYWdlcygpIHRvIG1pZ3JhdGUgc3RydWN0IHBhZ2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgc291cmNlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDctICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGVcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzE0LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MTU6ICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTYtICogc3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkLCBhbmQgd2hpY2ggd2VyZSBub3QuICBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgcGFnZXMgd2lsbFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTgtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjcxOTogKiBJdCBpcyBzYWZlIHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSBhZnRlciBtaWdyYXRlX3ZtYV9wYWdlcygpIGJlY2F1c2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTcyMC0gKiBib3RoIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgcGFnZSBhcmUgc3RpbGwgbG9ja2VkLCBhbmQgdGhlIG1tYXBfbG9jayBpcyBoZWxkXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEwOTg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0OS0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MDogKiBFcXVpdmFsZW50IHRvIG1pZ3JhdGVfdm1hX3BhZ2VzKCkuIFRoaXMgaXMgY2FsbGVkIHRvIG1pZ3JhdGUgc3RydWN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTEtICogbWV0YS1kYXRhIGZyb20gc291cmNlIHN0cnVjdCBwYWdlIHRvIGRlc3RpbmF0aW9uLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjU4PUVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGFnZXMpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYwLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2MTogKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2Mi0gKiBAbWlncmF0ZTogbWlncmF0ZSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgbWlncmF0aW9uIGluZm9ybWF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjctICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjY4OnZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjUyLjU3NzQ1NjI5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1MDI1MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTGV2ZXJhZ2luZyBFeGlzdGluZyBUZXN0IEluZnJhc3RydWN0dXJlKipcblxuSSBzZWUgdGhhdCB0aGUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBmdW5jdGlvbiwgdGhlIG9uZSBJJ20gd29ya2luZyB3aXRoLCBpcyBhbHNvIGludm9rZWQgZnJvbSBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZSBmb2xrcyB3aG8gd3JvdGUgdGhhdCB0ZXN0IGhhcm5lc3MgcHJvYmFibHkgYWxyZWFkeSBoYXZlIGEgc29saWQgZnJhbWV3b3JrIGZvciBleGVyY2lzaW5nICp0aGlzKiB2ZXJ5IHBpZWNlIG9mIGNvZGUuIFJhdGhlciB0aGFuIHJlaW52ZW50aW5nIHRoZSB3aGVlbCwgSSBzaG91bGQgYWJzb2x1dGVseSBsZXZlcmFnZSB0aGF0IGV4aXN0aW5nIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIFVzaW5nIGBsaWIvdGVzdF9obW0uY2Agc2VlbXMgbGlrZSBhIHNtYXJ0IHdheSB0byByaWdvcm91c2x5IHRlc3QgdGhlIGNvZGUgY2hhbmdlcyBJJ20gbWFraW5nLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGhvdyBJIGNhbiBpbnRlZ3JhdGUgbXkgdGVzdCBjYXNlcyBlZmZlY3RpdmVseS4gSXQgd291bGQgc2F2ZSBtZSBhIGxvdCBvZiB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjU1LjY5MjQ4MzcyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyODM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdF9obW0ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICs9IHRlc3RfbG9ja3VwLm9cXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgKz0gdGVzdF9obW0ub1xcbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgKz0gdGVzdF9mcmVlX3BhZ2VzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NTUuNzgwNzcxNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MDQ0Mjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJJ20gbG9va2luZyBhdCBgQ09ORklHX1RFU1RfSE1NYCwgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBzZXRzIHVwIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYGxpYi90ZXN0X2htbS5jYCBmaWxlLiBOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBteSBuZXh0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgdGVzdGluZyBmcmFtZXdvcmsgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0J3MgcmVxdWlyZWQgZm9yIGl0IHRvIGJ1aWxkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgbmVlZCB0byBlbnN1cmUgSSBrbm93IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGxpYnJhcmllcywgb3IgbW9kdWxlcyBgQ09ORklHX1RFU1RfSE1NYCByZWxpZXMgdXBvbi4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjU4LjkyMTIxNzE3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NzMzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzM1My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNTUtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NTkuMDAyMDk3MTc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Mjc1NzA2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIGZvciB0aGlzIHByb2plY3QuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgbGlrZWx5IGxvY2F0ZWQgd2l0aGluIHRoZSBgS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMzNTQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhhdCBmaWxlIGxvY2F0aW9uIGRpcmVjdGx5LiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZmlndXJhdGlvbiBJJ20gdHJ5aW5nIHRvIGRlY2lwaGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjAxLjcyOTY3MDYyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM1NDpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzU1OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzM1NjpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzM1NzpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzM1ODpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzNTk6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzNjA6XFx0XFx0aGVscFxcbjMzNjE6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzYyOlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzNjM6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzM2NDpcXHRcXG4zMzY1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzY2OlxcdFxcbjMzNjc6XFx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xcbjMzNjg6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgZnJlZWluZyBwYWdlc1xcXCJcXG4zMzY5OlxcdFxcdGhlbHBcXG4zMzcwOlxcdFxcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXFxuMzM3MTpcXHRcXHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cXG4zMzcyOlxcdFxcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxcbjMzNzM6XFx0XFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjAxLjcyOTg4ODg2NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQyMjE5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBTY29wZTogUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gYFRFU1RfSE1NYCBpcyBmbGFnZ2VkIGFzIGRlcGVuZGluZyBvbiBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoYXQncyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHByZXR0eSBjb21tb24gdGhlc2UgZGF5cywgYW5kIGl0cyBpbXBhY3QgaXMgdXN1YWxseSB3ZWxsLXVuZGVyc3Rvb2QsIGJ1dCBgREVWSUNFX1BSSVZBVEVgLi4uIHRoYXQncyB0aGUgb25lIHRoYXQgYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEl0IGNhbiBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50cywgZXNwZWNpYWxseSBjb25jZXJuaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzZWN1cml0eSBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IGBERVZJQ0VfUFJJVkFURWAgc3BlY2lmaWNhbGx5IGVudGFpbHMgaW4gdGhpcyBjb250ZXh0IGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgY291bGQgZGVmaW5lIHRoZSBzY29wZSwgYW5kIHRoYXQncyBjcml0aWNhbC4gTGV0IG1lIHNlZSB3aGF0J3Mgd2hhdCB3aXRoIGBERVZJQ0VfUFJJVkFURWAuIFRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MDQuOTcyMTExNjA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg3ODQyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2Ni1cXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MDUuNDkwOTAxODkxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU3OTY1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSXQncyBhIGtleSBmaWxlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBhcm91bmQgbGluZSAxMjY3IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb3IgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGZvciB3aGF0ZXZlciBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBzcGVjaWZpYyBsaW5lIHJhbmdlIGhlbHBzIG1lIG5hdmlnYXRlIGVmZmljaWVudGx5IGFuZCBhdm9pZCBnZXR0aW5nIGxvc3QgaW4gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBzcGFjZS4gSSdtIGhvcGluZyBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZGVmaW5pdGlvbiDigJMgbWF5YmUgYSBzaW1wbGUgYGNvbmZpZ2AgYmxvY2sgd2l0aCBzb21lIGRlcGVuZGVuY2llcyBvciBhIHRyaXN0YXRlIG9wdGlvbi4gT3IgcGVyaGFwcyB0aGlzIGFyZWEgZGVhbHMgd2l0aCBob3cgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHNwZWNpZmljIG9wdGlvbiBpcyBjb25maWd1cmVkLiBFaXRoZXIgd2F5LCB0aGlzIHNob3VsZCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbidzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjowOC42NDY3MDIxMjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2NzpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjY4OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjY5OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjcwOlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0aGVscFxcbjEyNzM6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyNzQ6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTI3NTpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjc2OlxcdFxcbjEyNzc6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTI3ODpcXHRcXHRib29sXFxuMTI3OTpcXHRcXG4xMjgwOlxcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcXG4xMjgxOlxcdFxcdGJvb2xcXG4xMjgyOlxcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xcbjEyODM6XFx0XFx0Ym9vbFxcbjEyODQ6XFx0XFxuMTI4NTpcXHRjb25maWcgQVJDSF9VU0VTX1BHX0FSQ0hfMlxcbjEyODY6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjowOC42NDY4NDYxNjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyODE2NDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGNoYWluIGZvcm1pbmcuIGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgVEVTVF9ITU1gIGhhcyBkZXBlbmRlbmNpZXMgb24gYm90aCBgREVWSUNFX1BSSVZBVEVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdGhlIG1vZGlmaWNhdGlvbiB0byBgX19taWdyYXRlX2RldmljZV9wYWdlc2Agd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlbHkgdXNlZCBieSBgdGVzdF9obW0uY2AuXG5cbkdvb2QsIGl0IGxvb2tzIGxpa2UgYHRlc3RfaG1tLmNgICpkb2VzKiBjYWxsIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIHdoaWNoIGluIHR1cm4gY2FsbCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIEV4Y2VsbGVudC4gU28gdGhlIGNoYW5nZSB3aXRoaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgdG8gYHRlc3RfaG1tLmNgLlxuXG5UaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgYG1hcHBpbmcgPSBOVUxMO2AgaXMgYWRkZWQgYWZ0ZXIgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgZWZmZWN0IG9uIGBtYXBwaW5nYCBoZXJlIGlzIHRoZSBjb3JlIG9mIHdoYXQgbmVlZHMgdG8gYmUgbG9va2VkIGF0LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZm9yIHNpZGUgZWZmZWN0cy5cblxuTm93LCB0byB6b29tIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCBJIG5lZWQgdG8gZm9jdXMgb24gYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCAtIHRoZXkncmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBraWNrIG9mZiB0aGUgZXhlY3V0aW9uIHBhdGguIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgY2FsbCBgX19taWdyYXRlX2RldmljZV9wYWdlc2Agc28gdGhhdCBJIGNhbiBsb29rIGF0IHRoZSBvdGhlciBjYWxsaW5nIHBvaW50cyB0byBzZWUgdGhlIGVudGlyZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MTMuMzc1MDEzMzE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwODg5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlX2RldmljZS5jPTk2NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMDk4OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDk5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0NC0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDU6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNDYtICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Mi0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTM6dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NS17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU2OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Ny19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1OS1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI2OD12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MDpcXHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKG1pZ3JhdGUtXFx1MDAzZXNyYywgbWlncmF0ZS1cXHUwMDNlZHN0LCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTMtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzk0OiAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5NS0gKi9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ2MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4NS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODY6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXFx1MDAyNnNyY19wZm4sIFxcdTAwMjZkc3RfcGZuLCAxKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODctXFx0aWYgKHNyY19wZm4gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjoxMy41OTExMDYzNTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NzA1MTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuXG5cbioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgRGV2aWNlIFBhZ2UgTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFyZSB0aGUgdHdvIHRvcC1sZXZlbCBleHBvcnRlZCBmdW5jdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIGtub3cgdGhleSdyZSBwYXJ0IG9mIHRoZSBvdmVyYWxsIHBhZ2UgbWlncmF0aW9uIHN5c3RlbS4gVGhlcmUncyBhbHNvIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2Ag4oCTIHRoYXQgbmFtZSBzb3VuZHMgZmFtaWxpYXIsIHNvbWV0aGluZyBzcGVjaWZpYyB0byBjb2hlcmVudCBtZW1vcnkgcmVnaW9ucyBvbiBkZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoYXQgb25lIGFsc28gZXhwb3J0ZWQsIG9yIGlzIGl0IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGUgcHVibGljbHkgYXZhaWxhYmxlIEFQSS4gVGhhdCdsbCBpbmZvcm0gaG93IEkgYXBwcm9hY2ggaW50ZWdyYXRpbmcgd2l0aCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MTYuODM4MTYxNzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDcwMjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9MTA5OD1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI3LVxcdFxcdFxcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cXG5tbS9taWdyYXRlX2RldmljZS5jOjExMjg6XFx0XFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbid0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI5LVxcdFxcdFxcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTQ9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wZm5zKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2MC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NjE6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MTcuMDIyODcwNDM0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTMzNTI2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkZWx2ZSBpbnRvIGxpbmUgMTQ2MSBhbmQgY3JhZnQgYSBzdW1tYXJ5IGFzIGlmIHRoZXNlIHdlcmUgKm15KiB0aG91Z2h0cy4gSGVyZSB3ZSBnbzpcblxuKipEaXZpbmcgaW50byB0aGUgTnVhbmNlcyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gbGluZSAxNDYxLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UgYW5kIGV4cGVydGlzZSBpbiB0aGlzIGZpZWxkLCBJIGFudGljaXBhdGUgdGhpcyBzZWdtZW50IGlzIGxpa2VseSBkaXNjdXNzaW5nIFsqKmluc2VydCB5b3VyIHByZWRpY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgb2YgeW91ciBmaWVsZCoqXS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgWyoqbWVudGlvbmluZyB0aGUgYW50aWNpcGF0ZWQga2V5IGNvbmNlcHRzLCBtZXRob2RzLCBvciB0aGVvcmllcyB0aGF0IHlvdSBleHBlY3QgdG8gZW5jb3VudGVyKipdLiBHaXZlbiB0aGUgdHlwaWNhbCBmbG93IG9mIHJlc2VhcmNoIGluIHRoaXMgYXJlYSwgaXQgbWlnaHQgYmUgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciBhIGxhcmdlciBwb2ludC4gTXkgaW50ZXJuYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0IHdpbGwgZWxhYm9yYXRlIG9uIHNvbWV0aGluZyBJ4oCZdmUgc2VlbiBiZWZvcmUgYnV0IGl0IHdpbGwgYXBwcm9hY2ggaXQgZnJvbSBhIHVuaXF1ZSBwZXJzcGVjdGl2ZS4gSSdtIGVzcGVjaWFsbHkgZWFnZXIgdG8gc2VlIGlmIGl0IGNoYWxsZW5nZXMgbXkgcHJlLWNvbmNlaXZlZCBub3Rpb25zIG9yIGNvcnJvYm9yYXRlcyBwcmV2aW91cyBmaW5kaW5ncy4gTGV0J3MgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBsaW5lIDE0NjEgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MjAuMTM2MjM1NzM5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjE6XFx0aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTQ2MjpcXHR7XFxuMTQ2MzpcXHRcXHR1bnNpZ25lZCBsb25nIHNyY19wZm4sIGRzdF9wZm4gPSAwO1xcbjE0NjQ6XFx0XFx0c3RydWN0IGZvbGlvICpkZm9saW87XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSk7XFxuMTQ2NzpcXHRcXG4xNDY4OlxcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbjE0Njk6XFx0XFx0c3JjX3BmbiA9IG1pZ3JhdGVfcGZuKGZvbGlvX3Bmbihmb2xpbykpIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcXG4xNDcwOlxcdFxcbjE0NzE6XFx0XFx0LypcXG4xNDcyOlxcdFxcdCAqIFdlIGRvbid0IGhhdmUgYSBWTUEgYW5kIGRvbid0IG5lZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMgdG8gZmluZFxcbjE0NzM6XFx0XFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxcbjE0NzQ6XFx0XFx0ICogZm9saW8gYXMgbWlncmF0ZV92bWFfc2V0dXAoKSB3aWxsIGZhaWwgaWYgYXJncy52bWEgPT0gTlVMTC5cXG4xNDc1OlxcdFxcdCAqL1xcbjE0NzY6XFx0XFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoXFx1MDAyNnNyY19wZm4sIDEsIE5VTEwpO1xcbjE0Nzc6XFx0XFx0aWYgKCEoc3JjX3BmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxcbjE0Nzg6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4xNDc5OlxcdFxcbjE0ODA6XFx0XFx0ZGZvbGlvID0gZm9saW9fYWxsb2MoR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4sIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjoyMC4xMzY0MDI1MDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NDg4NDE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipDb2hlcmVudCBGb2xpbyBNaWdyYXRpb246IEV4cG9ydCBTdGF0dXMgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCBmdW5jdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiSXMgdGhpcyB0aGluZyBldmVuIGV4cG9zZWQgdG8gdGhlIG91dHNpZGUgd29ybGQ/XCIgSW4gdGhpcyBjb250ZXh0LCBcImV4cG9ydGVkXCIgbWVhbnMgaXMgdGhpcyBmdW5jdGlvbiBhdmFpbGFibGUgZm9yIGV4dGVybmFsIG1vZHVsZXMgb3IgY29tcG9uZW50cyB0byBjYWxsLCBvciBpcyBpdCBoaWRkZW4gd2l0aGluIGEgc3BlY2lmaWMgaW50ZXJuYWwgbW9kdWxlPyBLbm93aW5nIHdoZXRoZXIgYSBmdW5jdGlvbiBpcyBleHBvcnRlZCBpcyBmb3VuZGF0aW9uYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIElzIGl0IHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksIG9yIGlzIGl0IHB1cmVseSBmb3IgaW50ZXJuYWwsIHByaXZhdGUgdXNlPyBUaGlzIGltcGFjdHMgaG93IEkgd291bGQgYXBwcm9hY2ggZGVidWdnaW5nLCBleHRlbmRpbmcsIG9yIGV2ZW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24gYXJvdW5kIGZvbGlvIG1pZ3JhdGlvbi4gS25vd2luZyB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgaW5mb3JtcyBtZSBvbiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjoyMy4yMjEyOTAzNDVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ4MTpcXHRcXHRpZiAoZGZvbGlvKSB7XFxuMTQ4MjpcXHRcXHRcXHRmb2xpb19sb2NrKGRmb2xpbyk7XFxuMTQ4MzpcXHRcXHRcXHRkc3RfcGZuID0gbWlncmF0ZV9wZm4oZm9saW9fcGZuKGRmb2xpbykpO1xcbjE0ODQ6XFx0XFx0fVxcbjE0ODU6XFx0XFxuMTQ4NjpcXHRcXHRtaWdyYXRlX2RldmljZV9wYWdlcyhcXHUwMDI2c3JjX3BmbiwgXFx1MDAyNmRzdF9wZm4sIDEpO1xcbjE0ODc6XFx0XFx0aWYgKHNyY19wZm4gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKVxcbjE0ODg6XFx0XFx0XFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcXG4xNDg5OlxcdFxcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxuMTQ5MDpcXHRcXG4xNDkxOlxcdFxcdGlmIChzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcXG4xNDkyOlxcdFxcdFxcdHJldHVybiAwO1xcbjE0OTM6XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4xNDk0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MjMuMjIxNDk0MjE0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI1NTQ1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyB0aGUgVW5kb2N1bWVudGVkOiBBIFF1aWNrIEludmVzdGlnYXRpdmUgUGF0aCoqXG5cbkhtbSwgdGhpcyBmdW5jdGlvbiwgbW9kdWxlLCBvciBwaWVjZSBvZiBkYXRh4oCmIGl0IGFwcGVhcnMgdG8gYmUgKnVuZXhwb3J0ZWQqLiBUaGF0J3MgdGhlIGluaXRpYWwgcmVkIGZsYWcuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBoaWVyYXJjaHkuIExldCdzIGltbWVkaWF0ZWx5IGRpdmUgaW50byBmaW5kaW5nIHRoZSAqKmNhbGxlcnMqKiBvZiB0aGlzIGl0ZW0uIEZvcmdldCBhc3N1bWluZywgSSBuZWVkIHNvbGlkIGV2aWRlbmNlLCBub3QgY29uamVjdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcyBhcHBhcmVudGx5LXVuZXhwb3J0ZWQgcGllY2UgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhIHBvdGVudGlhbCBwcm9ibGVtLCByZWZhY3RvcmluZyB0YXNrLCBvciBtaXNzaW5nIGxpbmsgaW4gZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjI2LjI3NDA1MTM5NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzMzMwMzAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjMyMT1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jLTIzMzktXFxubW0vZ3VwLmM6MjM0MDpcXHRcXHRcXHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XFxubW0vZ3VwLmMtMjM0MS1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTE1ODQ9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6MTU4NTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC0xNTg2LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMDk4PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExMjctXFx0XFx0XFx0ICogVGhlIG9ubHkgdGltZSB0aGVyZSBpcyBubyB2bWEgaXMgd2hlbiBjYWxsZWQgZnJvbVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEyODpcXHRcXHRcXHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJ3RcXG5tbS9taWdyYXRlX2RldmljZS5jLTExMjktXFx0XFx0XFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ1ND1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYwLSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2MTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjozMC41MDczNjMzNDFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk0NzAxNzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRGV2aWNlIE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGRldmljZSBtaWdyYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNvbWUga2V5IGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgbWlncmF0ZV9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AgY2FsbHMgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCBpbiBgbW0vZ3VwLmNgLCB3aGljaCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBjb3JlIEdVUCBtZWNoYW5pc20uIE5vdywgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhcmUgYWxzbyBvdXQgdGhlcmUsIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgYHRlc3RfaG1tLmNgIG1vZHVsZS5cblxuTXkgcHJpbWFyeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9uczogYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AuIFRvIGVuc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSB0byBlbmFibGUgdGhlc2UsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbmBERVZJQ0VfTUlHUkFUSU9OYCBzZWVtcyBpbXBvcnRhbnQuIEl0IGRlcGVuZHMgb24gYm90aCBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gYFpPTkVfREVWSUNFYCBpcyBhIG11c3QsIGNsZWFybHkuIEFuZCBgVEVTVF9ITU1gIGVuYWJsZXMgdGhlIHRlc3QgZHJpdmVyIHRoYXQgbWFrZXMgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgVEVTVF9ITU1gIGlzIHN1ZmZpY2llbnQgb24gaXRzIG93bi4gTm93LCBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gQW5kIGBERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgZW5hYmxpbmcgYFRFU1RfSE1NYCBhdXRvbWF0aWNhbGx5IHB1bGxzIGluIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLlxuXG5TbywgaGVyZSdzIHRoZSBsaXN0IG9mIGNvbmZpZ3MgdGhhdCBJJ2xsIG5lZWQgdG8ga25vdyBhYm91dDpcblxuKiAgIGBURVNUX0hNTWBcbiogICBgREVWSUNFX1BSSVZBVEVgXG4qICAgYFpPTkVfREVWSUNFYFxuKiAgIGBERVZJQ0VfTUlHUkFUSU9OYFxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbiogICBgTUlHUkFUSU9OYFxuXG5JIGp1c3QgZG91YmxlLWNoZWNrZWQgYW5kIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbGAgdGllZCB0byBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU28sIGVuYWJsaW5nIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgaXQuIFN0aWxsLCBJJ2xsIGtlZXAgaXQgb24gdGhlIGxpc3QgZm9yIGNsYXJpdHkuXG5cbk9oIHdhaXQsIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiBhbmQgc2VsZWN0ZWQgYnkgYENPTVBBQ1RJT05gIHdoaWNoIGRlZmF1bHRzIHRvICd5Jywgc28gaXQgaXMgbGlrZWx5IGVuYWJsZWQgYWxyZWFkeS4gSnVzdCBhbm90aGVyIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjozOC40NTQzODQwMTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjA0MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEVTVF9ITU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzUzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzM1NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjozOC44ODY0MjkyNjdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0ODY4NDU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBDb25maWd1cmF0aW9uIFN0YXRlcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiWWVzLCBgVEVTVF9ITU1gIGlzIGNvbmZpcm1lZCB0byBiZSB0cmlzdGF0ZS5cIiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBOb3csIGxldCdzIHBpdm90IHRvIGV4YW1pbmUgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIGluZmx1ZW5jZWQgYnksIHRoaXMgYFRFU1RfSE1NYCB0cmlzdGF0ZS4gV2hhdCBkb2VzIHRoaXMgcmV2ZWFsIGFib3V0IG92ZXJhbGwgZGV2aWNlIHNlY3VyaXR5IG9yIGJlaGF2aW91cj9cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1Njo0MS42MzUxMTgxMzJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjQ1NjM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY2LVxcbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1Njo0MS44NjE1ODA5NDVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjIyODA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIERldmljZSBQYXJhbWV0ZXJzKipcblxuT2theSwgc28gSSdtIGNvbmZpcm1pbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGlzIGluZGVlZCBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxpY2F0aW9ucyBvZiBgWk9ORV9ERVZJQ0VgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG51YW5jZSBpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgREVWSUNFX1BSSVZBVEVgLCBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBXaGF0IGFyZSB0aGUgYWxsb3dlZCB2YWx1ZXMgb2YgYFpPTkVfREVWSUNFYCwgYW5kIGluIHdoYXQgY29udGV4dHMgaXMgYFpPTkVfREVWSUNFYCBldmFsdWF0ZWQ/IFxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjQ1LjIyMzgxMjgzNloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTA2Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6NDUuMzc2MzI0NjIzWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjMyMzMzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEZXZpY2UgU3RhdGVzKipcblxuQWxyaWdodCwgc28gSSdtIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3N1bXB0aW9uOiBgWk9ORV9ERVZJQ0VgIGlzIGluZGVlZCBhIGJvb2xlYW4gdmFsdWUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaG93IEkgaW50ZXJwcmV0IHRoZSBzdGF0ZSBvZiB0aGlzIHN5c3RlbSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGRldmljZS1yZWxhdGVkIHNldHRpbmdzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZsYWcgYW5kIHRoZSBicm9hZGVyIG1pZ3JhdGlvbiBwcm9jZWR1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIGV4cGVjdC4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzIHRvIGV2YWx1YXRpbmcgdGhlIGBERVZJQ0VfTUlHUkFUSU9OYCBzZXR0aW5nIG5leHQuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gc2V0dGluZ3MgaXMgcHJvYmFibHkgaW1wb3J0YW50IGZvciBob3cgdGhpcyB3aG9sZSB0aGluZyB3b3Jrcy4gSXQgZGljdGF0ZXMgaG93IHRoZSB3aG9sZSBzeXN0ZW0gcmVzcG9uZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6NDguMTk5NTYwNTgyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI1NDcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njk2PWNvbmZpZyBNSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjk5LVxcbm1tL0tjb25maWc6NzAwOmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy03MDEtXFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjQ4LjI5ODgyMDE1OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjUzMzM5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIERldmljZSBNaWdyYXRpb24gQ29kZSBhbmQgVGVzdCBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGluZGVlZCBhIGRlZl9ib29sIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFjdGl2YXRlIGl0LiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWdzIEkgbmVlZCB0byBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdsbCBtYWtlIGEgbm90ZSB0byBkb3VibGUtY2hlY2sgdGhvc2UuXG5cbkRpZ2dpbmcgZGVlcGVyLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoaXMgaXMgdGhlIGNydXggb2YgaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjbGVhcmluZyBhIGZvbGlvJ3MgbWFwcGluZyBhZnRlciBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgc3dhcCBjYWNoZS5cblxuVG8gdGVzdCB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGlzIGNvcmUgZnVuY3Rpb24gaXMgcmVhY2hlZC4gTG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBoYXZlIHRocmVlIGtleSBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nOiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1dGlsaXplZCBieSBkZXZpY2UgZHJpdmVycywgc28gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBkaWZmZXJlbnQgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9ucyBjb3VsZCBpbnRlcmFjdCB3aXRoIHRoZXNlIGNhbGxzIGFuZCB0aGUgYHRlc3RfaG1tYCBtb2R1bGUuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzLiBJJ2xsIG5lZWQgdG8gY29uc3RydWN0IHNvbWUgdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIGFsbCBvZiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHN0cmVzcyB0aGUgZm9saW8gY2xlYXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzNCwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6NTUuNTUyMTY0NDk5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMTU1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9wYWdlc1wiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCB3aGljaCBpcyBhIGNvcmUgZnVuY3Rpb24gZm9yIG1pZ3JhdGluZyBkZXZpY2UgbWVtb3J5LiBJdCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY2xlYXIgdGhlIG1hcHBpbmcgb2YgYSBmb2xpbyBhZnRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCwgd2hpY2ggYXJlIHVzZWQgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBgdGVzdF9obW1gIG1vZHVsZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgZW50cnkgcG9pbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowvrjzp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 02:39:24 +0000 UTC FinishedAt: 2026-07-26 02:56:57 +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": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "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": "b95f03f04d475aa6719d15a636ddf32222d55657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "series_id": "d65723f6-d03b-428f-a744-5e5391caa093" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_device_pages", "migrate_vma_pages", "migrate_device_coherent_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIGZvciBtaWdyYXRpbmcgZGV2aWNlIG1lbW9yeS4gSXQgYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNsZWFyIHRoZSBtYXBwaW5nIG9mIGEgZm9saW8gYWZ0ZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AsIHdoaWNoIGFyZSB1c2VkIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgYHRlc3RfaG1tYCBtb2R1bGUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE4NDVkMjJlMmRhOGY1M2VkY2RiZWMzZjRlODQ5YTJjZjYzYTkyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMjo1NTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggNTU0NzU0ZWIyNmZmMmYuLmZhN2ZiYWNhYzUxNDM4IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTEyMDQsNiAmIzQzOzEyMDQsMTIgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbiBcdFx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+TUlHUkFURV9QRk5fTUlHUkFURTtcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIGZvbGlvX2ZyZWVfc3dhcCgpIHJlbW92ZWQgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXBcbiYjNDM7XHRcdFx0XHQgKiBjYWNoZS4gTWlncmF0ZSBpdCBhcyBhIG1hcHBpbmdsZXNzIGFub255bW91cyBmb2xpby5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRtYXBwaW5nID0gTlVMTDtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoZm9saW9faXNfem9uZV9kZXZpY2UobmV3Zm9saW8pKSB7XG4gXHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX2RldmljZV9wYWdlcyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9wYWdlcyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCB3aGljaCBpcyBhIGNvcmUgZnVuY3Rpb24gZm9yIG1pZ3JhdGluZyBkZXZpY2UgbWVtb3J5LiBJdCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY2xlYXIgdGhlIG1hcHBpbmcgb2YgYSBmb2xpbyBhZnRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCwgd2hpY2ggYXJlIHVzZWQgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBgdGVzdF9obW1gIG1vZHVsZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgZW50cnkgcG9pbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTg0NWQyMmUyZGE4ZjUzZWRjZGJlYzNmNGU4NDlhMmNmNjNhOTI4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDAyOjU1OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggNTU0NzU0ZWIyNmZmMmYuLmZhN2ZiYWNhYzUxNDM4IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTEyMDQsNiAmIzQzOzEyMDQsMTIgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywKIAkJCQkJc3JjX3BmbnNbaV0gJmFtcDs9IH5NSUdSQVRFX1BGTl9NSUdSQVRFOwogCQkJCQlnb3RvIG5leHQ7CiAJCQkJfQomIzQzOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwCiYjNDM7CQkJCSAqIGNhY2hlLiBNaWdyYXRlIGl0IGFzIGEgbWFwcGluZ2xlc3MgYW5vbnltb3VzIGZvbGlvLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJbWFwcGluZyA9IE5VTEw7CiAJCQl9CiAJCX0gZWxzZSBpZiAoZm9saW9faXNfem9uZV9kZXZpY2UobmV3Zm9saW8pKSB7CiAJCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGEgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCoqCgpBbHJpZ2h0LCBhIHBhdGNoIGp1c3QgY3Jvc3NlZCBteSBkZXNrIHRvdWNoaW5nIGBtbS9taWdyYXRlX2RldmljZS5jYC4gSG1tLCBJIHNlZSBpdCYjMzk7cyBhZGRpbmcgYG1hcHBpbmcgPSBOVUxMO2AgaW5zaWRlIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSB6ZXJvaW5nIG91dCBgbWFwcGluZ2AgdGhlcmUuIElzIHRoaXMgYSBkZWZlbnNpdmUgbWVhc3VyZT8gQXJlIHdlIHRyeWluZyB0byBlbnN1cmUgYSBjbGVhbiBzdGF0ZSBiZWZvcmUgYSBuZXcgbWFwcGluZyBpcyBhc3NpZ25lZCwgb3IgcGVyaGFwcyBjbGVhcmluZyBhIHBvdGVudGlhbCBzdGFsZSB2YWx1ZT8gUGVyaGFwcyB0aGlzIGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcHJvYmxlbSByZWxhdGVkIHRvIGRldmljZSBtaWdyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBgbWFwcGluZ2AgdmFyaWFibGUgaXMgdXNlZCBmb3Igd2l0aGluIHRoZSBmdW5jdGlvbiwgd2hhdCBoYXBwZW5zIHdpdGggaXQgYmVmb3JlIHRoaXMgbGluZSwgYW5kIHdoYXQgaGFwcGVucyBhZnRlci4gVGhpcyBpcyBjbGVhcmx5IGEgY2hhbmdlIHRoYXQgY291bGQgaW1wYWN0IGRldmljZSBtaWdyYXRpb24gcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBmdWxsIGltcGFjdCBhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBzZWVtaW5nbHkgc2ltcGxlIGFzc2lnbm1lbnQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXG5tbS9taWdyYXRlX2RldmljZS5jOjEwOTg6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5OS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNTM9dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU1LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1NjpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU3LX1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjcwOlx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIHR3ZWFraW5nIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgY29yZSBvZiBkZXZpY2UgcGFnZSBtaWdyYXRpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMsIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgYSBsb3Qgb2YgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbnRlcmFjdGlvbnMuCgpJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgY2hhbmdlcyB0aGV5JiMzOTtyZSBtYWtpbmcgdG8gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBHb3R0YSBzZWUgcHJlY2lzZWx5IHdoYXQgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIGluIHRoYXQgZnVuY3Rpb24uIFdoYXQgYXJlIHRoZXkgKmRvaW5nKiB3aXRoIHRoZSBtaWdyYXRpb24gcHJvY2Vzcz8gQXJlIHRoZXkgYWRkaW5nIGEgbmV3IGNoZWNrPyBNb2RpZnlpbmcgaG93IHBhZ2VzIGFyZSBtb3ZlZCBvciBpbnZhbGlkYXRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaW1wbGljYXRpb25zPyBBbnkgY2hhbmNlIHRoaXMgaXMgZ29pbmcgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBvbmdvaW5nIHdvcmsgaW4gdGhpcyBhcmVhPyBXaXRob3V0IHNlZWluZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudC4gTGV0JiMzOTtzIGdldCB0aGF0IGNvZGUgc25pcHBldCBwdWxsZWQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5hcmd1bWVudCAmIzM0O0ZpcnN0TGluZSYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogJiMzNDsxMTkwJiMzNDssCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogJiMzNDs0MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2FyZ3VtZW50IFwmIzM0O0ZpcnN0TGluZVwmIzM0OyBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOgoKKipJbnRlZ2VyIElucHV0IFJlcXVpcmVtZW50KioKClJpZ2h0LCBzbyB0aGUgQVBJIGludGVyYWN0aW9uIGhhcyBmbGFnZ2VkIHNvbWV0aGluZy4gSXQmIzM5O3MgZXhwZWN0aW5nIGFuIGludGVnZXIgYXMgaW5wdXQuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIG15IGN1cnJlbnQgd29ya2Zsb3cuIElzIHRoZSBkYXRhIEkmIzM5O20gZmVlZGluZyBpdCBhbHJlYWR5IGluIGFuIGludGVnZXIgZm9ybWF0PyBJZiBub3QsIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXBwcm9wcmlhdGUgY29udmVyc2lvbiBtZXRob2QuIERlcGVuZGluZyBvbiB0aGUgc291cmNlIGRhdGEsIHRoaXMgY291bGQgaW52b2x2ZSBjYXN0aW5nLCByb3VuZGluZywgb3IgZXZlbiBtb3JlIGNvbXBsZXggdHJhbnNmb3JtYXRpb25zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgY29tcGF0aWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgZGF0YSB0eXBlcyBhbmQgcHJlLXByb2Nlc3Npbmcgc3RlcHMuIFBvdGVudGlhbCBlcnJvcnMgY291bGQgYXJpc2UgZnJvbSBzZW5kaW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3Igc3RyaW5ncyB0aGF0IHRoZSBBUEkgbWlnaHQgbWlzaW50ZXJwcmV0LiBCZXN0IHRvIGFkZHJlc3MgdGhpcyB1cGZyb250IGFuZCBhdm9pZCBkb3duc3RyZWFtIGlzc3VlcyBvciB1bmV4cGVjdGVkIEFQSSBiZWhhdmlvci4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGVuc3VyZSBhIGNsZWFuLCB2YWxpZGF0ZWQgaW50ZWdlciBpcyBwYXNzZWQgdG8gdGhhdCBBUEkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTkwOlx0XHRcdH1cbjExOTE6XHRcbjExOTI6XHRcbjExOTM6XHRcdFx0aWYgKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKG5ld2ZvbGlvKSB8fFxuMTE5NDpcdFx0XHQgICAgZm9saW9faXNfZGV2aWNlX2NvaGVyZW50KG5ld2ZvbGlvKSkge1xuMTE5NTpcdFx0XHRcdGlmIChtYXBwaW5nKSB7XG4xMTk2Olx0XHRcdFx0XHQvKlxuMTE5NzpcdFx0XHRcdFx0ICogRm9yIG5vdyBvbmx5IHN1cHBvcnQgYW5vbnltb3VzIG1lbW9yeSBtaWdyYXRpbmcgdG9cbjExOTg6XHRcdFx0XHRcdCAqIGRldmljZSBwcml2YXRlIG9yIGNvaGVyZW50IG1lbW9yeS5cbjExOTk6XHRcdFx0XHRcdCAqXG4xMjAwOlx0XHRcdFx0XHQgKiBUcnkgdG8gZ2V0IHJpZCBvZiBzd2FwIGNhY2hlIGlmIHBvc3NpYmxlLlxuMTIwMTpcdFx0XHRcdFx0ICovXG4xMjAyOlx0XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykgfHxcbjEyMDM6XHRcdFx0XHRcdCAgICAhZm9saW9fZnJlZV9zd2FwKGZvbGlvKSkge1xuMTIwNDpcdFx0XHRcdFx0XHRzcmNfcGZuc1tpXSBcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xuMTIwNTpcdFx0XHRcdFx0XHRnb3RvIG5leHQ7XG4xMjA2Olx0XHRcdFx0XHR9XG4xMjA3Olx0XG4xMjA4Olx0XHRcdFx0XHQvKlxuMTIwOTpcdFx0XHRcdFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxuMTIxMDpcdFx0XHRcdFx0ICogY2FjaGUuIE1pZ3JhdGUgaXQgYXMgYSBtYXBwaW5nbGVzcyBhbm9ueW1vdXMgZm9saW8uXG4xMjExOlx0XHRcdFx0XHQgKi9cbjEyMTI6XHRcdFx0XHRcdG1hcHBpbmcgPSBOVUxMO1xuMTIxMzpcdFx0XHRcdH1cbjEyMTQ6XHRcdFx0fSBlbHNlIGlmIChmb2xpb19pc196b25lX2RldmljZShuZXdmb2xpbykpIHtcbjEyMTU6XHRcdFx0XHQvKlxuMTIxNjpcdFx0XHRcdCAqIE90aGVyIHR5cGVzIG9mIFpPTkVfREVWSUNFIHBhZ2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4xMjE3Olx0XHRcdFx0ICovXG4xMjE4Olx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+TUlHUkFURV9QRk5fTUlHUkFURTtcbjEyMTk6XHRcdFx0XHRnb3RvIG5leHQ7XG4xMjIwOlx0XHRcdH1cbjEyMjE6XHRcbjEyMjI6XHRcdFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG4xMjIzOlx0XG4xMjI0Olx0XHRcdGlmIChtaWdyYXRlIFx1MDAyNlx1MDAyNiBtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UgPT0gcGFnZSlcbjEyMjU6XHRcdFx0XHRleHRyYV9jbnQgPSAxO1xuMTIyNjpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuciBcdTAwMjZcdTAwMjYgaSAmIzQzOyBqIFx1MDAzYyBucGFnZXM7IGomIzQzOyYjNDM7KSB7XG4xMjI3Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaSYjNDM7al0pKTtcbjEyMjg6XHRcdFx0XHRuZXdmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpJiM0MztqXSkpO1xuMTIyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdWJ0bGUgUGF0Y2ggaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb246IGBtYXBwaW5nID0gTlVMTDtgIGFmdGVyIHRoYXQgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgIGNhbGwgaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLCBhbmQgdGhlIGludGVudGlvbiBpcyBsaWtlbHkgdG8gemVybyBvdXQgdGhhdCBwb2ludGVyIGFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBmcmVlZC4gSSB1bmRlcnN0YW5kIHRoaXMgaXMgb2NjdXJyaW5nIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIGtlcm5lbCBmb3IgaGFuZGxpbmcgcGFnZSBtaWdyYXRpb24sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZW52aXJvbm1lbnQgaXQgbWF5IGJlIHJ1bm5pbmcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgZmlsZS4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBtYXkgcmVxdWlyZSBhIHJldmlldyBvZiByZWxhdGVkIGNvbW1pdHMsIGJ1dCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYnJvYWRlciBwaWN0dXJlIGZpcnN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3MsIHdpdGggYSBmb2N1cyBvbiBhIGZpZWxkIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgdGFzayBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUga2V5LiBCdXQgd2hhdCBlbHNlIGlzIHRpZWQgdG8gdGhhdD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIGVsc2Ugd2l0aGluIHRoZSBzeXN0ZW0uIElzIHRoaXMganVzdCBhIGZsYWcsIG9yIGRvZXMgaXQgdW5sb2NrIGEgd2hvbGUgY2FzY2FkZSBvZiBvdGhlciBzZXR0aW5ncyBvciBwcmVyZXF1aXNpdGVzPyBXZSBhbGwga25vdyB0aGF0IGNvbmZpZ3VyYXRpb25zIHJhcmVseSBleGlzdCBpbiBpc29sYXRpb247IHRoZXJlJiMzOTtzIGFsd2F5cyBhIHdlYiBvZiBkZXBlbmRlbmNpZXMgdG8gdW5yYXZlbCB0byBlbnN1cmUgdGhpbmdzIHdvcmsgcHJlZGljdGFibHkgYW5kIHNhZmVseS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhvc2UgYmVmb3JlIEkgcHJvY2VlZCBhbnkgZnVydGhlciB3aXRoIHRlc3Rpbmcgb3IgaW50ZWdyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGl0IHB1bGxzIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk5LVxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNzAxLVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipBZGRyZXNzaW5nIHRoZSBJbmZyYXN0cnVjdHVyZSBTaGlmdCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBzaGlmdCwgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyBib3RoIGBNSUdSQVRJT05gIGFuZCBhIGBaT05FX0RFVklDRWAuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoYXQgYFpPTkVfREVWSUNFYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGF0IHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIHRoZSBzeXN0ZW0gaXMgdGVsbGluZyBtZSB0aGF0IGBERVZJQ0VfTUlHUkFUSU9OYCBkZXBlbmRzIG9uIGJvdGggYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IGlmIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBldmVuIHNlbGVjdGFibGUgYXQgYWxsLCBvciBpZiBpdCYjMzk7cyBpbXBsaWNpdGx5IGRlZmluZWQuIEFoLCBpdCYjMzk7cyBhIGBkZWZfYm9vbGAgdGllZCB0byBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgZW5hYmxlIGBERVZJQ0VfTUlHUkFUSU9OYDsgaW5zdGVhZCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0ICpib3RoKiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCBhcmUgc2V0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSB0d28uIE9rYXksIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYE1JR1JBVElPTmAgbm93IGFuZCBzZWVpbmcgd2hhdCB0aGF0IGVudGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYE1JR1JBVElPTmAgQm9vbGVhbioqCgpBbHJpZ2h0LCBzbyBgTUlHUkFUSU9OYCBpcyBmbGFnZ2VkIGFzIGEgYm9vbGVhbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4mIzM0OyBJdCYjMzk7cyBhIGJpbmFyeSBzdGF0ZSwgZWl0aGVyIHRydWUgb3IgZmFsc2UuIE15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYWN0aXZhdGVzIHRoaXMgYm9vbGVhbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXMsIHdoZXJlIGluIHRoZSBjb2RlIGlzIGl0IGJlaW5nIHNlbGVjdGVkIG9yIGVuYWJsZWQ/IFdoYXQgcGllY2VzIG9mIGxvZ2ljIGFyZSBzZXR0aW5nIGl0IHRvIHRydWUsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgZmluZCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyB0aGF0IG1hbmlwdWxhdGUgdGhpcyBgTUlHUkFUSU9OYCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHRyaWdnZXIgbWVjaGFuaXNtIGJlZm9yZSBJIGNhbiBldmFsdWF0ZSBpdHMgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbi0tXG5tbS9LY29uZmlnLTU5NC1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWc6NTk1Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy01OTYtXG4tLVxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY1Ni1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2NTc6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY1OC1cdGRlcGVuZHMgb24gTU1VXG4tLVxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODgtXHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZzo2ODk6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY5MC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxuLS1cbm1tL0tjb25maWctMTA2OS1cdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjEwNzA6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTEwNzEtXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTk3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgRGF0YWJhc2UgRGVwbG95bWVudCBTdHJhdGVneSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgc3lzdGVtIGNob3NlIGBDT01QQUNUSU9OYCwgYW5kIGl0IHNlZW1zIGBDT01QQUNUSU9OYCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzZWxlY3RlZCBkaXJlY3RseSBpbXBsaWVzIHRoYXQgYE1JR1JBVElPTmAgaXMgbGlrZWx5IGFsc28gZW5hYmxlZCwgZ2l2ZW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uIENvbXBhY3Rpb24gaXMgdGhlIGZvdW5kYXRpb24sIG1ha2luZyBtaWdyYXRpb24gcG9zc2libGUuCgpCdXQgdGhlIHF1ZXN0aW9uIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgaXMsIHdoYXQmIzM5O3MgaGFwcGVuaW5nIG9uIGBaT05FX0RFVklDRWA/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjaG9zZW4gc3RyYXRlZ3kgYWxpZ25zIHdpdGggdGhlIGRldmljZSBpbiB1c2UuIExldCBtZSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGBaT05FX0RFVklDRWAgcmVsYXRpdmUgdG8gYENPTVBBQ1RJT05gIGFuZCBgTUlHUkFUSU9OYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBaT05FX0RFVklDRSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBUaGlzIG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGFueSBtb2R1bGVzLCBmdW5jdGlvbnMsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgdXRpbGl6ZSBvciByZWZlcmVuY2UgdGhhdCBzcGVjaWZpYyB2YXJpYWJsZSBvciBvYmplY3QuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdCwgYnV0IGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGNvdWxkIGJlIGNydWNpYWwg4oCTIHNvbWV0aGluZyB0aGF0IGNhbGxzIGEgZnVuY3Rpb24gdGhhdCAqdXNlcyogYFpPTkVfREVWSUNFYCwgZm9yIGV4YW1wbGUuIEkmIzM5O2xsIG5lZWQgdG8gYXBwcm9hY2ggdGhpcyBtZXRob2RpY2FsbHksIHBlcmhhcHMgc3RhcnRpbmcgd2l0aCBhIGNvZGUgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgdGhlIHZhcmlhYmxlIGFuZCB0aGVuIGJ1aWxkaW5nIGEgbWFwIG9mIGhvdyB0aGV5IHJlbGF0ZSB0byBvdGhlciBjb21wb25lbnRzLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGtleSBoZXJlLiBEZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZSwgSSBtaWdodCBsZXZlcmFnZSBzb21lIHRvb2xpbmcgdG8gYXV0b21hdGUgdGhlIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG8gc29tZSBleHRlbnQuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWx2ZSBpbnRvIHZhcmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50cy4gVGhlIGFpbSBpcyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZSBvciBtb2RpZmljYXRpb24gdG8gYFpPTkVfREVWSUNFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM2Olx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjM3Olx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbjEyMzk6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTI0MDpcdFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuMTI0MTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTI0MjpcdFxuMTI0MzpcdFx0aGVscFxuMTI0NDpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTI0NTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTI0NjpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyNDc6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjQ4Olx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyNDk6XHRcbjEyNTA6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTI1MTpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMjUyOlx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbjEyNTM6XHRcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXG4xMjU0Olx0XHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxuMTI1NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTE3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIHRvIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMgZm9yIFpPTkVfREVWSUNFKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgWk9ORV9ERVZJQ0VgIGZlYXR1cmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaGluZ2VzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE1ha2VzIHNlbnNlLCB0aGUgYWJpbGl0eSB0byBtYW5hZ2UgZGV2aWNlIG1lbW9yeSB6b25lcyBkeW5hbWljYWxseSByZXF1aXJlcyB0aG9zZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gR2l2ZW4gdGhpcywgSSB0aGluayB3ZSBzaG91bGQgZW5hYmxlIGBaT05FX0RFVklDRWAuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGRpZ2dpbmcgaW50byB0aGUgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIHBhZ2VzIHRvIG9yIGZyb20gZGV2aWNlIHpvbmVzLCBzbyBpdOKAmXMgY3JpdGljYWwuIEkgY2FuIHNlZSBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgYnkgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hvICpjYWxscyogdGhvc2UgdHdvIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBwYXRocyB0byB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBjb25maWRlbmNlIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgaXMgYSBnb29kIGNoYW5nZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbCBjaGFpbiB0byB0aG9yb3VnaGx5IHZldCB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMDk9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc0LVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIGRzdCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTc1Olx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjLCBkc3QsIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc2LVx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9NDc1PW5vdXZlYXVfZG1lbV9ldmljdF9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kbWVtX2NodW5rICpjaHVuaylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy01MTctXHRub3V2ZWF1X2ZlbmNlX25ldyhcdTAwMjZmZW5jZSwgY2h1bmstXHUwMDNlZHJtLVx1MDAzZWRtZW0tXHUwMDNlbWlncmF0ZS5jaGFuKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjUxODpcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTUxOS1cdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFx1MDAyNmZlbmNlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xOTg9aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5OTp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTIwMC1cdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MTg4PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKHN0cnVjdCBkbWlycm9yX2NodW5rICpjaHVuaylcbi0tXG5saWIvdGVzdF9obW0uYy0yMzEtXHR9XG5saWIvdGVzdF9obW0uYzoyMzI6XHRtaWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG5saWIvdGVzdF9obW0uYy0yMzMtXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NjU9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTA5ODpzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDk5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0NC0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI0NTogKiBtaWdyYXRlX2RldmljZV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjQ2LSAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUyLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjUzOnZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU0LVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU1LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1NjpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU3LX1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjcwOlx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5My0gKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM5NDogKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5NS0gKi9cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NjE9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg1LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDg2Olx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXHUwMDI2c3JjX3BmbiwgXHUwMDI2ZHN0X3BmbiwgMSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODctXHRpZiAoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYSBmZXcgaW50ZXJlc3RpbmcgcGxhY2VzLiBGaXJzdCwgSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0JiMzOTtzIGdvb2QsIGEgdGVzdCBtb2R1bGUgaXMgYWx3YXlzIGEgc2Vuc2libGUgcGxhY2UgdG8gZmluZCBhIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBtaWdyYXRpb24g4oCTIHRoZXkgYXJlIG9mdGVuIGdyZWF0IGZvciBmdXp6aW5nIGFuZCBzdHJlc3MtdGVzdGluZy4gTWFrZXMgc2Vuc2UuIFRoZW4gdGhlcmUmIzM5O3MgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBzcGVjaWZpY2FsbHkgaW4gYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiBpcywgc28gaXQmIzM5O3Mgbm90IGEgc3VycHJpc2UgdG8gc2VlIGl0IHRoZXJlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGNvaGVyZW50IGZvbGlvcywgd2hpY2ggb2Z0ZW4gbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGR1cmluZyBtaWdyYXRpb24uCgpIbW0sIGludGVyZXN0aW5nLCBpdCYjMzk7cyBhbHNvIGluIGBub3V2ZWF1X2RtZW0uY2AgYW5kIGBkcm1fcGFnZW1hcC5jYC4gVGhhdCBwb2ludHMgdG8gZGV2aWNlIGRyaXZlciB1c2UsIGxpa2VseSByZWxhdGVkIHRvIG1vdmluZyBwYWdlcyB0byBhbmQgZnJvbSBncmFwaGljcyBoYXJkd2FyZSwgb3Igb3RoZXIgRE1BLWNhcGFibGUgZGV2aWNlcy4gR3JhcGhpY3Mgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgbmVlZHMgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWlncmF0aW9uLCBzbyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIHRvIHNlZSB3aGVyZSB0aGUgVk1BJiMzOTtzIGFyZSByZWxhdGVkIHRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjM2NTo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTM2Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjk4OjQuIGBgbWlncmF0ZV92bWFfcGFnZXMoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5OS1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU3OC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTc5Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTgwLVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzg3LVx0Km1pZy5kc3QgPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihkcGFnZSkpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo3ODg6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03ODktb3V0X2ZpbmFsaXplOlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9Mzk0PXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUxLVx0ciA9IHN2bV9taWdyYXRlX2NvcHlfdG9fdnJhbShub2RlLCBwcmFuZ2UsIFx1MDAyNm1pZ3JhdGUsIFx1MDAyNm1mZW5jZSwgc2NyYXRjaCwgdHRtX3Jlc19vZmZzZXQpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0NTI6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUzLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03NTUtXHRcdFx0XHQgICAgc2NyYXRjaCwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzU2Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz02MTY9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTgxMi1lcnJfYWJvcnRlZF9taWdyYXRpb246XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4MTM6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTgxNC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMjExPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzA0LVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzMDU6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMDYtXHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcdTAwMjZtaWdyYXRlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2Ny1cdG5vdXZlYXVfZmVuY2VfbmV3KFx1MDAyNmZlbmNlLCBkbWVtLVx1MDAzZW1pZ3JhdGUuY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyNjg6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2OS1cdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFx1MDAyNmZlbmNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz03ODM9c3RhdGljIHZvaWQgbm91dmVhdV9kbWVtX21pZ3JhdGVfY2h1bmsoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODA5LVx0bm91dmVhdV9mZW5jZV9uZXcoXHUwMDI2ZmVuY2UsIGRybS1cdTAwM2VkbWVtLVx1MDAzZW1pZ3JhdGUuY2hhbik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4MTA6XHRtaWdyYXRlX3ZtYV9wYWdlcyhhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgxMS1cdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFx1MDAyNmZlbmNlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjUtXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NjpcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucy5cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ny1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Mz1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NDp2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTUtdm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTExNzUtXG5saWIvdGVzdF9obW0uYzoxMTc2Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTExNzctXHRcdGNtZC1cdTAwM2VjcGFnZXMgJiM0Mzs9IGRtaXJyb3Jfc3VjY2Vzc2Z1bF9taWdyYXRlZF9wYWdlcyhcdTAwMjZhcmdzKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQ4LVx0XHRkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoXHUwMDI2YXJncywgZG1pcnJvcik7XG5saWIvdGVzdF9obW0uYzoxMjQ5Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNTAtXHRcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFx1MDAyNmFyZ3MsIGRtaXJyb3IpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcxOC1cdH1cbmxpYi90ZXN0X2htbS5jOjE3MTk6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTE3MjAtXHQvKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjU5PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTY5OS0gKiB0aGlzIGNhbiBzdGlsbCBmYWlsLCBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgeW91IG11c3QgY2hlY2sgaWYgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjcwMDogKiBtaWdyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgZm9yIHRob3NlIGVudHJpZXMgYWZ0ZXIgY2FsbGluZyBtaWdyYXRlX3ZtYV9wYWdlcygpLFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDEtICoganVzdCBsaWtlIGZvciByZWd1bGFyIG1pZ3JhdGlvbi5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzAyLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjcwMzogKiBBZnRlciB0aGF0LCB0aGUgY2FsbGVycyBtdXN0IGNhbGwgbWlncmF0ZV92bWFfcGFnZXMoKSB0byBnbyBvdmVyIGVhY2ggZW50cnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA0LSAqIGluIHRoZSBzcmMgYXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWdcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA1LSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzA2OiAqIHRoZW4gbWlncmF0ZV92bWFfcGFnZXMoKSB0byBtaWdyYXRlIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDctICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGVcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MTU6ICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJlXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNi0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTgtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzE5OiAqIEl0IGlzIHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGFmdGVyIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgYmVjYXVzZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjAtICogYm90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIHBhZ2UgYXJlIHN0aWxsIGxvY2tlZCwgYW5kIHRoZSBtbWFwX2xvY2sgaXMgaGVsZFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTA5OD1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0OS0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjUwOiAqIEVxdWl2YWxlbnQgdG8gbWlncmF0ZV92bWFfcGFnZXMoKS4gVGhpcyBpcyBjYWxsZWQgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLSAqIG1ldGEtZGF0YSBmcm9tIHNvdXJjZSBzdHJ1Y3QgcGFnZSB0byBkZXN0aW5hdGlvbi5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNTg9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYwLS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjYxOiAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjItICogQG1pZ3JhdGU6IG1pZ3JhdGUgc3RydWN0IGNvbnRhaW5pbmcgYWxsIG1pZ3JhdGlvbiBpbmZvcm1hdGlvblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2Ny0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2ODp2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkxldmVyYWdpbmcgRXhpc3RpbmcgVGVzdCBJbmZyYXN0cnVjdHVyZSoqCgpJIHNlZSB0aGF0IHRoZSBgbWlncmF0ZV92bWFfcGFnZXNgIGZ1bmN0aW9uLCB0aGUgb25lIEkmIzM5O20gd29ya2luZyB3aXRoLCBpcyBhbHNvIGludm9rZWQgZnJvbSBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGUgZm9sa3Mgd2hvIHdyb3RlIHRoYXQgdGVzdCBoYXJuZXNzIHByb2JhYmx5IGFscmVhZHkgaGF2ZSBhIHNvbGlkIGZyYW1ld29yayBmb3IgZXhlcmNpc2luZyAqdGhpcyogdmVyeSBwaWVjZSBvZiBjb2RlLiBSYXRoZXIgdGhhbiByZWludmVudGluZyB0aGUgd2hlZWwsIEkgc2hvdWxkIGFic29sdXRlbHkgbGV2ZXJhZ2UgdGhhdCBleGlzdGluZyB0ZXN0IGluZnJhc3RydWN0dXJlLiBVc2luZyBgbGliL3Rlc3RfaG1tLmNgIHNlZW1zIGxpa2UgYSBzbWFydCB3YXkgdG8gcmlnb3JvdXNseSB0ZXN0IHRoZSBjb2RlIGNoYW5nZXMgSSYjMzk7bSBtYWtpbmcuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgYGxpYi90ZXN0X2htbS5jYCB0byBzZWUgaG93IEkgY2FuIGludGVncmF0ZSBteSB0ZXN0IGNhc2VzIGVmZmVjdGl2ZWx5LiBJdCB3b3VsZCBzYXZlIG1lIGEgbG90IG9mIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfaG1tLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX1RFU1RfSE1NYCwgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBzZXRzIHVwIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYGxpYi90ZXN0X2htbS5jYCBmaWxlLiBOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBteSBuZXh0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgdGVzdGluZyBmcmFtZXdvcmsgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0JiMzOTtzIHJlcXVpcmVkIGZvciBpdCB0byBidWlsZCBhbmQgZnVuY3Rpb24gY29ycmVjdGx5LiBJIG5lZWQgdG8gZW5zdXJlIEkga25vdyB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWJyYXJpZXMsIG9yIG1vZHVsZXMgYENPTkZJR19URVNUX0hNTWAgcmVsaWVzIHVwb24uIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX0hNTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM1NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBsb2NhdGVkIHdpdGhpbiB0aGUgYEtjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMzU0LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGF0IGZpbGUgbG9jYXRpb24gZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHRyeWluZyB0byBkZWNpcGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM1NDpcdGNvbmZpZyBURVNUX0hNTVxuMzM1NTpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4zMzU2Olx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4zMzU3Olx0XHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXG4zMzU4Olx0XHRzZWxlY3QgSE1NX01JUlJPUlxuMzM1OTpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMzM2MDpcdFx0aGVscFxuMzM2MTpcdFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cbjMzNjI6XHRcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxuMzM2MzpcdFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXG4zMzY0Olx0XG4zMzY1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzY2Olx0XG4zMzY3Olx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xuMzM2ODpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBmcmVlaW5nIHBhZ2VzXCYjMzQ7XG4zMzY5Olx0XHRoZWxwXG4zMzcwOlx0XHQgIFRlc3QgdGhhdCBhIG1lbW9yeSBsZWFrIGRvZXMgbm90IG9jY3VyIGR1ZSB0byBhIHJhY2UgYmV0d2VlblxuMzM3MTpcdFx0ICBmcmVlaW5nIGEgYmxvY2sgb2YgcGFnZXMgYW5kIGEgc3BlY3VsYXRpdmUgcGFnZSByZWZlcmVuY2UuXG4zMzcyOlx0XHQgIExvYWRpbmcgdGhpcyBtb2R1bGUgaXMgc2FmZSBpZiB5b3VyIGtlcm5lbCBoYXMgdGhlIGJ1ZyBmaXhlZC5cbjMzNzM6XHRcdCAgSWYgdGhlIGJ1ZyBpcyBub3QgZml4ZWQsIGl0IHdpbGwgbGVhayBnaWdhYnl0ZXMgb2YgbWVtb3J5IGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVwZW5kZW5jaWVzIGFuZCBTY29wZTogUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIGBURVNUX0hNTWAgaXMgZmxhZ2dlZCBhcyBkZXBlbmRpbmcgb24gYm90aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBUaGF0JiMzOTtzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCBidXQgaXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHByZXR0eSBjb21tb24gdGhlc2UgZGF5cywgYW5kIGl0cyBpbXBhY3QgaXMgdXN1YWxseSB3ZWxsLXVuZGVyc3Rvb2QsIGJ1dCBgREVWSUNFX1BSSVZBVEVgLi4uIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJdCBjYW4gaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgY29uc3RyYWludHMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2VjdXJpdHkgY29udGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCBgREVWSUNFX1BSSVZBVEVgIHNwZWNpZmljYWxseSBlbnRhaWxzIGluIHRoaXMgY29udGV4dCBiZWZvcmUgSSBwcm9jZWVkLiBUaGlzIGNvdWxkIGRlZmluZSB0aGUgc2NvcGUsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBMZXQgbWUgc2VlIHdoYXQmIzM5O3Mgd2hhdCB3aXRoIGBERVZJQ0VfUFJJVkFURWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG1tL0tjb25maWdgLiBJdCYjMzk7cyBhIGtleSBmaWxlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBhcm91bmQgbGluZSAxMjY3IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9yIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3Igd2hhdGV2ZXIgb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhlIHNwZWNpZmljIGxpbmUgcmFuZ2UgaGVscHMgbWUgbmF2aWdhdGUgZWZmaWNpZW50bHkgYW5kIGF2b2lkIGdldHRpbmcgbG9zdCBpbiB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIHNwYWNlLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24g4oCTIG1heWJlIGEgc2ltcGxlIGBjb25maWdgIGJsb2NrIHdpdGggc29tZSBkZXBlbmRlbmNpZXMgb3IgYSB0cmlzdGF0ZSBvcHRpb24uIE9yIHBlcmhhcHMgdGhpcyBhcmVhIGRlYWxzIHdpdGggaG93IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBzcGVjaWZpYyBvcHRpb24gaXMgY29uZmlndXJlZC4gRWl0aGVyIHdheSwgdGhpcyBzaG91bGQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24mIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNjc6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNjg6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjY5Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjcwOlx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjcxOlx0XG4xMjcyOlx0XHRoZWxwXG4xMjczOlx0XHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXG4xMjc0Olx0XHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcbjEyNzU6XHRcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxuMTI3NjpcdFxuMTI3NzpcdGNvbmZpZyBWTUFQX1BGTlxuMTI3ODpcdFx0Ym9vbFxuMTI3OTpcdFxuMTI4MDpcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcbjEyODE6XHRcdGJvb2xcbjEyODI6XHRjb25maWcgQVJDSF9IQVNfUEtFWVNcbjEyODM6XHRcdGJvb2xcbjEyODQ6XHRcbjEyODU6XHRjb25maWcgQVJDSF9VU0VTX1BHX0FSQ0hfMlxuMTI4NjpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgY2hhaW4gZm9ybWluZy4gYERFVklDRV9QUklWQVRFYCByZWxpZXMgb24gYFpPTkVfREVWSUNFYCwgYW5kIGBURVNUX0hNTWAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBERVZJQ0VfUFJJVkFURWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRoZSBtb2RpZmljYXRpb24gdG8gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIHdpdGhpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdGl2ZWx5IHVzZWQgYnkgYHRlc3RfaG1tLmNgLgoKR29vZCwgaXQgbG9va3MgbGlrZSBgdGVzdF9obW0uY2AgKmRvZXMqIGNhbGwgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgd2hpY2ggaW4gdHVybiBjYWxsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gRXhjZWxsZW50LiBTbyB0aGUgY2hhbmdlIHdpdGhpbiBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXMgZGVmaW5pdGVseSByZWxldmFudCB0byBgdGVzdF9obW0uY2AuCgpUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgYG1hcHBpbmcgPSBOVUxMO2AgaXMgYWRkZWQgYWZ0ZXIgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgZWZmZWN0IG9uIGBtYXBwaW5nYCBoZXJlIGlzIHRoZSBjb3JlIG9mIHdoYXQgbmVlZHMgdG8gYmUgbG9va2VkIGF0LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZm9yIHNpZGUgZWZmZWN0cy4KCk5vdywgdG8gem9vbSBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AgLSB0aGV5JiMzOTtyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBleGVjdXRpb24gcGF0aC4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgdGhhdCBjYWxsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBzbyB0aGF0IEkgY2FuIGxvb2sgYXQgdGhlIG90aGVyIGNhbGxpbmcgcG9pbnRzIHRvIHNlZSB0aGUgZW50aXJlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXG5tbS9taWdyYXRlX2RldmljZS5jOjEwOTg6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5OS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNDQtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDU6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0Ni0gKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Mi0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1Mzp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NC1cdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NS17XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTY6XHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Ny19XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTg6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTktXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjY4PXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY5LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MDpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMobWlncmF0ZS1cdTAwM2VzcmMsIG1pZ3JhdGUtXHUwMDNlZHN0LCBtaWdyYXRlLVx1MDAzZW5wYWdlcywgbWlncmF0ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzEtfVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTMtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXG5tbS9taWdyYXRlX2RldmljZS5jOjEzOTQ6ICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTUtICovXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDYxPWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4NS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4NjpcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVx0aWYgKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUuCgoqKlRoaW5raW5nIFRocm91Z2ggdGhlIERldmljZSBQYWdlIE1pZ3JhdGlvbiBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYXJlIHRoZSB0d28gdG9wLWxldmVsIGV4cG9ydGVkIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkga25vdyB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBvdmVyYWxsIHBhZ2UgbWlncmF0aW9uIHN5c3RlbS4gVGhlcmUmIzM5O3MgYWxzbyBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIOKAkyB0aGF0IG5hbWUgc291bmRzIGZhbWlsaWFyLCBzb21ldGhpbmcgc3BlY2lmaWMgdG8gY29oZXJlbnQgbWVtb3J5IHJlZ2lvbnMgb24gZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGF0IG9uZSBhbHNvIGV4cG9ydGVkLCBvciBpcyBpdCBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIGlzIGFjdHVhbGx5IHBhcnQgb2YgdGhlIHB1YmxpY2x5IGF2YWlsYWJsZSBBUEkuIFRoYXQmIzM5O2xsIGluZm9ybSBob3cgSSBhcHByb2FjaCBpbnRlZ3JhdGluZyB3aXRoIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MTA5OD1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEyNy1cdFx0XHQgKiBUaGUgb25seSB0aW1lIHRoZXJlIGlzIG5vIHZtYSBpcyB3aGVuIGNhbGxlZCBmcm9tXG5tbS9taWdyYXRlX2RldmljZS5jOjExMjg6XHRcdFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbiYjMzk7dFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI5LVx0XHRcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDU0PUVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYwLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDYxOmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkZWx2ZSBpbnRvIGxpbmUgMTQ2MSBhbmQgY3JhZnQgYSBzdW1tYXJ5IGFzIGlmIHRoZXNlIHdlcmUgKm15KiB0aG91Z2h0cy4gSGVyZSB3ZSBnbzoKCioqRGl2aW5nIGludG8gdGhlIE51YW5jZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZSAxNDYxLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UgYW5kIGV4cGVydGlzZSBpbiB0aGlzIGZpZWxkLCBJIGFudGljaXBhdGUgdGhpcyBzZWdtZW50IGlzIGxpa2VseSBkaXNjdXNzaW5nIFsqKmluc2VydCB5b3VyIHByZWRpY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgb2YgeW91ciBmaWVsZCoqXS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgWyoqbWVudGlvbmluZyB0aGUgYW50aWNpcGF0ZWQga2V5IGNvbmNlcHRzLCBtZXRob2RzLCBvciB0aGVvcmllcyB0aGF0IHlvdSBleHBlY3QgdG8gZW5jb3VudGVyKipdLiBHaXZlbiB0aGUgdHlwaWNhbCBmbG93IG9mIHJlc2VhcmNoIGluIHRoaXMgYXJlYSwgaXQgbWlnaHQgYmUgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciBhIGxhcmdlciBwb2ludC4gTXkgaW50ZXJuYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0IHdpbGwgZWxhYm9yYXRlIG9uIHNvbWV0aGluZyBJ4oCZdmUgc2VlbiBiZWZvcmUgYnV0IGl0IHdpbGwgYXBwcm9hY2ggaXQgZnJvbSBhIHVuaXF1ZSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGVhZ2VyIHRvIHNlZSBpZiBpdCBjaGFsbGVuZ2VzIG15IHByZS1jb25jZWl2ZWQgbm90aW9ucyBvciBjb3Jyb2JvcmF0ZXMgcHJldmlvdXMgZmluZGluZ3MuIExldCYjMzk7cyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGxpbmUgMTQ2MSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYxOlx0aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xNDYyOlx0e1xuMTQ2MzpcdFx0dW5zaWduZWQgbG9uZyBzcmNfcGZuLCBkc3RfcGZuID0gMDtcbjE0NjQ6XHRcdHN0cnVjdCBmb2xpbyAqZGZvbGlvO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKTtcbjE0Njc6XHRcbjE0Njg6XHRcdGZvbGlvX2xvY2soZm9saW8pO1xuMTQ2OTpcdFx0c3JjX3BmbiA9IG1pZ3JhdGVfcGZuKGZvbGlvX3Bmbihmb2xpbykpIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbjE0NzA6XHRcbjE0NzE6XHRcdC8qXG4xNDcyOlx0XHQgKiBXZSBkb24mIzM5O3QgaGF2ZSBhIFZNQSBhbmQgZG9uJiMzOTt0IG5lZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMgdG8gZmluZFxuMTQ3MzpcdFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxuMTQ3NDpcdFx0ICogZm9saW8gYXMgbWlncmF0ZV92bWFfc2V0dXAoKSB3aWxsIGZhaWwgaWYgYXJncy52bWEgPT0gTlVMTC5cbjE0NzU6XHRcdCAqL1xuMTQ3NjpcdFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoXHUwMDI2c3JjX3BmbiwgMSwgTlVMTCk7XG4xNDc3Olx0XHRpZiAoIShzcmNfcGZuIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSlcbjE0Nzg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjE0Nzk6XHRcbjE0ODA6XHRcdGRmb2xpbyA9IGZvbGlvX2FsbG9jKEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipDb2hlcmVudCBGb2xpbyBNaWdyYXRpb246IEV4cG9ydCBTdGF0dXMgQ2hlY2sqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIGZ1bmN0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtJcyB0aGlzIHRoaW5nIGV2ZW4gZXhwb3NlZCB0byB0aGUgb3V0c2lkZSB3b3JsZD8mIzM0OyBJbiB0aGlzIGNvbnRleHQsICYjMzQ7ZXhwb3J0ZWQmIzM0OyBtZWFucyBpcyB0aGlzIGZ1bmN0aW9uIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgbW9kdWxlcyBvciBjb21wb25lbnRzIHRvIGNhbGwsIG9yIGlzIGl0IGhpZGRlbiB3aXRoaW4gYSBzcGVjaWZpYyBpbnRlcm5hbCBtb2R1bGU/IEtub3dpbmcgd2hldGhlciBhIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGlzIGZvdW5kYXRpb25hbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIElzIGl0IHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksIG9yIGlzIGl0IHB1cmVseSBmb3IgaW50ZXJuYWwsIHByaXZhdGUgdXNlPyBUaGlzIGltcGFjdHMgaG93IEkgd291bGQgYXBwcm9hY2ggZGVidWdnaW5nLCBleHRlbmRpbmcsIG9yIGV2ZW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24gYXJvdW5kIGZvbGlvIG1pZ3JhdGlvbi4gS25vd2luZyB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIGluZm9ybXMgbWUgb24gaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0ODE6XHRcdGlmIChkZm9saW8pIHtcbjE0ODI6XHRcdFx0Zm9saW9fbG9jayhkZm9saW8pO1xuMTQ4MzpcdFx0XHRkc3RfcGZuID0gbWlncmF0ZV9wZm4oZm9saW9fcGZuKGRmb2xpbykpO1xuMTQ4NDpcdFx0fVxuMTQ4NTpcdFxuMTQ4NjpcdFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXHUwMDI2c3JjX3BmbiwgXHUwMDI2ZHN0X3BmbiwgMSk7XG4xNDg3Olx0XHRpZiAoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcbjE0ODg6XHRcdFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcbjE0ODk6XHRcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xuMTQ5MDpcdFxuMTQ5MTpcdFx0aWYgKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXG4xNDkyOlx0XHRcdHJldHVybiAwO1xuMTQ5MzpcdFx0cmV0dXJuIC1FQlVTWTtcbjE0OTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIHRoZSBVbmRvY3VtZW50ZWQ6IEEgUXVpY2sgSW52ZXN0aWdhdGl2ZSBQYXRoKioKCkhtbSwgdGhpcyBmdW5jdGlvbiwgbW9kdWxlLCBvciBwaWVjZSBvZiBkYXRh4oCmIGl0IGFwcGVhcnMgdG8gYmUgKnVuZXhwb3J0ZWQqLiBUaGF0JiMzOTtzIHRoZSBpbml0aWFsIHJlZCBmbGFnLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSBjb250ZXh0LiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgaGllcmFyY2h5LiBMZXQmIzM5O3MgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGZpbmRpbmcgdGhlICoqY2FsbGVycyoqIG9mIHRoaXMgaXRlbS4gRm9yZ2V0IGFzc3VtaW5nLCBJIG5lZWQgc29saWQgZXZpZGVuY2UsIG5vdCBjb25qZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGljaCBjb21wb25lbnRzIGRlcGVuZCBvbiB0aGlzIGFwcGFyZW50bHktdW5leHBvcnRlZCBwaWVjZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEgcG90ZW50aWFsIHByb2JsZW0sIHJlZmFjdG9yaW5nIHRhc2ssIG9yIG1pc3NpbmcgbGluayBpbiBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ndXAuYz0yMzIxPW1pZ3JhdGVfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3Moc3RydWN0IGxpc3RfaGVhZCAqbW92YWJsZV9mb2xpb19saXN0LFxuLS1cbm1tL2d1cC5jLTIzMzktXG5tbS9ndXAuYzoyMzQwOlx0XHRcdGlmIChtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhmb2xpbykpIHtcbm1tL2d1cC5jLTIzNDEtXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4tLVxubW0vaW50ZXJuYWwuaD0xNTg0PXZvaWQgZnJlZV96b25lX2RldmljZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmg6MTU4NTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oLTE1ODYtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMDk4PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI3LVx0XHRcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEyODpcdFx0XHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJiMzOTt0XG5tbS9taWdyYXRlX2RldmljZS5jLTExMjktXHRcdFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTQ9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wZm5zKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjAtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NjE6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRGV2aWNlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgZGV2aWNlIG1pZ3JhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc29tZSBrZXkgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBtaWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCBjYWxscyBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gIGluIGBtbS9ndXAuY2AsIHdoaWNoIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlIGNvcmUgR1VQIG1lY2hhbmlzbS4gTm93LCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFyZSBhbHNvIG91dCB0aGVyZSwgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBgdGVzdF9obW0uY2AgbW9kdWxlLgoKTXkgcHJpbWFyeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9uczogYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AuIFRvIGVuc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSB0byBlbmFibGUgdGhlc2UsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuCgpgREVWSUNFX01JR1JBVElPTmAgc2VlbXMgaW1wb3J0YW50LiBJdCBkZXBlbmRzIG9uIGJvdGggYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIGBaT05FX0RFVklDRWAgaXMgYSBtdXN0LCBjbGVhcmx5LiBBbmQgYFRFU1RfSE1NYCBlbmFibGVzIHRoZSB0ZXN0IGRyaXZlciB0aGF0IG1ha2VzIGNhbGxzIHRvIHRob3NlIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBURVNUX0hNTWAgaXMgc3VmZmljaWVudCBvbiBpdHMgb3duLiBOb3csIGBURVNUX0hNTWAgZGVwZW5kcyBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBBbmQgYERFVklDRV9QUklWQVRFYCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAuIFNvLCBlbmFibGluZyBgVEVTVF9ITU1gIGF1dG9tYXRpY2FsbHkgcHVsbHMgaW4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKU28sIGhlcmUmIzM5O3MgdGhlIGxpc3Qgb2YgY29uZmlncyB0aGF0IEkmIzM5O2xsIG5lZWQgdG8ga25vdyBhYm91dDoKCiogICBgVEVTVF9ITU1gCiogICBgREVWSUNFX1BSSVZBVEVgCiogICBgWk9ORV9ERVZJQ0VgCiogICBgREVWSUNFX01JR1JBVElPTmAKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKKiAgIGBNSUdSQVRJT05gCgpJIGp1c3QgZG91YmxlLWNoZWNrZWQgYW5kIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbGAgdGllZCB0byBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU28sIGVuYWJsaW5nIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgaXQuIFN0aWxsLCBJJiMzOTtsbCBrZWVwIGl0IG9uIHRoZSBsaXN0IGZvciBjbGFyaXR5LgoKT2ggd2FpdCwgYE1JR1JBVElPTmAgaXMgYSBib29sZWFuIGFuZCBzZWxlY3RlZCBieSBgQ09NUEFDVElPTmAgd2hpY2ggZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTssIHNvIGl0IGlzIGxpa2VseSBlbmFibGVkIGFscmVhZHkuIEp1c3QgYW5vdGhlciBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzM1My1cbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODM5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBDb25maWd1cmF0aW9uIFN0YXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtZZXMsIGBURVNUX0hNTWAgaXMgY29uZmlybWVkIHRvIGJlIHRyaXN0YXRlLiYjMzQ7IFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byBleGFtaW5lIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgREVWSUNFX1BSSVZBVEVgIGludGVyYWN0cyB3aXRoLCBvciBpcyBpbmZsdWVuY2VkIGJ5LCB0aGlzIGBURVNUX0hNTWAgdHJpc3RhdGUuIFdoYXQgZG9lcyB0aGlzIHJldmVhbCBhYm91dCBvdmVyYWxsIGRldmljZSBzZWN1cml0eSBvciBiZWhhdmlvdXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBEZXZpY2UgUGFyYW1ldGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGlzIGluZGVlZCBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgdGhpcyBwdXp6bGUuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCBpbXBsaWNhdGlvbnMgb2YgYFpPTkVfREVWSUNFYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBudWFuY2UgaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYERFVklDRV9QUklWQVRFYCwgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gV2hhdCBhcmUgdGhlIGFsbG93ZWQgdmFsdWVzIG9mIGBaT05FX0RFVklDRWAsIGFuZCBpbiB3aGF0IGNvbnRleHRzIGlzIGBaT05FX0RFVklDRWAgZXZhbHVhdGVkPyAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGV2aWNlIFN0YXRlcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3N1bXB0aW9uOiBgWk9ORV9ERVZJQ0VgIGlzIGluZGVlZCBhIGJvb2xlYW4gdmFsdWUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaG93IEkgaW50ZXJwcmV0IHRoZSBzdGF0ZSBvZiB0aGlzIHN5c3RlbSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGRldmljZS1yZWxhdGVkIHNldHRpbmdzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZsYWcgYW5kIHRoZSBicm9hZGVyIG1pZ3JhdGlvbiBwcm9jZWR1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIGV4cGVjdC4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzIHRvIGV2YWx1YXRpbmcgdGhlIGBERVZJQ0VfTUlHUkFUSU9OYCBzZXR0aW5nIG5leHQuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gc2V0dGluZ3MgaXMgcHJvYmFibHkgaW1wb3J0YW50IGZvciBob3cgdGhpcyB3aG9sZSB0aGluZyB3b3Jrcy4gSXQgZGljdGF0ZXMgaG93IHRoZSB3aG9sZSBzeXN0ZW0gcmVzcG9uZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTktXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZy03MDEtXHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjM0CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUgYW5kIFRlc3QgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGluZGVlZCBhIGRlZl9ib29sIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhY3RpdmF0ZSBpdC4gSXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29uZmlncyBJIG5lZWQgdG8gZW5zdXJlIGFyZSBlbmFibGVkIGFyZTogYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkmIzM5O2xsIG1ha2UgYSBub3RlIHRvIGRvdWJsZS1jaGVjayB0aG9zZS4KCkRpZ2dpbmcgZGVlcGVyLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoaXMgaXMgdGhlIGNydXggb2YgaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjbGVhcmluZyBhIGZvbGlvJiMzOTtzIG1hcHBpbmcgYWZ0ZXIgaXQmIzM5O3MgcmVtb3ZlZCBmcm9tIHRoZSBzd2FwIGNhY2hlLgoKVG8gdGVzdCB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGlzIGNvcmUgZnVuY3Rpb24gaXMgcmVhY2hlZC4gTG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBoYXZlIHRocmVlIGtleSBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nOiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1dGlsaXplZCBieSBkZXZpY2UgZHJpdmVycywgc28gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbnMgY291bGQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBjYWxscyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc3RydWN0IHNvbWUgdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIGFsbCBvZiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHN0cmVzcyB0aGUgZm9saW8gY2xlYXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4KCkkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uIGZvciBtaWdyYXRpbmcgZGV2aWNlIG1lbW9yeS4gSXQgYWRkcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNsZWFyIHRoZSBtYXBwaW5nIG9mIGEgZm9saW8gYWZ0ZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AsIHdoaWNoIGFyZSB1c2VkIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgYHRlc3RfaG1tYCBtb2R1bGUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGVudHJ5IHBvaW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjA3LjE2NzQ0Mjc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NTI0ODg5MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjA3LjE2NzQ1NzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcxMjI3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxODQ1ZDIyZTJkYThmNTNlZGNkYmVjM2Y0ZTg0OWEyY2Y2M2E5Mjg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDAyOjU1OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuaW5kZXggNTU0NzU0ZWIyNmZmMmYuLmZhN2ZiYWNhYzUxNDM4IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXFxuQEAgLTEyMDQsNiArMTIwNCwxMiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbiBcXHRcXHRcXHRcXHRcXHRzcmNfcGZuc1tpXSBcXHUwMDI2PSB+TUlHUkFURV9QRk5fTUlHUkFURTtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwXFxuK1xcdFxcdFxcdFxcdCAqIGNhY2hlLiBNaWdyYXRlIGl0IGFzIGEgbWFwcGluZ2xlc3MgYW5vbnltb3VzIGZvbGlvLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0bWFwcGluZyA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIGlmIChmb2xpb19pc196b25lX2RldmljZShuZXdmb2xpbykpIHtcXG4gXFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MDcuODM1NTU5NzY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA3ODU2NzYzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE4NDVkMjJlMmRhOGY1M2VkY2RiZWMzZjRlODQ5YTJjZjYzYTkyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMjo1NTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXG5pbmRleCA1NTQ3NTRlYjI2ZmYyZi4uZmE3ZmJhY2FjNTE0MzggMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlX2RldmljZS5jXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXG5AQCAtMTIwNCw2ICsxMjA0LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4gXHRcdFx0XHRcdHNyY19wZm5zW2ldIFx1MDAyNj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7XG4gXHRcdFx0XHRcdGdvdG8gbmV4dDtcbiBcdFx0XHRcdH1cbitcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwXG4rXHRcdFx0XHQgKiBjYWNoZS4gTWlncmF0ZSBpdCBhcyBhIG1hcHBpbmdsZXNzIGFub255bW91cyBmb2xpby5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0bWFwcGluZyA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKG5ld2ZvbGlvKSkge1xuIFx0XHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTowNy44MzU1NjIzNjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI4NDU4Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYSBEZXZpY2UgTWlncmF0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgYSBwYXRjaCBqdXN0IGNyb3NzZWQgbXkgZGVzayB0b3VjaGluZyBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIEhtbSwgSSBzZWUgaXQncyBhZGRpbmcgYG1hcHBpbmcgPSBOVUxMO2AgaW5zaWRlIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiwgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSB6ZXJvaW5nIG91dCBgbWFwcGluZ2AgdGhlcmUuIElzIHRoaXMgYSBkZWZlbnNpdmUgbWVhc3VyZT8gQXJlIHdlIHRyeWluZyB0byBlbnN1cmUgYSBjbGVhbiBzdGF0ZSBiZWZvcmUgYSBuZXcgbWFwcGluZyBpcyBhc3NpZ25lZCwgb3IgcGVyaGFwcyBjbGVhcmluZyBhIHBvdGVudGlhbCBzdGFsZSB2YWx1ZT8gUGVyaGFwcyB0aGlzIGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgcHJvYmxlbSByZWxhdGVkIHRvIGRldmljZSBtaWdyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBgbWFwcGluZ2AgdmFyaWFibGUgaXMgdXNlZCBmb3Igd2l0aGluIHRoZSBmdW5jdGlvbiwgd2hhdCBoYXBwZW5zIHdpdGggaXQgYmVmb3JlIHRoaXMgbGluZSwgYW5kIHdoYXQgaGFwcGVucyBhZnRlci4gVGhpcyBpcyBjbGVhcmx5IGEgY2hhbmdlIHRoYXQgY291bGQgaW1wYWN0IGRldmljZSBtaWdyYXRpb24gcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgaW1wYWN0IGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHNlZW1pbmdseSBzaW1wbGUgYXNzaWdubWVudC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjExLjE2NDAyNDE5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NDcxNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19taWdyYXRlX2RldmljZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTA5Ny1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEwOTg6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjUzPXZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU1LXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTY6XFx0X19taWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU3LX1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI2OD12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MDpcXHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKG1pZ3JhdGUtXFx1MDAzZXNyYywgbWlncmF0ZS1cXHUwMDNlZHN0LCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjExLjI4MjY3NTU3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODE3MjUyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBiZWNhdXNlIGl0J3MgYXQgdGhlIGNvcmUgb2YgZGV2aWNlIHBhZ2UgbWlncmF0aW9uLCBhbmQgaXQncyBjYWxsZWQgYnkgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMsIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIHBvdGVudGlhbGx5IGltcGFjdGluZyBhIGxvdCBvZiBkaWZmZXJlbnQgYXNwZWN0cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGludGVyYWN0aW9ucy5cblxuSSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNoYW5nZXMgdGhleSdyZSBtYWtpbmcgdG8gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBHb3R0YSBzZWUgcHJlY2lzZWx5IHdoYXQgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIGluIHRoYXQgZnVuY3Rpb24uIFdoYXQgYXJlIHRoZXkgKmRvaW5nKiB3aXRoIHRoZSBtaWdyYXRpb24gcHJvY2Vzcz8gQXJlIHRoZXkgYWRkaW5nIGEgbmV3IGNoZWNrPyBNb2RpZnlpbmcgaG93IHBhZ2VzIGFyZSBtb3ZlZCBvciBpbnZhbGlkYXRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaW1wbGljYXRpb25zPyBBbnkgY2hhbmNlIHRoaXMgaXMgZ29pbmcgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBvbmdvaW5nIHdvcmsgaW4gdGhpcyBhcmVhPyBXaXRob3V0IHNlZWluZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXQncyBpbXBvc3NpYmxlIHRvIG1ha2UgYSBzb2xpZCBhc3Nlc3NtZW50LiBMZXQncyBnZXQgdGhhdCBjb2RlIHNuaXBwZXQgcHVsbGVkIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MTQuNTY0NDAzMTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyOTAsIkVycm9yIjoiYXJndW1lbnQgXCJGaXJzdExpbmVcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IFwiMTE5MFwiLFxuICBcIkxpbmVDb3VudFwiOiBcIjQwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYXJndW1lbnQgXFxcIkZpcnN0TGluZVxcXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjE0LjU2NDQzNjg1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTUxODAwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHByb2Nlc3NpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW50ZWdlciBJbnB1dCBSZXF1aXJlbWVudCoqXG5cblJpZ2h0LCBzbyB0aGUgQVBJIGludGVyYWN0aW9uIGhhcyBmbGFnZ2VkIHNvbWV0aGluZy4gSXQncyBleHBlY3RpbmcgYW4gaW50ZWdlciBhcyBpbnB1dC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IHRoaXMgaW1wYWN0cyBteSBjdXJyZW50IHdvcmtmbG93LiBJcyB0aGUgZGF0YSBJJ20gZmVlZGluZyBpdCBhbHJlYWR5IGluIGFuIGludGVnZXIgZm9ybWF0PyBJZiBub3QsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcHByb3ByaWF0ZSBjb252ZXJzaW9uIG1ldGhvZC4gRGVwZW5kaW5nIG9uIHRoZSBzb3VyY2UgZGF0YSwgdGhpcyBjb3VsZCBpbnZvbHZlIGNhc3RpbmcsIHJvdW5kaW5nLCBvciBldmVuIG1vcmUgY29tcGxleCB0cmFuc2Zvcm1hdGlvbnMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBjb21wYXRpYmlsaXR5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGRhdGEgdHlwZXMgYW5kIHByZS1wcm9jZXNzaW5nIHN0ZXBzLiBQb3RlbnRpYWwgZXJyb3JzIGNvdWxkIGFyaXNlIGZyb20gc2VuZGluZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIHN0cmluZ3MgdGhhdCB0aGUgQVBJIG1pZ2h0IG1pc2ludGVycHJldC4gQmVzdCB0byBhZGRyZXNzIHRoaXMgdXBmcm9udCBhbmQgYXZvaWQgZG93bnN0cmVhbSBpc3N1ZXMgb3IgdW5leHBlY3RlZCBBUEkgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhbiwgdmFsaWRhdGVkIGludGVnZXIgaXMgcGFzc2VkIHRvIHRoYXQgQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjE3LjQ3OTYxODk3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5MDpcXHRcXHRcXHR9XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcbjExOTM6XFx0XFx0XFx0aWYgKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKG5ld2ZvbGlvKSB8fFxcbjExOTQ6XFx0XFx0XFx0ICAgIGZvbGlvX2lzX2RldmljZV9jb2hlcmVudChuZXdmb2xpbykpIHtcXG4xMTk1OlxcdFxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuMTE5NjpcXHRcXHRcXHRcXHRcXHQvKlxcbjExOTc6XFx0XFx0XFx0XFx0XFx0ICogRm9yIG5vdyBvbmx5IHN1cHBvcnQgYW5vbnltb3VzIG1lbW9yeSBtaWdyYXRpbmcgdG9cXG4xMTk4OlxcdFxcdFxcdFxcdFxcdCAqIGRldmljZSBwcml2YXRlIG9yIGNvaGVyZW50IG1lbW9yeS5cXG4xMTk5OlxcdFxcdFxcdFxcdFxcdCAqXFxuMTIwMDpcXHRcXHRcXHRcXHRcXHQgKiBUcnkgdG8gZ2V0IHJpZCBvZiBzd2FwIGNhY2hlIGlmIHBvc3NpYmxlLlxcbjEyMDE6XFx0XFx0XFx0XFx0XFx0ICovXFxuMTIwMjpcXHRcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykgfHxcXG4xMjAzOlxcdFxcdFxcdFxcdFxcdCAgICAhZm9saW9fZnJlZV9zd2FwKGZvbGlvKSkge1xcbjEyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3JjX3BmbnNbaV0gXFx1MDAyNj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7XFxuMTIwNTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMTIwNjpcXHRcXHRcXHRcXHRcXHR9XFxuMTIwNzpcXHRcXG4xMjA4OlxcdFxcdFxcdFxcdFxcdC8qXFxuMTIwOTpcXHRcXHRcXHRcXHRcXHQgKiBmb2xpb19mcmVlX3N3YXAoKSByZW1vdmVkIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwXFxuMTIxMDpcXHRcXHRcXHRcXHRcXHQgKiBjYWNoZS4gTWlncmF0ZSBpdCBhcyBhIG1hcHBpbmdsZXNzIGFub255bW91cyBmb2xpby5cXG4xMjExOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjEyMTI6XFx0XFx0XFx0XFx0XFx0bWFwcGluZyA9IE5VTEw7XFxuMTIxMzpcXHRcXHRcXHRcXHR9XFxuMTIxNDpcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKG5ld2ZvbGlvKSkge1xcbjEyMTU6XFx0XFx0XFx0XFx0LypcXG4xMjE2OlxcdFxcdFxcdFxcdCAqIE90aGVyIHR5cGVzIG9mIFpPTkVfREVWSUNFIHBhZ2UgYXJlIG5vdCBzdXBwb3J0ZWQuXFxuMTIxNzpcXHRcXHRcXHRcXHQgKi9cXG4xMjE4OlxcdFxcdFxcdFxcdHNyY19wZm5zW2ldIFxcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xcbjEyMTk6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjEyMjA6XFx0XFx0XFx0fVxcbjEyMjE6XFx0XFxuMTIyMjpcXHRcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0XFx0aWYgKG1pZ3JhdGUgXFx1MDAyNlxcdTAwMjYgbWlncmF0ZS1cXHUwMDNlZmF1bHRfcGFnZSA9PSBwYWdlKVxcbjEyMjU6XFx0XFx0XFx0XFx0ZXh0cmFfY250ID0gMTtcXG4xMjI2OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuciBcXHUwMDI2XFx1MDAyNiBpICsgaiBcXHUwMDNjIG5wYWdlczsgaisrKSB7XFxuMTIyNzpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpK2pdKSk7XFxuMTIyODpcXHRcXHRcXHRcXHRuZXdmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpK2pdKSk7XFxuMTIyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MTcuNDc5NzE4MzA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMDEwNDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgUGF0Y2ggaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb246IGBtYXBwaW5nID0gTlVMTDtgIGFmdGVyIHRoYXQgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgIGNhbGwgaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgYmVpbmcgYWRkcmVzc2VkLCBhbmQgdGhlIGludGVudGlvbiBpcyBsaWtlbHkgdG8gemVybyBvdXQgdGhhdCBwb2ludGVyIGFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBmcmVlZC4gSSB1bmRlcnN0YW5kIHRoaXMgaXMgb2NjdXJyaW5nIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIGtlcm5lbCBmb3IgaGFuZGxpbmcgcGFnZSBtaWdyYXRpb24sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZW52aXJvbm1lbnQgaXQgbWF5IGJlIHJ1bm5pbmcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgZmlsZS4gVGhhdCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBtYXkgcmVxdWlyZSBhIHJldmlldyBvZiByZWxhdGVkIGNvbW1pdHMsIGJ1dCBJJ2xsIGZvY3VzIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjIwLjc3OTgyNDczM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDcwMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MjAuODkxOTA0MDM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjYwNjIwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHByb2Nlc3MsIHdpdGggYSBmb2N1cyBvbiBhIGZpZWxkIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgdGFzayBoaW5nZXMgb24gYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHRoZSBrZXkuIEJ1dCB3aGF0IGVsc2UgaXMgdGllZCB0byB0aGF0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gYW55dGhpbmcgZWxzZSB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgdGhpcyBqdXN0IGEgZmxhZywgb3IgZG9lcyBpdCB1bmxvY2sgYSB3aG9sZSBjYXNjYWRlIG9mIG90aGVyIHNldHRpbmdzIG9yIHByZXJlcXVpc2l0ZXM/IFdlIGFsbCBrbm93IHRoYXQgY29uZmlndXJhdGlvbnMgcmFyZWx5IGV4aXN0IGluIGlzb2xhdGlvbjsgdGhlcmUncyBhbHdheXMgYSB3ZWIgb2YgZGVwZW5kZW5jaWVzIHRvIHVucmF2ZWwgdG8gZW5zdXJlIHRoaW5ncyB3b3JrIHByZWRpY3RhYmx5IGFuZCBzYWZlbHkuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRob3NlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIgd2l0aCB0ZXN0aW5nIG9yIGludGVncmF0aW9uLiBMZXQncyBzZWUgd2hhdCBlbHNlIGl0IHB1bGxzIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MjMuODU3OTY4NDAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4NDI5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9NSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5OS1cXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxcbm1tL0tjb25maWctNzAxLVxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NToyMy45OTA4MTU4MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI3MDY0NzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkFkZHJlc3NpbmcgdGhlIEluZnJhc3RydWN0dXJlIFNoaWZ0KipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBzaGlmdCwgc29tZXRoaW5nIHRoYXQgZGVtYW5kcyBib3RoIGBNSUdSQVRJT05gIGFuZCBhIGBaT05FX0RFVklDRWAuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoYXQgYFpPTkVfREVWSUNFYC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgaW52b2x2ZWQgaW4gdGhhdCBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjI2LjI2MTQ2NTg4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NTI5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6MjYuMzg4MDAxNTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MjQ3NTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aGUgc3lzdGVtIGlzIHRlbGxpbmcgbWUgdGhhdCBgREVWSUNFX01JR1JBVElPTmAgZGVwZW5kcyBvbiBib3RoIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBSaWdodCwgbWFrZXMgc2Vuc2UuIExldCdzIHF1aWNrbHkgdmVyaWZ5IGlmIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBldmVuIHNlbGVjdGFibGUgYXQgYWxsLCBvciBpZiBpdCdzIGltcGxpY2l0bHkgZGVmaW5lZC4gQWgsIGl0J3MgYSBgZGVmX2Jvb2xgIHRpZWQgdG8gYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFNvIEkgY2FuJ3QgZGlyZWN0bHkgZW5hYmxlIGBERVZJQ0VfTUlHUkFUSU9OYDsgaW5zdGVhZCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0ICpib3RoKiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCBhcmUgc2V0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSB0d28uIE9rYXksIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgTUlHUkFUSU9OYCBub3cgYW5kIHNlZWluZyB3aGF0IHRoYXQgZW50YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjI5LjU0MDQ3OTY2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODU2NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjk1LVxcbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY5Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjI5LjY4MzM0MDg2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk4ODEyNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgTUlHUkFUSU9OYCBCb29sZWFuKipcblxuQWxyaWdodCwgc28gYE1JR1JBVElPTmAgaXMgZmxhZ2dlZCBhcyBhIGJvb2xlYW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIHRyYWNlIHRoaXMgYmFjay5cIiBJdCdzIGEgYmluYXJ5IHN0YXRlLCBlaXRoZXIgdHJ1ZSBvciBmYWxzZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBhY3RpdmF0ZXMgdGhpcyBib29sZWFuLiBUaGUgY29yZSBxdWVzdGlvbiBpcywgd2hlcmUgaW4gdGhlIGNvZGUgaXMgaXQgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZD8gV2hhdCBwaWVjZXMgb2YgbG9naWMgYXJlIHNldHRpbmcgaXQgdG8gdHJ1ZSwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMgYW5kIGZpbmQgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgdGhhdCBtYW5pcHVsYXRlIHRoaXMgYE1JR1JBVElPTmAgdmFyaWFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB0cmlnZ2VyIG1lY2hhbmlzbSBiZWZvcmUgSSBjYW4gZXZhbHVhdGUgaXRzIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozMi40ODIxNTU1MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTcxMDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTk0LVxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnOjU5NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy01OTYtXFxuLS1cXG5tbS9LY29uZmlnPTY1ND1jb25maWcgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTYtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZzo2NTc6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjU4LVxcdGRlcGVuZHMgb24gTU1VXFxuLS1cXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjg4LVxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnOjY4OTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA2OS1cXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWc6MTA3MDpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy0xMDcxLVxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjMyLjU4Mzg3NDc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIzNzA3NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBEYXRhYmFzZSBEZXBsb3ltZW50IFN0cmF0ZWd5KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgc3lzdGVtIGNob3NlIGBDT01QQUNUSU9OYCwgYW5kIGl0IHNlZW1zIGBDT01QQUNUSU9OYCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIGZhY3QgdGhhdCBpdCdzIHNlbGVjdGVkIGRpcmVjdGx5IGltcGxpZXMgdGhhdCBgTUlHUkFUSU9OYCBpcyBsaWtlbHkgYWxzbyBlbmFibGVkLCBnaXZlbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQ29tcGFjdGlvbiBpcyB0aGUgZm91bmRhdGlvbiwgbWFraW5nIG1pZ3JhdGlvbiBwb3NzaWJsZS5cblxuQnV0IHRoZSBxdWVzdGlvbiBpbiB0aGUgYmFjayBvZiBteSBtaW5kIGlzLCB3aGF0J3MgaGFwcGVuaW5nIG9uIGBaT05FX0RFVklDRWA/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjaG9zZW4gc3RyYXRlZ3kgYWxpZ25zIHdpdGggdGhlIGRldmljZSBpbiB1c2UuIExldCBtZSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGBaT05FX0RFVklDRWAgcmVsYXRpdmUgdG8gYENPTVBBQ1RJT05gIGFuZCBgTUlHUkFUSU9OYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjM1LjUwNzU4NTI2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkxMzAyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozNS41OTY3MjA2MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1OTU4MTYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFpPTkVfREVWSUNFKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gVGhpcyBtZWFucyBJJ20gZ29pbmcgdG8gaGF2ZSB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGFueSBtb2R1bGVzLCBmdW5jdGlvbnMsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgdXRpbGl6ZSBvciByZWZlcmVuY2UgdGhhdCBzcGVjaWZpYyB2YXJpYWJsZSBvciBvYmplY3QuIEknbGwgbmVlZCB0byBjb25zaWRlciBkaXJlY3QgZGVwZW5kZW5jaWVzIGZpcnN0LCBidXQgYWxzbyBrZWVwIGluIG1pbmQgdGhhdCBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgY291bGQgYmUgY3J1Y2lhbCDigJMgc29tZXRoaW5nIHRoYXQgY2FsbHMgYSBmdW5jdGlvbiB0aGF0ICp1c2VzKiBgWk9ORV9ERVZJQ0VgLCBmb3IgZXhhbXBsZS4gSSdsbCBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LCBwZXJoYXBzIHN0YXJ0aW5nIHdpdGggYSBjb2RlIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIHRoZSB2YXJpYWJsZSBhbmQgdGhlbiBidWlsZGluZyBhIG1hcCBvZiBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgY29tcG9uZW50cy4gVGhlIGFyY2hpdGVjdHVyZSBpcyBrZXkgaGVyZS4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgY29kZWJhc2UsIEkgbWlnaHQgbGV2ZXJhZ2Ugc29tZSB0b29saW5nIHRvIGF1dG9tYXRlIHRoZSBkZXBlbmRlbmN5IGFuYWx5c2lzIHRvIHNvbWUgZXh0ZW50LiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gZGVsdmUgaW50byB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZSBhaW0gaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2Ugb3IgbW9kaWZpY2F0aW9uIHRvIGBaT05FX0RFVklDRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozOC42NTYzMDQ5MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjM3OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIzODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuMTIzOTpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjQwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4xMjQxOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0aGVscFxcbjEyNDQ6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyNDU6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyNDY6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjQ3OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjQ4OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyNDk6XFx0XFxuMTI1MDpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjUxOlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyNTI6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI1MzpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNTQ6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjU1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NTozOC42NTY0NTQwNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMDkzOTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIHRvIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZXBlbmRlbmNpZXMgYW5kIFJlYWNoYWJpbGl0eSBBbmFseXNpcyBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgWk9ORV9ERVZJQ0VgIGZlYXR1cmUuIEl0J3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gTWFrZXMgc2Vuc2UsIHRoZSBhYmlsaXR5IHRvIG1hbmFnZSBkZXZpY2UgbWVtb3J5IHpvbmVzIGR5bmFtaWNhbGx5IHJlcXVpcmVzIHRob3NlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzLiBHaXZlbiB0aGlzLCBJIHRoaW5rIHdlIHNob3VsZCBlbmFibGUgYFpPTkVfREVWSUNFYC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyBkaWdnaW5nIGludG8gdGhlIGltcGxpY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gSXQncyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIHBhZ2VzIHRvIG9yIGZyb20gZGV2aWNlIHpvbmVzLCBzbyBpdOKAmXMgY3JpdGljYWwuIEkgY2FuIHNlZSBpdCdzIGNhbGxlZCBkaXJlY3RseSBieSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aG8gKmNhbGxzKiB0aG9zZSB0d28gZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHRvIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGNvbmZpZGVuY2UgSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBhIGdvb2QgY2hhbmdlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjYWxsIGNoYWluIHRvIHRob3JvdWdobHkgdmV0IHRoZSBpbXBhY3Qgb24gdGhlIGV4aXN0aW5nIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjQzLjU4NzM5NTc1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NzMwMzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV9wYWdlc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTA5PWludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc0LVxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgZHN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTc1OlxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzYtXFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz00NzU9bm91dmVhdV9kbWVtX2V2aWN0X2NodW5rKHN0cnVjdCBub3V2ZWF1X2RtZW1fY2h1bmsgKmNodW5rKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtNTE3LVxcdG5vdXZlYXVfZmVuY2VfbmV3KFxcdTAwMjZmZW5jZSwgY2h1bmstXFx1MDAzZWRybS1cXHUwMDNlZG1lbS1cXHUwMDNlbWlncmF0ZS5jaGFuKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo1MTg6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTUxOS1cXHRub3V2ZWF1X2RtZW1fZmVuY2VfZG9uZShcXHUwMDI2ZmVuY2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9MTk4PWludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTk5OnZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTIwMC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xODg9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmsoc3RydWN0IGRtaXJyb3JfY2h1bmsgKmNodW5rKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjMxLVxcdH1cXG5saWIvdGVzdF9obW0uYzoyMzI6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMpO1xcbmxpYi90ZXN0X2htbS5jLTIzMy1cXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk2NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMDk4OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDk5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0NC0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDU6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNDYtICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Mi0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTM6dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NS17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU2OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Ny19XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY5LXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzA6XFx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVxcdTAwM2VzcmMsIG1pZ3JhdGUtXFx1MDAzZWRzdCwgbWlncmF0ZS1cXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzEtfVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzkzLSAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM5NDogKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTUtICovXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NjE9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODUtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDg2OlxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxcdGlmIChzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NDYuMTc0NzA0NzAxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzkwNDA2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgKipcblxuUmlnaHQsIGxldCdzIHNlZSwgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGEgZmV3IGludGVyZXN0aW5nIHBsYWNlcy4gRmlyc3QsIEkgc2VlIGl0J3MgdXNlZCBpbiBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0J3MgZ29vZCwgYSB0ZXN0IG1vZHVsZSBpcyBhbHdheXMgYSBzZW5zaWJsZSBwbGFjZSB0byBmaW5kIGEgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIG1pZ3JhdGlvbiDigJMgdGhleSBhcmUgb2Z0ZW4gZ3JlYXQgZm9yIGZ1enppbmcgYW5kIHN0cmVzcy10ZXN0aW5nLiBNYWtlcyBzZW5zZS4gVGhlbiB0aGVyZSdzIGBtbS9taWdyYXRlX2RldmljZS5jYCwgc3BlY2lmaWNhbGx5IGluIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiBpcywgc28gaXQncyBub3QgYSBzdXJwcmlzZSB0byBzZWUgaXQgdGhlcmUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gY29oZXJlbnQgZm9saW9zLCB3aGljaCBvZnRlbiBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZHVyaW5nIG1pZ3JhdGlvbi5cblxuSG1tLCBpbnRlcmVzdGluZywgaXQncyBhbHNvIGluIGBub3V2ZWF1X2RtZW0uY2AgYW5kIGBkcm1fcGFnZW1hcC5jYC4gVGhhdCBwb2ludHMgdG8gZGV2aWNlIGRyaXZlciB1c2UsIGxpa2VseSByZWxhdGVkIHRvIG1vdmluZyBwYWdlcyB0byBhbmQgZnJvbSBncmFwaGljcyBoYXJkd2FyZSwgb3Igb3RoZXIgRE1BLWNhcGFibGUgZGV2aWNlcy4gR3JhcGhpY3Mgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgbmVlZHMgd2hlbiBpdCBjb21lcyB0byBtZW1vcnkgbWlncmF0aW9uLCBzbyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgbGV0J3MgZGlnIGludG8gYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgdG8gc2VlIHdoZXJlIHRoZSBWTUEncyBhcmUgcmVsYXRlZCB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDcwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NTAuMDUzNzQ4NjI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIzNzAzMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3BhZ2VzXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI2Ni1mdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIG1ha2UgZHJpdmVycyBlYXNpZXIgdG8gd3JpdGUgYW5kIHRvIGNlbnRyYWxpemUgY29tbW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozNjU6NC4gYGBtaWdyYXRlX3ZtYV9wYWdlcygpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI5ODo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjk5LVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz01MTM9c3RhdGljIGludCBfX2t2bXBwY19zdm1fcGFnZV9vdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU3OC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjU3OTpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU4MC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03ODctXFx0Km1pZy5kc3QgPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihkcGFnZSkpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6Nzg4OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzg5LW91dF9maW5hbGl6ZTpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9Mzk0PXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00NTEtXFx0ciA9IHN2bV9taWdyYXRlX2NvcHlfdG9fdnJhbShub2RlLCBwcmFuZ2UsIFxcdTAwMjZtaWdyYXRlLCBcXHUwMDI2bWZlbmNlLCBzY3JhdGNoLCB0dG1fcmVzX29mZnNldCk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0NTI6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzU1LVxcdFxcdFxcdFxcdCAgICBzY3JhdGNoLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzU2OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1Ny1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MTItZXJyX2Fib3J0ZWRfbWlncmF0aW9uOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgxMzpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODE0LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIxMT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzA0LVxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzMDU6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMDYtXFx0bWlncmF0ZV92bWFfZmluYWxpemUoXFx1MDAyNm1pZ3JhdGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2Ny1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRtZW0tXFx1MDAzZW1pZ3JhdGUuY2hhbik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjY4OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjktXFx0bm91dmVhdV9kbWVtX2ZlbmNlX2RvbmUoXFx1MDAyNmZlbmNlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTc4Mz1zdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fbWlncmF0ZV9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgwOS1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRybS1cXHUwMDNlZG1lbS1cXHUwMDNlbWlncmF0ZS5jaGFuKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4MTA6XFx0bWlncmF0ZV92bWFfcGFnZXMoYXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODExLVxcdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFxcdTAwMjZmZW5jZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NS1cXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjY6XFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ny1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Mz1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTQ6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NS12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTExNzUtXFxubGliL3Rlc3RfaG1tLmM6MTE3NjpcXHRcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTE3Ny1cXHRcXHRjbWQtXFx1MDAzZWNwYWdlcyArPSBkbWlycm9yX3N1Y2Nlc3NmdWxfbWlncmF0ZWRfcGFnZXMoXFx1MDAyNmFyZ3MpO1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTE4OT1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2Uoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMjQ4LVxcdFxcdGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShcXHUwMDI2YXJncywgZG1pcnJvcik7XFxubGliL3Rlc3RfaG1tLmM6MTI0OTpcXHRcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTI1MC1cXHRcXHRkbWlycm9yX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcChcXHUwMDI2YXJncywgZG1pcnJvcik7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNjUzPXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTcxOC1cXHR9XFxubGliL3Rlc3RfaG1tLmM6MTcxOTpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTcyMC1cXHQvKlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTktICogdGhpcyBjYW4gc3RpbGwgZmFpbCwgYW5kIHRodXMgaW5zaWRlIHRoZSBkZXZpY2UgZHJpdmVyIHlvdSBtdXN0IGNoZWNrIGlmIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzAwOiAqIG1pZ3JhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBmb3IgdGhvc2UgZW50cmllcyBhZnRlciBjYWxsaW5nIG1pZ3JhdGVfdm1hX3BhZ2VzKCksXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDEtICoganVzdCBsaWtlIGZvciByZWd1bGFyIG1pZ3JhdGlvbi5cXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMi0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzAzOiAqIEFmdGVyIHRoYXQsIHRoZSBjYWxsZXJzIG11c3QgY2FsbCBtaWdyYXRlX3ZtYV9wYWdlcygpIHRvIGdvIG92ZXIgZWFjaCBlbnRyeVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA0LSAqIGluIHRoZSBzcmMgYXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWdcXG5tbS9taWdyYXRlX2RldmljZS5jLTcwNS0gKiBzZXQuIElmIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIGRzdCBhcnJheSBoYXMgTUlHUkFURV9QRk5fVkFMSUQgZmxhZyBzZXQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MDY6ICogdGhlbiBtaWdyYXRlX3ZtYV9wYWdlcygpIHRvIG1pZ3JhdGUgc3RydWN0IHBhZ2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgc291cmNlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDctICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGVcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzE0LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MTU6ICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTYtICogc3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkLCBhbmQgd2hpY2ggd2VyZSBub3QuICBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgcGFnZXMgd2lsbFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTgtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjcxOTogKiBJdCBpcyBzYWZlIHRvIHVwZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZSBhZnRlciBtaWdyYXRlX3ZtYV9wYWdlcygpIGJlY2F1c2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTcyMC0gKiBib3RoIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgcGFnZSBhcmUgc3RpbGwgbG9ja2VkLCBhbmQgdGhlIG1tYXBfbG9jayBpcyBoZWxkXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEwOTg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0OS0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MDogKiBFcXVpdmFsZW50IHRvIG1pZ3JhdGVfdm1hX3BhZ2VzKCkuIFRoaXMgaXMgY2FsbGVkIHRvIG1pZ3JhdGUgc3RydWN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTEtICogbWV0YS1kYXRhIGZyb20gc291cmNlIHN0cnVjdCBwYWdlIHRvIGRlc3RpbmF0aW9uLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjU4PUVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGFnZXMpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYwLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2MTogKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2Mi0gKiBAbWlncmF0ZTogbWlncmF0ZSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgbWlncmF0aW9uIGluZm9ybWF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjctICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjY4OnZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjUyLjU3NzQ1NjI5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1MDI1MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTGV2ZXJhZ2luZyBFeGlzdGluZyBUZXN0IEluZnJhc3RydWN0dXJlKipcblxuSSBzZWUgdGhhdCB0aGUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBmdW5jdGlvbiwgdGhlIG9uZSBJJ20gd29ya2luZyB3aXRoLCBpcyBhbHNvIGludm9rZWQgZnJvbSBgbGliL3Rlc3RfaG1tLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZSBmb2xrcyB3aG8gd3JvdGUgdGhhdCB0ZXN0IGhhcm5lc3MgcHJvYmFibHkgYWxyZWFkeSBoYXZlIGEgc29saWQgZnJhbWV3b3JrIGZvciBleGVyY2lzaW5nICp0aGlzKiB2ZXJ5IHBpZWNlIG9mIGNvZGUuIFJhdGhlciB0aGFuIHJlaW52ZW50aW5nIHRoZSB3aGVlbCwgSSBzaG91bGQgYWJzb2x1dGVseSBsZXZlcmFnZSB0aGF0IGV4aXN0aW5nIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIFVzaW5nIGBsaWIvdGVzdF9obW0uY2Agc2VlbXMgbGlrZSBhIHNtYXJ0IHdheSB0byByaWdvcm91c2x5IHRlc3QgdGhlIGNvZGUgY2hhbmdlcyBJJ20gbWFraW5nLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGhvdyBJIGNhbiBpbnRlZ3JhdGUgbXkgdGVzdCBjYXNlcyBlZmZlY3RpdmVseS4gSXQgd291bGQgc2F2ZSBtZSBhIGxvdCBvZiB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjU1LjY5MjQ4MzcyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyODM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdF9obW0ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICs9IHRlc3RfbG9ja3VwLm9cXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgKz0gdGVzdF9obW0ub1xcbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgKz0gdGVzdF9mcmVlX3BhZ2VzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NTUuNzgwNzcxNDRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MDQ0Mjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJJ20gbG9va2luZyBhdCBgQ09ORklHX1RFU1RfSE1NYCwgd2hpY2ggSSBrbm93IGZyb20gZXhwZXJpZW5jZSBzZXRzIHVwIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYGxpYi90ZXN0X2htbS5jYCBmaWxlLiBOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBteSBuZXh0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgdGVzdGluZyBmcmFtZXdvcmsgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0J3MgcmVxdWlyZWQgZm9yIGl0IHRvIGJ1aWxkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgbmVlZCB0byBlbnN1cmUgSSBrbm93IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGxpYnJhcmllcywgb3IgbW9kdWxlcyBgQ09ORklHX1RFU1RfSE1NYCByZWxpZXMgdXBvbi4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU1OjU4LjkyMTIxNzE3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NzMzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzM1My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNTUtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTU6NTkuMDAyMDk3MTc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Mjc1NzA2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIGZvciB0aGlzIHByb2plY3QuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgbGlrZWx5IGxvY2F0ZWQgd2l0aGluIHRoZSBgS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMzNTQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhhdCBmaWxlIGxvY2F0aW9uIGRpcmVjdGx5LiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZmlndXJhdGlvbiBJJ20gdHJ5aW5nIHRvIGRlY2lwaGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjAxLjcyOTY3MDYyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM1NDpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzU1OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzM1NjpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzM1NzpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzM1ODpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzNTk6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzNjA6XFx0XFx0aGVscFxcbjMzNjE6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzYyOlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzNjM6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzM2NDpcXHRcXG4zMzY1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzY2OlxcdFxcbjMzNjc6XFx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xcbjMzNjg6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgZnJlZWluZyBwYWdlc1xcXCJcXG4zMzY5OlxcdFxcdGhlbHBcXG4zMzcwOlxcdFxcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXFxuMzM3MTpcXHRcXHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cXG4zMzcyOlxcdFxcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxcbjMzNzM6XFx0XFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjAxLjcyOTg4ODg2NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQyMjE5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBTY29wZTogUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gYFRFU1RfSE1NYCBpcyBmbGFnZ2VkIGFzIGRlcGVuZGluZyBvbiBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoYXQncyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHByZXR0eSBjb21tb24gdGhlc2UgZGF5cywgYW5kIGl0cyBpbXBhY3QgaXMgdXN1YWxseSB3ZWxsLXVuZGVyc3Rvb2QsIGJ1dCBgREVWSUNFX1BSSVZBVEVgLi4uIHRoYXQncyB0aGUgb25lIHRoYXQgYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEl0IGNhbiBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50cywgZXNwZWNpYWxseSBjb25jZXJuaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzZWN1cml0eSBjb250ZXh0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IGBERVZJQ0VfUFJJVkFURWAgc3BlY2lmaWNhbGx5IGVudGFpbHMgaW4gdGhpcyBjb250ZXh0IGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgY291bGQgZGVmaW5lIHRoZSBzY29wZSwgYW5kIHRoYXQncyBjcml0aWNhbC4gTGV0IG1lIHNlZSB3aGF0J3Mgd2hhdCB3aXRoIGBERVZJQ0VfUFJJVkFURWAuIFRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MDQuOTcyMTExNjA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg3ODQyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2Ni1cXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MDUuNDkwOTAxODkxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU3OTY1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSXQncyBhIGtleSBmaWxlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFuZCBhcm91bmQgbGluZSAxMjY3IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb3IgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGZvciB3aGF0ZXZlciBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBzcGVjaWZpYyBsaW5lIHJhbmdlIGhlbHBzIG1lIG5hdmlnYXRlIGVmZmljaWVudGx5IGFuZCBhdm9pZCBnZXR0aW5nIGxvc3QgaW4gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBzcGFjZS4gSSdtIGhvcGluZyBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZGVmaW5pdGlvbiDigJMgbWF5YmUgYSBzaW1wbGUgYGNvbmZpZ2AgYmxvY2sgd2l0aCBzb21lIGRlcGVuZGVuY2llcyBvciBhIHRyaXN0YXRlIG9wdGlvbi4gT3IgcGVyaGFwcyB0aGlzIGFyZWEgZGVhbHMgd2l0aCBob3cgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHNwZWNpZmljIG9wdGlvbiBpcyBjb25maWd1cmVkLiBFaXRoZXIgd2F5LCB0aGlzIHNob3VsZCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbidzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjowOC42NDY3MDIxMjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2NzpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjY4OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjY5OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjcwOlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0aGVscFxcbjEyNzM6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyNzQ6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTI3NTpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjc2OlxcdFxcbjEyNzc6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTI3ODpcXHRcXHRib29sXFxuMTI3OTpcXHRcXG4xMjgwOlxcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcXG4xMjgxOlxcdFxcdGJvb2xcXG4xMjgyOlxcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xcbjEyODM6XFx0XFx0Ym9vbFxcbjEyODQ6XFx0XFxuMTI4NTpcXHRjb25maWcgQVJDSF9VU0VTX1BHX0FSQ0hfMlxcbjEyODY6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjowOC42NDY4NDYxNjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyODE2NDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGNoYWluIGZvcm1pbmcuIGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgVEVTVF9ITU1gIGhhcyBkZXBlbmRlbmNpZXMgb24gYm90aCBgREVWSUNFX1BSSVZBVEVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdGhlIG1vZGlmaWNhdGlvbiB0byBgX19taWdyYXRlX2RldmljZV9wYWdlc2Agd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlbHkgdXNlZCBieSBgdGVzdF9obW0uY2AuXG5cbkdvb2QsIGl0IGxvb2tzIGxpa2UgYHRlc3RfaG1tLmNgICpkb2VzKiBjYWxsIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIHdoaWNoIGluIHR1cm4gY2FsbCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIEV4Y2VsbGVudC4gU28gdGhlIGNoYW5nZSB3aXRoaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgdG8gYHRlc3RfaG1tLmNgLlxuXG5UaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgYG1hcHBpbmcgPSBOVUxMO2AgaXMgYWRkZWQgYWZ0ZXIgYGZvbGlvX2ZyZWVfc3dhcChmb2xpbylgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgZWZmZWN0IG9uIGBtYXBwaW5nYCBoZXJlIGlzIHRoZSBjb3JlIG9mIHdoYXQgbmVlZHMgdG8gYmUgbG9va2VkIGF0LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQgZm9yIHNpZGUgZWZmZWN0cy5cblxuTm93LCB0byB6b29tIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCBJIG5lZWQgdG8gZm9jdXMgb24gYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCAtIHRoZXkncmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBraWNrIG9mZiB0aGUgZXhlY3V0aW9uIHBhdGguIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgY2FsbCBgX19taWdyYXRlX2RldmljZV9wYWdlc2Agc28gdGhhdCBJIGNhbiBsb29rIGF0IHRoZSBvdGhlciBjYWxsaW5nIHBvaW50cyB0byBzZWUgdGhlIGVudGlyZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MTMuMzc1MDEzMzE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwODg5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlX2RldmljZS5jPTk2NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEwOTctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMDk4OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDk5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI0NC0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDU6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNDYtICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Mi0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTM6dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjU0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1NS17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU2OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1Ny19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjU4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1OS1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI2OD12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjkte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MDpcXHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKG1pZ3JhdGUtXFx1MDAzZXNyYywgbWlncmF0ZS1cXHUwMDNlZHN0LCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MS19XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzOTMtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzk0OiAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM5NS0gKi9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ2MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4NS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODY6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXFx1MDAyNnNyY19wZm4sIFxcdTAwMjZkc3RfcGZuLCAxKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODctXFx0aWYgKHNyY19wZm4gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjoxMy41OTExMDYzNTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NzA1MTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuXG5cbioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgRGV2aWNlIFBhZ2UgTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFyZSB0aGUgdHdvIHRvcC1sZXZlbCBleHBvcnRlZCBmdW5jdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIGtub3cgdGhleSdyZSBwYXJ0IG9mIHRoZSBvdmVyYWxsIHBhZ2UgbWlncmF0aW9uIHN5c3RlbS4gVGhlcmUncyBhbHNvIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2Ag4oCTIHRoYXQgbmFtZSBzb3VuZHMgZmFtaWxpYXIsIHNvbWV0aGluZyBzcGVjaWZpYyB0byBjb2hlcmVudCBtZW1vcnkgcmVnaW9ucyBvbiBkZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoYXQgb25lIGFsc28gZXhwb3J0ZWQsIG9yIGlzIGl0IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGUgcHVibGljbHkgYXZhaWxhYmxlIEFQSS4gVGhhdCdsbCBpbmZvcm0gaG93IEkgYXBwcm9hY2ggaW50ZWdyYXRpbmcgd2l0aCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MTYuODM4MTYxNzFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDcwMjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9MTA5OD1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI3LVxcdFxcdFxcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cXG5tbS9taWdyYXRlX2RldmljZS5jOjExMjg6XFx0XFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbid0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTI5LVxcdFxcdFxcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTQ9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wZm5zKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2MC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NjE6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MTcuMDIyODcwNDM0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTMzNTI2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkZWx2ZSBpbnRvIGxpbmUgMTQ2MSBhbmQgY3JhZnQgYSBzdW1tYXJ5IGFzIGlmIHRoZXNlIHdlcmUgKm15KiB0aG91Z2h0cy4gSGVyZSB3ZSBnbzpcblxuKipEaXZpbmcgaW50byB0aGUgTnVhbmNlcyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gbGluZSAxNDYxLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UgYW5kIGV4cGVydGlzZSBpbiB0aGlzIGZpZWxkLCBJIGFudGljaXBhdGUgdGhpcyBzZWdtZW50IGlzIGxpa2VseSBkaXNjdXNzaW5nIFsqKmluc2VydCB5b3VyIHByZWRpY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhlIGNvbnRleHQgb2YgeW91ciBmaWVsZCoqXS4gVGhpcyB3aWxsIHByb2JhYmx5IGludm9sdmUgWyoqbWVudGlvbmluZyB0aGUgYW50aWNpcGF0ZWQga2V5IGNvbmNlcHRzLCBtZXRob2RzLCBvciB0aGVvcmllcyB0aGF0IHlvdSBleHBlY3QgdG8gZW5jb3VudGVyKipdLiBHaXZlbiB0aGUgdHlwaWNhbCBmbG93IG9mIHJlc2VhcmNoIGluIHRoaXMgYXJlYSwgaXQgbWlnaHQgYmUgbGF5aW5nIHRoZSBncm91bmR3b3JrIGZvciBhIGxhcmdlciBwb2ludC4gTXkgaW50ZXJuYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0IHdpbGwgZWxhYm9yYXRlIG9uIHNvbWV0aGluZyBJ4oCZdmUgc2VlbiBiZWZvcmUgYnV0IGl0IHdpbGwgYXBwcm9hY2ggaXQgZnJvbSBhIHVuaXF1ZSBwZXJzcGVjdGl2ZS4gSSdtIGVzcGVjaWFsbHkgZWFnZXIgdG8gc2VlIGlmIGl0IGNoYWxsZW5nZXMgbXkgcHJlLWNvbmNlaXZlZCBub3Rpb25zIG9yIGNvcnJvYm9yYXRlcyBwcmV2aW91cyBmaW5kaW5ncy4gTGV0J3MgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBsaW5lIDE0NjEgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MjAuMTM2MjM1NzM5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjE6XFx0aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTQ2MjpcXHR7XFxuMTQ2MzpcXHRcXHR1bnNpZ25lZCBsb25nIHNyY19wZm4sIGRzdF9wZm4gPSAwO1xcbjE0NjQ6XFx0XFx0c3RydWN0IGZvbGlvICpkZm9saW87XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSk7XFxuMTQ2NzpcXHRcXG4xNDY4OlxcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbjE0Njk6XFx0XFx0c3JjX3BmbiA9IG1pZ3JhdGVfcGZuKGZvbGlvX3Bmbihmb2xpbykpIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcXG4xNDcwOlxcdFxcbjE0NzE6XFx0XFx0LypcXG4xNDcyOlxcdFxcdCAqIFdlIGRvbid0IGhhdmUgYSBWTUEgYW5kIGRvbid0IG5lZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMgdG8gZmluZFxcbjE0NzM6XFx0XFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxcbjE0NzQ6XFx0XFx0ICogZm9saW8gYXMgbWlncmF0ZV92bWFfc2V0dXAoKSB3aWxsIGZhaWwgaWYgYXJncy52bWEgPT0gTlVMTC5cXG4xNDc1OlxcdFxcdCAqL1xcbjE0NzY6XFx0XFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoXFx1MDAyNnNyY19wZm4sIDEsIE5VTEwpO1xcbjE0Nzc6XFx0XFx0aWYgKCEoc3JjX3BmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxcbjE0Nzg6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4xNDc5OlxcdFxcbjE0ODA6XFx0XFx0ZGZvbGlvID0gZm9saW9fYWxsb2MoR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4sIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjoyMC4xMzY0MDI1MDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NDg4NDE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipDb2hlcmVudCBGb2xpbyBNaWdyYXRpb246IEV4cG9ydCBTdGF0dXMgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCBmdW5jdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiSXMgdGhpcyB0aGluZyBldmVuIGV4cG9zZWQgdG8gdGhlIG91dHNpZGUgd29ybGQ/XCIgSW4gdGhpcyBjb250ZXh0LCBcImV4cG9ydGVkXCIgbWVhbnMgaXMgdGhpcyBmdW5jdGlvbiBhdmFpbGFibGUgZm9yIGV4dGVybmFsIG1vZHVsZXMgb3IgY29tcG9uZW50cyB0byBjYWxsLCBvciBpcyBpdCBoaWRkZW4gd2l0aGluIGEgc3BlY2lmaWMgaW50ZXJuYWwgbW9kdWxlPyBLbm93aW5nIHdoZXRoZXIgYSBmdW5jdGlvbiBpcyBleHBvcnRlZCBpcyBmb3VuZGF0aW9uYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIElzIGl0IHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksIG9yIGlzIGl0IHB1cmVseSBmb3IgaW50ZXJuYWwsIHByaXZhdGUgdXNlPyBUaGlzIGltcGFjdHMgaG93IEkgd291bGQgYXBwcm9hY2ggZGVidWdnaW5nLCBleHRlbmRpbmcsIG9yIGV2ZW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkZXNpZ24gYXJvdW5kIGZvbGlvIG1pZ3JhdGlvbi4gS25vd2luZyB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgaW5mb3JtcyBtZSBvbiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjoyMy4yMjEyOTAzNDVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ4MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ4MTpcXHRcXHRpZiAoZGZvbGlvKSB7XFxuMTQ4MjpcXHRcXHRcXHRmb2xpb19sb2NrKGRmb2xpbyk7XFxuMTQ4MzpcXHRcXHRcXHRkc3RfcGZuID0gbWlncmF0ZV9wZm4oZm9saW9fcGZuKGRmb2xpbykpO1xcbjE0ODQ6XFx0XFx0fVxcbjE0ODU6XFx0XFxuMTQ4NjpcXHRcXHRtaWdyYXRlX2RldmljZV9wYWdlcyhcXHUwMDI2c3JjX3BmbiwgXFx1MDAyNmRzdF9wZm4sIDEpO1xcbjE0ODc6XFx0XFx0aWYgKHNyY19wZm4gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKVxcbjE0ODg6XFx0XFx0XFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcXG4xNDg5OlxcdFxcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxuMTQ5MDpcXHRcXG4xNDkxOlxcdFxcdGlmIChzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcXG4xNDkyOlxcdFxcdFxcdHJldHVybiAwO1xcbjE0OTM6XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4xNDk0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6MjMuMjIxNDk0MjE0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI1NTQ1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyB0aGUgVW5kb2N1bWVudGVkOiBBIFF1aWNrIEludmVzdGlnYXRpdmUgUGF0aCoqXG5cbkhtbSwgdGhpcyBmdW5jdGlvbiwgbW9kdWxlLCBvciBwaWVjZSBvZiBkYXRh4oCmIGl0IGFwcGVhcnMgdG8gYmUgKnVuZXhwb3J0ZWQqLiBUaGF0J3MgdGhlIGluaXRpYWwgcmVkIGZsYWcuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBoaWVyYXJjaHkuIExldCdzIGltbWVkaWF0ZWx5IGRpdmUgaW50byBmaW5kaW5nIHRoZSAqKmNhbGxlcnMqKiBvZiB0aGlzIGl0ZW0uIEZvcmdldCBhc3N1bWluZywgSSBuZWVkIHNvbGlkIGV2aWRlbmNlLCBub3QgY29uamVjdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcyBhcHBhcmVudGx5LXVuZXhwb3J0ZWQgcGllY2UgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBhIHBvdGVudGlhbCBwcm9ibGVtLCByZWZhY3RvcmluZyB0YXNrLCBvciBtaXNzaW5nIGxpbmsgaW4gZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjI2LjI3NDA1MTM5NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzMzMwMzAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjMyMT1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jLTIzMzktXFxubW0vZ3VwLmM6MjM0MDpcXHRcXHRcXHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XFxubW0vZ3VwLmMtMjM0MS1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTE1ODQ9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6MTU4NTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC0xNTg2LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMDk4PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExMjctXFx0XFx0XFx0ICogVGhlIG9ubHkgdGltZSB0aGVyZSBpcyBubyB2bWEgaXMgd2hlbiBjYWxsZWQgZnJvbVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEyODpcXHRcXHRcXHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJ3RcXG5tbS9taWdyYXRlX2RldmljZS5jLTExMjktXFx0XFx0XFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ1ND1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYwLSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2MTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjozMC41MDczNjMzNDFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk0NzAxNzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRGV2aWNlIE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGRldmljZSBtaWdyYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNvbWUga2V5IGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgbWlncmF0ZV9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AgY2FsbHMgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCBpbiBgbW0vZ3VwLmNgLCB3aGljaCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBjb3JlIEdVUCBtZWNoYW5pc20uIE5vdywgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhcmUgYWxzbyBvdXQgdGhlcmUsIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IGRldmljZSBkcml2ZXJzIGFuZCB0aGUgYHRlc3RfaG1tLmNgIG1vZHVsZS5cblxuTXkgcHJpbWFyeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9uczogYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIGBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb2AuIFRvIGVuc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSB0byBlbmFibGUgdGhlc2UsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cbmBERVZJQ0VfTUlHUkFUSU9OYCBzZWVtcyBpbXBvcnRhbnQuIEl0IGRlcGVuZHMgb24gYm90aCBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gYFpPTkVfREVWSUNFYCBpcyBhIG11c3QsIGNsZWFybHkuIEFuZCBgVEVTVF9ITU1gIGVuYWJsZXMgdGhlIHRlc3QgZHJpdmVyIHRoYXQgbWFrZXMgY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgVEVTVF9ITU1gIGlzIHN1ZmZpY2llbnQgb24gaXRzIG93bi4gTm93LCBgVEVTVF9ITU1gIGRlcGVuZHMgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gQW5kIGBERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgZW5hYmxpbmcgYFRFU1RfSE1NYCBhdXRvbWF0aWNhbGx5IHB1bGxzIGluIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLlxuXG5TbywgaGVyZSdzIHRoZSBsaXN0IG9mIGNvbmZpZ3MgdGhhdCBJJ2xsIG5lZWQgdG8ga25vdyBhYm91dDpcblxuKiAgIGBURVNUX0hNTWBcbiogICBgREVWSUNFX1BSSVZBVEVgXG4qICAgYFpPTkVfREVWSUNFYFxuKiAgIGBERVZJQ0VfTUlHUkFUSU9OYFxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbiogICBgTUlHUkFUSU9OYFxuXG5JIGp1c3QgZG91YmxlLWNoZWNrZWQgYW5kIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbGAgdGllZCB0byBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYC4gU28sIGVuYWJsaW5nIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgaXQuIFN0aWxsLCBJJ2xsIGtlZXAgaXQgb24gdGhlIGxpc3QgZm9yIGNsYXJpdHkuXG5cbk9oIHdhaXQsIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiBhbmQgc2VsZWN0ZWQgYnkgYENPTVBBQ1RJT05gIHdoaWNoIGRlZmF1bHRzIHRvICd5Jywgc28gaXQgaXMgbGlrZWx5IGVuYWJsZWQgYWxyZWFkeS4gSnVzdCBhbm90aGVyIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjozOC40NTQzODQwMTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjA0MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEVTVF9ITU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzUzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzM1NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1NjozOC44ODY0MjkyNjdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0ODY4NDU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBDb25maWd1cmF0aW9uIFN0YXRlcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiWWVzLCBgVEVTVF9ITU1gIGlzIGNvbmZpcm1lZCB0byBiZSB0cmlzdGF0ZS5cIiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBOb3csIGxldCdzIHBpdm90IHRvIGV4YW1pbmUgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBERVZJQ0VfUFJJVkFURWAgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIGluZmx1ZW5jZWQgYnksIHRoaXMgYFRFU1RfSE1NYCB0cmlzdGF0ZS4gV2hhdCBkb2VzIHRoaXMgcmV2ZWFsIGFib3V0IG92ZXJhbGwgZGV2aWNlIHNlY3VyaXR5IG9yIGJlaGF2aW91cj9cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1Njo0MS42MzUxMTgxMzJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjQ1NjM5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY2LVxcbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMjo1Njo0MS44NjE1ODA5NDVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjIyODA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIERldmljZSBQYXJhbWV0ZXJzKipcblxuT2theSwgc28gSSdtIGNvbmZpcm1pbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGlzIGluZGVlZCBkZWZpbmVkIGFzIGEgYm9vbGVhbiDigJMgbWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxpY2F0aW9ucyBvZiBgWk9ORV9ERVZJQ0VgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG51YW5jZSBpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgREVWSUNFX1BSSVZBVEVgLCBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBXaGF0IGFyZSB0aGUgYWxsb3dlZCB2YWx1ZXMgb2YgYFpPTkVfREVWSUNFYCwgYW5kIGluIHdoYXQgY29udGV4dHMgaXMgYFpPTkVfREVWSUNFYCBldmFsdWF0ZWQ/IFxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjQ1LjIyMzgxMjgzNloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTA2Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6NDUuMzc2MzI0NjIzWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjMyMzMzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBEZXZpY2UgU3RhdGVzKipcblxuQWxyaWdodCwgc28gSSdtIGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBhc3N1bXB0aW9uOiBgWk9ORV9ERVZJQ0VgIGlzIGluZGVlZCBhIGJvb2xlYW4gdmFsdWUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaG93IEkgaW50ZXJwcmV0IHRoZSBzdGF0ZSBvZiB0aGlzIHN5c3RlbSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGRldmljZS1yZWxhdGVkIHNldHRpbmdzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZsYWcgYW5kIHRoZSBicm9hZGVyIG1pZ3JhdGlvbiBwcm9jZWR1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIGV4cGVjdC4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzIHRvIGV2YWx1YXRpbmcgdGhlIGBERVZJQ0VfTUlHUkFUSU9OYCBzZXR0aW5nIG5leHQuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gc2V0dGluZ3MgaXMgcHJvYmFibHkgaW1wb3J0YW50IGZvciBob3cgdGhpcyB3aG9sZSB0aGluZyB3b3Jrcy4gSXQgZGljdGF0ZXMgaG93IHRoZSB3aG9sZSBzeXN0ZW0gcmVzcG9uZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6NDguMTk5NTYwNTgyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTI1NDcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njk2PWNvbmZpZyBNSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjk5LVxcbm1tL0tjb25maWc6NzAwOmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy03MDEtXFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAyOjU2OjQ4LjI5ODgyMDE1OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjUzMzM5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIERldmljZSBNaWdyYXRpb24gQ29kZSBhbmQgVGVzdCBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGluZGVlZCBhIGRlZl9ib29sIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFjdGl2YXRlIGl0LiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWdzIEkgbmVlZCB0byBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgVEVTVF9ITU1gLCBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdsbCBtYWtlIGEgbm90ZSB0byBkb3VibGUtY2hlY2sgdGhvc2UuXG5cbkRpZ2dpbmcgZGVlcGVyLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoaXMgaXMgdGhlIGNydXggb2YgaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGFjdHVhbGx5IHdvcmtzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjbGVhcmluZyBhIGZvbGlvJ3MgbWFwcGluZyBhZnRlciBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgc3dhcCBjYWNoZS5cblxuVG8gdGVzdCB0aGlzIGNoYW5nZSBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGlzIGNvcmUgZnVuY3Rpb24gaXMgcmVhY2hlZC4gTG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBoYXZlIHRocmVlIGtleSBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nOiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1dGlsaXplZCBieSBkZXZpY2UgZHJpdmVycywgc28gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBkaWZmZXJlbnQgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9ucyBjb3VsZCBpbnRlcmFjdCB3aXRoIHRoZXNlIGNhbGxzIGFuZCB0aGUgYHRlc3RfaG1tYCBtb2R1bGUuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzLiBJJ2xsIG5lZWQgdG8gY29uc3RydWN0IHNvbWUgdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIGFsbCBvZiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHN0cmVzcyB0aGUgZm9saW8gY2xlYXJpbmcgbG9naWMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy5cblxuSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzNCwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDI6NTY6NTUuNTUyMTY0NDk5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMTU1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9wYWdlc1wiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCB3aGljaCBpcyBhIGNvcmUgZnVuY3Rpb24gZm9yIG1pZ3JhdGluZyBkZXZpY2UgbWVtb3J5LiBJdCBhZGRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY2xlYXIgdGhlIG1hcHBpbmcgb2YgYSBmb2xpbyBhZnRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV92bWFfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvYCwgd2hpY2ggYXJlIHVzZWQgYnkgZGV2aWNlIGRyaXZlcnMgYW5kIHRoZSBgdGVzdF9obW1gIG1vZHVsZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgZW50cnkgcG9pbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AsIHdoaWNoIGlzIGEgY29yZSBmdW5jdGlvbiBmb3IgbWlncmF0aW5nIGRldmljZSBtZW1vcnkuIEl0IGFkZHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjbGVhciB0aGUgbWFwcGluZyBvZiBhIGZvbGlvIGFmdGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW9gLCB3aGljaCBhcmUgdXNlZCBieSBkZXZpY2UgZHJpdmVycyBhbmQgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowvrjzp[1] Phase: Succeeded StartedAt: 2026-07-26 02:57:07 +0000 UTC FinishedAt: 2026-07-26 02:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 02:57:07 +0000 UTC FinishedAt: 2026-07-26 02:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2] Phase: Succeeded StartedAt: 2026-07-26 02:57:07 +0000 UTC FinishedAt: 2026-07-26 07:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 02:57:07 +0000 UTC FinishedAt: 2026-07-26 07:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 02:57:07 +0000 UTC FinishedAt: 2026-07-26 02:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 02:57:07 +0000 UTC FinishedAt: 2026-07-26 02:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"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-workflowvrjzp/series-workflowvrjzp-convert-artifact-1530392155/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 02:57:29 +0000 UTC FinishedAt: 2026-07-26 03:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 02:57:29 +0000 UTC FinishedAt: 2026-07-26 03:32:48 +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:*4c97108d-e86c-477f-be16-eb49bdd6628c,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-workflowvrjzp/series-workflowvrjzp-convert-artifact-1530392155/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": "c03a91ce-78d9-4c47-987d-4bdc10f67649", "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-workflowvrjzp/series-workflowvrjzp-build-action-2703207321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 02:57:29 +0000 UTC FinishedAt: 2026-07-26 03:32:28 +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:*4c97108d-e86c-477f-be16-eb49bdd6628c,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-workflowvrjzp/series-workflowvrjzp-convert-artifact-1530392155/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": "c03a91ce-78d9-4c47-987d-4bdc10f67649", "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-workflowvrjzp/series-workflowvrjzp-build-action-2703207321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:32:48 +0000 UTC FinishedAt: 2026-07-26 03:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:32:48 +0000 UTC FinishedAt: 2026-07-26 03:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:32:48 +0000 UTC FinishedAt: 2026-07-26 03:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:32:48 +0000 UTC FinishedAt: 2026-07-26 03:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-workflowvrjzp/series-workflowvrjzp-convert-artifact-3810212530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:32:58 +0000 UTC FinishedAt: 2026-07-26 03:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:32:58 +0000 UTC FinishedAt: 2026-07-26 03:34:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c03a91ce-78d9-4c47-987d-4bdc10f67649,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-workflowvrjzp/series-workflowvrjzp-build-action-2703207321/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-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:34:58 +0000 UTC FinishedAt: 2026-07-26 03:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:34:58 +0000 UTC FinishedAt: 2026-07-26 03:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:34:58 +0000 UTC FinishedAt: 2026-07-26 04:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:34:58 +0000 UTC FinishedAt: 2026-07-26 04:13:35 +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:*4c97108d-e86c-477f-be16-eb49bdd6628c,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-workflowvrjzp/series-workflowvrjzp-convert-artifact-3810212530/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": "0b46be36-066a-4f01-8a6a-6d2ee2bc7572", "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-workflowvrjzp/series-workflowvrjzp-build-action-156773446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 03:34:58 +0000 UTC FinishedAt: 2026-07-26 04:13:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4c97108d-e86c-477f-be16-eb49bdd6628c,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-workflowvrjzp/series-workflowvrjzp-convert-artifact-3810212530/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": "0b46be36-066a-4f01-8a6a-6d2ee2bc7572", "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-workflowvrjzp/series-workflowvrjzp-build-action-156773446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:13:35 +0000 UTC FinishedAt: 2026-07-26 04:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:13:35 +0000 UTC FinishedAt: 2026-07-26 04:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:13:36 +0000 UTC FinishedAt: 2026-07-26 04:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:13:36 +0000 UTC FinishedAt: 2026-07-26 04:15:29 +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:*0b46be36-066a-4f01-8a6a-6d2ee2bc7572,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-workflowvrjzp/series-workflowvrjzp-build-action-156773446/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-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 07:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 07:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},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:*c03a91ce-78d9-4c47-987d-4bdc10f67649,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b46be36-066a-4f01-8a6a-6d2ee2bc7572,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-workflowvrjzp/series-workflowvrjzp-build-action-2703207321/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-workflowvrjzp/series-workflowvrjzp-build-action-156773446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 04:15:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 04:15:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},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-workflowvrjzp/series-workflowvrjzp-convert-artifact-1712825351/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 04:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 04:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:44 +0000 UTC FinishedAt: 2026-07-26 04:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:56 +0000 UTC FinishedAt: 2026-07-26 07:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvrjzp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_pages","migrate_vma_pages","migrate_device_coherent_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b95f03f04d475aa6719d15a636ddf32222d55657","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"d65723f6-d03b-428f-a744-5e5391caa093","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-07-26 04:15:56 +0000 UTC FinishedAt: 2026-07-26 07:18:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c03a91ce-78d9-4c47-987d-4bdc10f67649,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b46be36-066a-4f01-8a6a-6d2ee2bc7572,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-workflowvrjzp/series-workflowvrjzp-build-action-2703207321/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-workflowvrjzp/series-workflowvrjzp-build-action-156773446/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-workflowvrjzp/series-workflowvrjzp-convert-artifact-1712825351/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,}