Name: series-workflowtlv4l Phase: Succeeded StartedAt: 2026-08-03 03:46:54 +0000 UTC FinishedAt: 2026-08-03 08:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[0] Phase: Succeeded StartedAt: 2026-08-03 03:46:54 +0000 UTC FinishedAt: 2026-08-03 04:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 03:46:54 +0000 UTC FinishedAt: 2026-08-03 04:21:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a47d7a8a12f194ef5593cc0e7756de19def7761", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a47d7a8a12f194ef5593cc0e7756de19def7761", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG" ], "series_id": "1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmVjYTk4ZDQ5ZGZlMjIxMjAxYzhlYWFjODIxNzQ4NmZjYjUzNTUyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDQ6MjA6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNTZiMjQ0NTUyZjEzOS4uYmJiMjg5YmEwOWQzZiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4NzMsMTggJiM0Mzs0ODczLDE5IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRcdFx0Z290byB1bmxvY2s7XG4gXG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbiYjMzk7dCBiZVxuJiM0MztcdFx0XHQgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJiMzOTt0IGJlXG4gXHRcdFx0ICogZnJlZWQuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKHRyeWxvY2tfcGFnZSh2bWYtXHUwMDNlcGFnZSkpIHtcbiYjNDM7XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbiYjNDM7XHRcdFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4gXHRcdFx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xuIFxuLVx0XHRcdFx0Z2V0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuIFx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcbiBcdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuLVx0XHRcdFx0dW5sb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdFx0cHV0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cHRlX3VubWFwKHZtZi1cdTAwM2VwdGUpO1xuIFx0XHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHBhZ2Ugb3BlcmF0aW9ucyB0byBmb2xpbyBvcGVyYXRpb25zIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaGFuZGxpbmcgcGF0aCBvZiBkb19zd2FwX3BhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGlzIG1pZ3JhdGVkIHRvIFJBTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlY2E5OGQ0OWRmZTIyMTIwMWM4ZWFhYzgyMTc0ODZmY2I1MzU1MmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDA0OjIwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA1NmIyNDQ1NTJmMTM5Li5iYmIyODliYTA5ZDNmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDg3MywxOCAmIzQzOzQ4NzMsMTkgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCQkJZ290byB1bmxvY2s7CiAKIAkJCS8qCi0JCQkgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbiYjMzk7dCBiZQomIzQzOwkJCSAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4mIzM5O3QgYmUKIAkJCSAqIGZyZWVkLgogCQkJICovCi0JCQlpZiAodHJ5bG9ja19wYWdlKHZtZi0mZ3Q7cGFnZSkpIHsKJiM0MzsJCQlmb2xpbyA9IHBhZ2VfZm9saW8odm1mLSZndDtwYWdlKTsKJiM0MzsJCQlpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKIAkJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwogCi0JCQkJZ2V0X3BhZ2Uodm1mLSZndDtwYWdlKTsKJiM0MzsJCQkJZm9saW9fZ2V0KGZvbGlvKTsKIAkJCQlwdGVfdW5tYXBfdW5sb2NrKHZtZi0mZ3Q7cHRlLCB2bWYtJmd0O3B0bCk7CiAJCQkJcGdtYXAgPSBwYWdlX3BnbWFwKHZtZi0mZ3Q7cGFnZSk7CiAJCQkJcmV0ID0gcGdtYXAtJmd0O29wcy0mZ3Q7bWlncmF0ZV90b19yYW0odm1mKTsKLQkJCQl1bmxvY2tfcGFnZSh2bWYtJmd0O3BhZ2UpOwotCQkJCXB1dF9wYWdlKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CQkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQl9IGVsc2UgewogCQkJCXB0ZV91bm1hcCh2bWYtJmd0O3B0ZSk7CiAJCQkJc29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi0mZ3Q7cHRsKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbW0vbWVtb3J5LmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbW9yeS5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgY29udmVydGluZyBgdHJ5bG9ja19wYWdlKHZtZi0mZ3Q7cGFnZSlgIHRvIGBmb2xpbyA9IHBhZ2VfZm9saW8odm1mLSZndDtwYWdlKTsgZm9saW9fdHJ5bG9jayhmb2xpbylgLiBBbmQgaXQmIzM5O3MgZG9pbmcgdGhlIHNhbWUgZm9yIGBnZXRfcGFnZWAsIGB1bmxvY2tfcGFnZWAsIGFuZCBgcHV0X3BhZ2VgLCBzd2FwcGluZyB0aGVtIHdpdGggdGhlaXIgZm9saW8gY291bnRlcnBhcnRzOiBgZm9saW9fZ2V0YCwgYGZvbGlvX3VubG9ja2AsIGFuZCBgZm9saW9fcHV0YCwgcmVzcGVjdGl2ZWx5LiBUaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYGRvX3N3YXBfcGFnZWAuIEZ1bmN0aW9uYWxseSwgdGhpcyBzaG91bGQgYmUgbW9zdGx5IGEgY29udmVyc2lvbiBmcm9tIHRoZSBvbGRlciBgcGFnZWAgc3RydWN0dXJlIHRvIGBmb2xpb2AsIHJpZ2h0PyBObyBjaGFuZ2UgaW4gYmVoYXZpb3VyLCBqdXN0IGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uLgoKQnV0IHdhaXTigKYgaXMgaXQgcmVhbGx5ICpqdXN0KiBhIHJlZmFjdG9yaW5nPyBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIHVzZSBvZiBgZm9saW9fdHJ5bG9ja2AgaW5zdGVhZCBvZiBgdHJ5bG9ja19wYWdlYCwgYW5kIHRoZSBzYW1lIHdpdGggYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuLi4gVGhhdCBjb3VsZCBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gaG93IGBmb2xpb2AgYmVoYXZlcy4gRXNwZWNpYWxseSBjb25zaWRlcmluZyBhIGZvbGlvIGlzIG9mdGVuIGFuIGFnZ3JlZ2F0aW9uIG9mIHBhZ2VzLgoKSGFuZyBvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBzd2FwIG9wZXJhdGlvbnMsIGFuZCBgZG9fc3dhcF9wYWdlYCBpcyAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGlzIGNoYW5nZXMgdGhpbmdzLiBJIHNob3VsZCByZWFsbHkgY2hlY2sgdGhlIGFjdHVhbCBjb2RlIGZvciBgZG9fc3dhcF9wYWdlYCBpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9OTQyPXN0YXRpYyB2b2lkIHJlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy05NTYtXG5tbS9tZW1vcnkuYzo5NTc6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL21lbW9yeS5jLTk1OC1cdGlmIChwdGVfc3dwX3VmZmQob3JpZ19wdGUpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcbi0tXG5tbS9tZW1vcnkuYz0zNTk5PWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtMzYwOC0gKiBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaCBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZFxubW0vbWVtb3J5LmM6MzYwOTogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXG5tbS9tZW1vcnkuYy0zNjEwLSAqIHByb2NlZWRpbmcgKGJ1dCBkb193cF9wYWdlIGlzIG9ubHkgY2FsbGVkIGFmdGVyIGFscmVhZHkgbWFraW5nIHN1Y2ggYSBjaGVjaztcbi0tXG5tbS9tZW1vcnkuYz00NzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3ODYtXHQvKlxubW0vbWVtb3J5LmM6NDc4NzpcdCAqIEZvciBkb19zd2FwX3BhZ2UsIGZpbmQgdGhlIGhpZ2hlc3Qgb3JkZXIgd2hlcmUgdGhlIGFsaWduZWQgcmFuZ2UgaXNcbm1tL21lbW9yeS5jLTQ3ODgtXHQgKiBjb21wbGV0ZWx5IHN3YXAgZW50cmllcyB3aXRoIGNvbnRpZ3VvdXMgc3dhcCBvZmZzZXRzLlxuLS1cbm1tL21lbW9yeS5jPTQ4MTA9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDgyNy0gKi9cbm1tL21lbW9yeS5jOjQ4Mjg6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODI5LXtcbi0tXG5tbS9tZW1vcnkuYy01MTcyLVx0c2V0X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwLCBwdGUsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeS5jOjUxNzM6XHRhcmNoX2RvX3N3YXBfcGFnZV9ucih2bWEtXHUwMDNldm1fbW0sIHZtYSwgYWRkcmVzcyxcbm1tL21lbW9yeS5jLTUxNzQtXHRcdFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1vcnkuYz02NDYyPXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjUwOC1cdGlmICghcHRlX3ByZXNlbnQodm1mLVx1MDAzZW9yaWdfcHRlKSlcbm1tL21lbW9yeS5jOjY1MDk6XHRcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcbm1tL21lbW9yeS5jLTY1MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYGRvX3N3YXBfcGFnZWAgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyByZWxhdGVkIHRvIHN3YXBwZWQtb3V0IHBhZ2VzLiBUaGUga2V5IHBhcnQgSSYjMzk7bSBmb2N1c2luZyBvbiBpcyB0aGUgY2hhbmdlIGluIGhvdyBkZXZpY2UgbWVtb3J5IHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGNhbGwgdG8gYHBnbWFwLSZndDtvcHMtJmd0O21pZ3JhdGVfdG9fcmFtKHZtZilgLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZS4gSSBzZWUgaXQmIzM5O3MgY29udmVydGluZyBmcm9tIHVzaW5nIGB0cnlsb2NrX3BhZ2VgIGFuZCBgZ2V0X3BhZ2VgIG9uIGEgcGFnZSBkaXJlY3RseSB0byB1c2luZyBgZm9saW9fdHJ5bG9ja2AgYW5kIGBmb2xpb19nZXRgIG9uIGEgZm9saW8uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQsIGVzc2VudGlhbGx5IGEgY29udmVyc2lvbiBmcm9tIG9sZGVyIHBhZ2UtYmFzZWQgY29kZSB0byBmb2xpby1iYXNlZCBjb2RlLiBGdW5jdGlvbmFsLCBidXQgdGhpcyBpcyBoYXBwZW5pbmcgaW4gYGRvX3N3YXBfcGFnZWAsIHNvIGl0IHdhcnJhbnRzIGNhcmVmdWwgZnV6emluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byB0ZXN0LgoKTm93LCBteSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIG1vZGlmaWVkIGZ1bmN0aW9uIG5lZWRzIHNwZWNpYWwgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLiBUaGUgcHJvbXB0IGlzOiAmIzM0O0V4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiYjMzQ7IEhtbSwgYGRvX3N3YXBfcGFnZWAgaXMgYSAqdmVyeSogaG90IHBhdGguIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgSSBrbm93IGl0JiMzOTtzIGhpdCBhbGwgdGhlIHRpbWUuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHRlbGxzIG1lICpub3QqIHRvIGluY2x1ZGUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgZnV6emluZyBkaXN0cmlidXRpb24gd291bGQgYmUgc2tld2VkLCBzbyBJIHNob3VsZCBsZWF2ZSB0aGUgYEZvY3VzU3ltYm9sc2AgZW1wdHkgb3IgaXMgaXQgbmVlZGVkPyBOby4KClRoZSBwYXRjaCBzZWVtcyB0byAqb25seSogbW9kaWZ5IGBkb19zd2FwX3BhZ2VgLiBTbywgSSYjMzk7bSB0aGlua2luZywgZG8gSSBsaXN0IGBkb19zd2FwX3BhZ2VgIG9yIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5PyBXZWxsLCBpZiB0aGUgaW50ZW50IGlzIHRvIGF2b2lkIHNrZXdpbmcsIHRoZW4gSSBzaG91bGQgbm90IGxpc3QgYGRvX3N3YXBfcGFnZWAuIEkgc2hvdWxkIGJlIG1vcmUgY29uY2VybmVkIHdpdGggdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFyb3VuZCB0aGlzIGNvZGU/IExldCBtZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV90b19yYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz00ODI4PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4NTgtXHRcdFx0XHQvKlxubW0vbWVtb3J5LmM6NDg1OTpcdFx0XHRcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxubW0vbWVtb3J5LmMtNDg2MC1cdFx0XHRcdCAqIHVuZGVyIFZNQSBsb2NrLlxuLS1cbm1tL21lbW9yeS5jLTQ4ODUtXHRcdFx0XHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVx1MDAzZXBhZ2UpO1xubW0vbWVtb3J5LmM6NDg4NjpcdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xubW0vbWVtb3J5LmMtNDg4Ny1cdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBtaWdyYXRlX3RvX3JhbWAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYHBnbWFwLSZndDtvcHMtJmd0O21pZ3JhdGVfdG9fcmFtYCBmdW5jdGlvbmFsaXR5LiBBIHF1aWNrIGxvb2sgYXJvdW5kIHRlbGxzIG1lIHRoYXQgYHN0cnVjdCBkZXZfcGFnZW1hcGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oYC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgdGhyb3VnaCB0aGF0IGFuZCBwcm9iYWJseSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBtaWdyYXRpb24gY2FwYWJpbGl0eS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV90b19yYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC04OC1cdCAqL1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjg5Olx0dm1fZmF1bHRfdCAoKm1pZ3JhdGVfdG9fcmFtKShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIFNldHRpbmdzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGVpdGhlciBgREVWSUNFX1BSSVZBVEVgIG9yIGBaT05FX0RFVklDRWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgdGhlbiBsb29rIGF0IGFueSBpbmNsdWRlIGZpbGVzIG9yIG1vZHVsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBzaW5nbGUgc2V0dGluZyBtaWdodCBjb250cm9sIGJvdGgsIG9yIHRoZXJlIG1pZ2h0IGJlIGluZGVwZW5kZW50IHNldHRpbmdzLiBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFzIHdlbGw7IHBlcmhhcHMgdGhlc2UgYXJlIGVuYWJsZWQgYmFzZWQgb24gc29tZSBoYXJkd2FyZSBvciBlbnZpcm9ubWVudCBkZXRlY3Rpb24uIFRoZSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB0aGVzZSBkZXZpY2Ugc3RhdGVzLiBJJiMzOTttIGdvaW5nIHRvIGRvY3VtZW50IHRoZSBmaW5kaW5ncyB0aG9yb3VnaGx5LCBhcyBhbHdheXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02ODY9Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWc6Njg3Olx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxubW0vS2NvbmZpZy02ODgtXG4tLVxubW0vS2NvbmZpZz0xMDA2PWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xubW0vS2NvbmZpZy0xMDA3LVx0ZGVmX2Jvb2wgKEhVR0VUTEJfUEFHRSBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcbm1tL0tjb25maWc6MTAwODpcdFx0IChaT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbm1tL0tjb25maWctMTAwOS1cbi0tXG5tbS9LY29uZmlnPTEyMTc9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjEtXG5tbS9LY29uZmlnOjEyMjI6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjMtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEyNTI9Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTMtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xubW0vS2NvbmZpZzoxMjU0Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjU1LVx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBEZXZpY2UtU3BlY2lmaWMgU3dhcCBMb2dpYyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1pPTkVfREVWSUNFYCBhbmQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyBkZXZpY2Utc3BlY2lmaWMgcGFnZXMuIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYGRvX3N3YXBfcGFnZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSBwYWdlIHN3YXBwaW5nIHByb2Nlc3MsIGFuZCBpdCBzZWVtcyB0byBoYXZlIHNvbWUgbG9naWMgdGllZCB0byB0aGVzZSBkZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIGBpc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShlbnRyeSlgIGp1bXBzIG91dCBhdCBtZSwgYXMgaXTigJlzIGxpa2VseSBhIGd1YXJkIGZvciBkZXZpY2UtcHJpdmF0ZSBwYWdlIG1pZ3JhdGlvbi4gTm93LCBJIHdhbnQgdG8gdmVyaWZ5IGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGBkb19zd2FwX3BhZ2VgIGFyb3VuZCBsaW5lIDQ4NzMgdG8gaW52ZXN0aWdhdGUgdGhlIGBtaWdyYXRlX3RvX3JhbWAgcG9ydGlvbi4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBkZXZpY2UtcHJpdmF0ZSBwYWdlcyBhcmUgdHJlYXRlZCBkdXJpbmcgc3dhcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4NDA6XHRcdGludCBucl9wYWdlcztcbjQ4NDE6XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG40ODQyOlx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG40ODQzOlx0XHRwdGVfdCAqcHRlcDtcbjQ4NDQ6XHRcbjQ4NDU6XHRcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcbjQ4NDY6XHRcdFx0Z290byBvdXQ7XG40ODQ3Olx0XG40ODQ4Olx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cdTAwM2VvcmlnX3B0ZSk7XG40ODQ5Olx0XHRpZiAodW5saWtlbHkoIXNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xuNDg1MDpcdFx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSkge1xuNDg1MTpcdFx0XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbjQ4NTI6XHRcdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyk7XG40ODUzOlx0XHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbjQ4NTQ6XHRcdFx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuNDg1NTpcdFx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG40ODU2Olx0XHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG40ODU3Olx0XHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuNDg1ODpcdFx0XHRcdFx0LypcbjQ4NTk6XHRcdFx0XHRcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxuNDg2MDpcdFx0XHRcdFx0ICogdW5kZXIgVk1BIGxvY2suXG40ODYxOlx0XHRcdFx0XHQgKi9cbjQ4NjI6XHRcdFx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuNDg2MzpcdFx0XHRcdFx0cmV0ID0gVk1fRkFVTFRfUkVUUlk7XG40ODY0Olx0XHRcdFx0XHRnb3RvIG91dDtcbjQ4NjU6XHRcdFx0XHR9XG40ODY2Olx0XG40ODY3Olx0XHRcdFx0dm1mLVx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbjQ4Njg6XHRcdFx0XHR2bWYtXHUwMDNlcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VwbWQsXG40ODY5Olx0XHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBcdTAwMjZ2bWYtXHUwMDNlcHRsKTtcbjQ4NzA6XHRcdFx0XHRpZiAodW5saWtlbHkoIXZtZi1cdTAwM2VwdGUgfHxcbjQ4NzE6XHRcdFx0XHRcdCAgICAgIXB0ZV9zYW1lKHB0ZXBfZ2V0KHZtZi1cdTAwM2VwdGUpLFxuNDg3MjpcdFx0XHRcdFx0XHRcdFx0dm1mLVx1MDAzZW9yaWdfcHRlKSkpXG40ODczOlx0XHRcdFx0XHRnb3RvIHVubG9jaztcbjQ4NzQ6XHRcbjQ4NzU6XHRcdFx0XHQvKlxuNDg3NjpcdFx0XHRcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4mIzM5O3QgYmVcbjQ4Nzc6XHRcdFx0XHQgKiBmcmVlZC5cbjQ4Nzg6XHRcdFx0XHQgKi9cbjQ4Nzk6XHRcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuNDg4MDpcdFx0XHRcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuNDg4MTpcdFx0XHRcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbjQ4ODI6XHRcbjQ4ODM6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG40ODg0Olx0XHRcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuNDg4NTpcdFx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcbjQ4ODY6XHRcdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuNDg4NzpcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjQ4ODg6XHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG40ODg5Olx0XHRcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBDb25kaXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiB0aGF0IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIGNvbmRpdGlvbi4gSXQmIzM5O3MgdGhlIGNydXggb2YgdGhpcyBsb2dpYywgdGhlIGdhdGVrZWVwZXIuIE15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hhdCBleGFjdGx5IGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZG9pbmc/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGNvbXBsZXRlbHkuCgpUaGUgbmFtZSBzY3JlYW1zICYjMzQ7cHJpdmFjeSYjMzQ7IG9yICYjMzQ7YWNjZXNzIGNvbnRyb2wmIzM0OyBmb3IgYSBkZXZpY2UsIGJ1dCBJIG5lZWQgdGhlIGRldGFpbHMuIElzIGl0IGEgbWFjcm8/IEEgZnVuY3Rpb24gY2FsbD8gSSBuZWVkIHRvIGdldCB0byB0aGUgZGVmaW5pdGlvbiwgYW5kIGZpbmQgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGhlcmUuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCBzZWUgaG93IHRoZSBgZW50cnlgIHBhcmFtZXRlciBpcyBiZWluZyB1c2VkLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgZ3Jhc3AgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXHRcdFx0XHRwcmVzZW50ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3MC0gKiB3cml0YWJsZSBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4MS0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4OC17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDY6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM3LVx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzOS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcbi0tXG5tbS9obW0uYz0yNDI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yNzMtXHRcdCAqL1xubW0vaG1tLmM6Mjc0Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMjc1LVx0XHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0yNzctXHRcdFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcbm1tL2htbS5jOjI3ODpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMjc5LVx0XHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMjkxLVxubW0vaG1tLmM6MjkyOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMjkzLVx0XHRcdGdvdG8gZmF1bHQ7XG4tLVxubW0vaG1tLmM9MzQyPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYy0zNTItXG5tbS9obW0uYzozNTM6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMzU0LVx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTM2MC1cbm1tL2htbS5jOjM2MTpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTM2Mi1cdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0zNzktXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbm1tL2htbS5jOjM4MDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTM4MS1cdFx0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4NTI9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4NzEtXHRcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxODcyOlx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3My1cdFx0Lypcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4NzYtXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxODc3Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4NzgtXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI2NDQ9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjY2NS1cdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNjY2Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2Ny1cdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMxNDE9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMjM0LVxubW0vaHVnZV9tZW1vcnkuYzozMjM1Olx0XHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzIzNi1cdFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTUwMDc9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMzYtXG5tbS9odWdlX21lbW9yeS5jOjUwMzc6XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzOC1cdFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XG4tLVxubW0vbWVtb3J5LmM9MTAwMz1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTEwNDUtXHRcdH1cbm1tL21lbW9yeS5jOjEwNDY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtMTA0Ny1cdFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLS1cbm1tL21lbW9yeS5jLTEwNzAtXHRcdCAqL1xubW0vbWVtb3J5LmM6MTA3MTpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL21lbW9yeS5jLTEwNzItXHRcdCAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcbi0tXG5tbS9tZW1vcnkuYz0xODEzPXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODIyLVx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5tbS9tZW1vcnkuYzoxODIzOlx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxubW0vbWVtb3J5LmMtMTgyNC1cdCAgICBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xuLS1cbm1tL21lbW9yeS5jPTQ4Mjg9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDg1NS1cdFx0XHRyZXQgPSByZW1vdmVfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeSh2bWYpO1xubW0vbWVtb3J5LmM6NDg1NjpcdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTQ4NTctXHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE2OS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcwOlx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzEtXHRcdCAgICAhKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkpIHtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE4MS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTgyOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODMtXHRcdFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTI0NT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk5LVx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzAwOlx0XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMDEtXHRcdFx0XHRnb3RvIG5leHQ7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzMtXHRcdFx0XHRcdE1JR1JBVEVfUEZOX01JR1JBVEU7XG5tbS9taWdyYXRlX2RldmljZS5jOjMzNDpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzUtXHRcdFx0XHRtcGZuIHw9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbXByb3RlY3QuYy0yMzYtXHRcdFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcbm1tL21wcm90ZWN0LmM6MjM3Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL21wcm90ZWN0LmMtMjM4LVx0XHQvKlxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xOTM9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5NC17XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk1Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5Ni1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzAtXHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6NzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXHRcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMC1cdFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTMxOlx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9ybWFwLmM9MjQ2Nz1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI2NTUtXG5tbS9ybWFwLmM6MjY1NjpcdFx0XHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL3JtYXAuYy0yNjU3LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKgoKT2theSwgc28gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYOKApiByaWdodCwgdGhhdCYjMzk7cyBkZWZpbmVkIGlubGluZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc291cmNlIGluIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IGhlYWRlciBmaWxlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZyBhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGFib3V0IGl0cyByb2xlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdCAqIHdyaXRhYmxlIGVudHJ5P1xuIDI3MTpcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbiAyNzI6XHQgKlxuIDI3MzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBkZXZpY2UgcHJpdmF0ZSB3cml0YWJsZSBlbnRyeSwgb3RoZXJ3aXNlXG4gMjc0Olx0ICogZmFsc2UuXG4gMjc1Olx0ICovXG4gMjc2Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjc3Olx0e1xuIDI3ODpcdFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xuIDI3OTpcdH1cbiAyODA6XHRcbiAyODE6XHQvKipcbiAyODI6XHQgKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG4gMjgzOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDI4NDpcdCAqXG4gMjg1Olx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXG4gMjg2Olx0ICovXG4gMjg3Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuIDI5MDpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbiAyOTE6XHRcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiAyOTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjkzOlx0XHRkZWZhdWx0OlxuIDI5NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjk1Olx0XHR9XG4gMjk2Olx0fVxuIDI5NzpcdFxuIDI5ODpcdC8qKlxuIDI5OTpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XG4gMzAwOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDMwMTpcdCAqXG4gMzAyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAzMDM6XHQgKi9cbiAzMDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxuIDMwNTpcdHtcbiAzMDY6XHRcdHJldHVybiBzb2Z0bGVhZl90eXBlKGVudHJ5KSA9PSBTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFO1xuIDMwNzpcdH1cbiAzMDg6XHRcbiAzMDk6XHQvKipcbiAzMTA6XHQgKiBzb2Z0bGVhZl9pc19od3BvaXNvbigpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgaGFyZHdhcmUgcG9pc29uIGVudHJ5P1xuIDMxMTpcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbiAzMTI6XHQgKlxuIDMxMzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBoYXJkd2FyZSBwb2lzb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAzMTQ6XHQgKi9cbiAzMTU6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfaHdwb2lzb24oc29mdGxlYWZfdCBlbnRyeSlcbiAzMTY6XHR7XG4gMzE3Olx0XHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfSFdQT0lTT047XG4gMzE4Olx0fVxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipWZXJpZnlpbmcgdGhlIERldmljZSBQcml2YXRlIE1lbW9yeSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGlzIHRoZSBmbGFnIHRoYXQgb3N0ZW5zaWJseSBlbmFibGVzIGRldmljZSBwcml2YXRlIG1lbW9yeS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZXNwb25zaWJsZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGluZGVlZCB0aGUgY2FzZS4gV2hpbGUgdGhlIG5hbWUgaXMgc3VnZ2VzdGl2ZSwgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRvIGRvdWJsZS1jaGVjay4gSSYjMzk7bGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgdG8gZW5zdXJlIHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBjb3JyZWN0bHkgbGlua2VkIHRvIHRoZSBkZXNpcmVkIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZS4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uLCByZWxhdGVkIHNvdXJjZSBjb2RlLCBhbmQgYW55IGV4aXN0aW5nIGRlc2lnbiBzcGVjaWZpY2F0aW9ucyB0byBjb25jbHVzaXZlbHkgdmVyaWZ5IHRoYXQgZW5hYmxpbmcgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGRlZmluaXRpdmUgbWV0aG9kIHRvIGFjdGl2YXRlIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgc3BhY2UuIEEgbWlzY29uZmlndXJhdGlvbiBoZXJlIHdvdWxkIGJlIGEgc2VyaW91cyBwcm9ibGVtIGxhdGVyIG9uIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjI9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMjMxLVx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbm1tL0tjb25maWc6MTIzMjpcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxubW0vS2NvbmZpZy0xMjMzLVxuLS1cbm1tL0tjb25maWc9MTI0OT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjUxLVxubW0vS2NvbmZpZzoxMjUyOmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjUzLVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgREVWSUNFX1BSSVZBVEVgIGlzIGNvbmZpcm1lZCBhcyB0aGUgY29uZmlnIEkmIzM5O20gd29ya2luZyB3aXRoLCB0aGF0JiMzOTtzIHN0ZXAgb25lLiBOb3csIHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZW1lbWJlciBgREVWSUNFX1BSSVZBVEVgIGhhdmluZyBhIGRlcGVuZGVuY3kgb24gYFpPTkVfREVWSUNFYC4gUmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvZiBgWk9ORV9ERVZJQ0VgJiMzOTtzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFpbiBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGNoYW5nZXMgdG8gYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGRvd25zdHJlYW0gaXMgYWZmZWN0ZWQuIEdvdHRhIHRyYWNrIHRoaXMgdGhyb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjIyOlx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjIzOlx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMjQ6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTIyNTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTIyNjpcdFxuMTIyNzpcdFx0aGVscFxuMTIyODpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTIyOTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTIzMDpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyMzE6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjMyOlx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyMzM6XHRcbjEyMzQ6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTIzNTpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMjM2Olx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbjEyMzc6XHRcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXG4xMjM4Olx0XHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxuMTIzOTpcdFxuMTI0MDpcdCNcbjEyNDE6XHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgSSYjMzk7dmUgZ290IGEgc2l0dWF0aW9uIHdoZXJlIGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgWk9ORV9ERVZJQ0VgIGluIHR1cm4gZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGRlcGVuZGVuY3kgY2hhaW4sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LiBUaGlzIG1lYW5zIHRoYXQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBgREVWSUNFX1BSSVZBVEVgIGZ1bGx5LCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZ3Jhc3Agd2hhdCBgWk9ORV9ERVZJQ0VgIGlzIGJyaW5naW5nIHRvIHRoZSB0YWJsZSBhbmQsIGZ1cnRoZXIgYmFjaywgd2hhdCBgTUVNT1JZX0hPVFJFTU9WRWAmIzM5O3MgaW1wbGljYXRpb25zIGFyZS4gQmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyLCB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB1bnRhbmdsaW5nIGBERVZJQ0VfUFJJVkFURWAmIzM5O3MgZGVwZW5kZW5jaWVzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBERVZJQ0VfUFJJVkFURWAgaXRzZWxmLCB0byBzZWUgd2hhdCB0aGlzIHdob2xlIGNhc2NhZGUgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbW1lZGlhdGUgcmVxdWlyZW1lbnRzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjUyOlx0Y29uZmlnIERFVklDRV9QUklWQVRFXG4xMjUzOlx0XHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuMTI1NDpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuMTI1NTpcdFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuMTI1NjpcdFxuMTI1NzpcdFx0aGVscFxuMTI1ODpcdFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxuMTI1OTpcdFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXG4xMjYwOlx0XHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cbjEyNjE6XHRcbjEyNjI6XHRjb25maWcgVk1BUF9QRk5cbjEyNjM6XHRcdGJvb2xcbjEyNjQ6XHRcbjEyNjU6XHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXG4xMjY2Olx0XHRib29sXG4xMjY3Olx0Y29uZmlnIEFSQ0hfSEFTX1BLRVlTXG4xMjY4Olx0XHRib29sXG4xMjY5Olx0XG4xMjcwOlx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzJcbjEyNzE6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2OTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGBERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIGF0IHBsYXk/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gdGhlIGBkb19zd2FwX3BhZ2VgIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnkuY2AuIEl0JiMzOTtzIGNydWNpYWwsIGFuZCBhbHdheXMgY29tcGlsZWQsIGJ1dCB0aGUgc3BlY2lmaWMgcGF0aCBtb2RpZmllZCBpczogdGhlIGJyYW5jaCB0aGF0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIGV2YWx1YXRlcyB0byB0cnVlLgoKVGhhdCBjb25kaXRpb24mIzM5O3MgaW1wb3J0YW50LiBJdCByZXF1aXJlcyBgREVWSUNFX1BSSVZBVEVgIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGF0IGEgZHJpdmVyIGlzIGFjdHVhbGx5IHVzaW5nIHRoaXMgZGV2aWNlLXByaXZhdGUgbWVtb3J5LiBOb3V2ZWF1IGlzIGFuIGV4YW1wbGUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IGZ1enppbmc6IElzIGl0IHdvcnRoIGZvY3VzaW5nIG9uIHRoaXM/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCk5vdywgYSBjcml0aWNhbCBwb2ludCBmbGFzaGVzOiBgZG9fc3dhcF9wYWdlYCBpcyBhICpnZW5lcmljKiBob3QtcGF0aCBmdW5jdGlvbiwgYSBmdW5jdGlvbiB0aGF04oCZcyBmdW5kYW1lbnRhbCwgYW5kIGZyZXF1ZW50bHkgaGl0LiBIbW0sIHNob3VsZCBJIGxpc3QgaXQgaW4gYEZvY3VzU3ltYm9sc2A/IFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gYmVpbmcgc2tld2VkLiBTaW5jZSBgZG9fc3dhcF9wYWdlYCBpcyBjbGVhcmx5IGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgSSBzaG91bGQgYXZvaWQgaW5jbHVkaW5nIGl0LgoKT2theSwgaXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIHRvIGNvbnNpZGVyPyBUaGUgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsICpvbmx5KiBtb2RpZmllcyBgZG9fc3dhcF9wYWdlYC4gU28sIEkgY2FuIHByb2JhYmx5IGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBCdXQsIGhvbGQgb27igKYgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0ICpjYWxscyogdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IE5vLCBsb29raW5nIHRocm91Z2ggdGhlIHBhdGNoIGFnYWluLCBpdCYjMzk7cyBjbGVhciBpdCBqdXN0IGNoYW5nZXMgYGRvX3N3YXBfcGFnZWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQgdGhvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb190cnlsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9OTgwPXN0YXRpYyBpbnQgdHJ5X3Jlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy05ODYtXG5tbS9tZW1vcnkuYzo5ODc6XHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbm1tL21lbW9yeS5jLTk4OC1cdFx0cmVzdG9yZV9leGNsdXNpdmVfcHRlKHZtYSwgZm9saW8sIHBhZ2UsIGFkZHIsIHB0ZXAsIG9yaWdfcHRlKTtcbi0tXG5tbS9tZW1vcnkuYz00MTg3PXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy00MjE4LVx0XHQgKi9cbm1tL21lbW9yeS5jOjQyMTk6XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG5tbS9tZW1vcnkuYy00MjIwLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9tZW1vcnkuYz00MjYwPXN0YXRpYyBib29sIHdwX2Nhbl9yZXVzZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDI4Ni1cdFx0cmV0dXJuIGZhbHNlO1xubW0vbWVtb3J5LmM6NDI4NzpcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG5tbS9tZW1vcnkuYy00Mjg4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9NDgyOD12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODc5LVx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG5tbS9tZW1vcnkuYzo0ODgwOlx0XHRcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xubW0vbWVtb3J5LmMtNDg4MS1cdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTM5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0ICpvbmx5KiBtb2RpZmllcyBgZG9fc3dhcF9wYWdlYC4gU2luY2UgYGRvX3N3YXBfcGFnZWAgaXMsIGFzIEkgcmVjYWxsLCBhIGZhaXJseSBnZW5lcmljIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYSBmcmVxdWVudCBob3QtcGF0aCwgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEkgc2hvdWxkbiYjMzk7dCBsaXN0IGl0IGRpcmVjdGx5IHdpdGhpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCYjMzk7cyBhIHRleHRib29rIGNhc2Ugb2Ygc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KCkhtbSwgYnV0IGFyZSB0aGVyZSAqYW55KiBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgYXBwcm9wcmlhdGUgdG8gbGlzdD8gUGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgc3dhcCBvcGVyYXRpb24/IE1heWJlIGBtaWdyYXRlX3RvX3JhbWAgY29tZXMgdG8gbWluZCwgYnV0IHRoYXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgZm9yIGZ1dHVyZSBwYXRjaGVzLgoKU28sIGFjY29yZGluZyB0byBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBwcm9iYWJseSBiZSBlbXB0eS4gVGhlIHByb21wdCBkb2VzIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhleSBhbHNvIHN1Z2dlc3QgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExlYXZpbmcgaXQgZW1wdHkgYWxpZ25zIHdpdGggdGhpcyBndWlkYW5jZS4gVGhhdCBzZWVtcyBzZW5zaWJsZS4KCkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgYERFVklDRV9QUklWQVRFYCBpcyBpbnZvbHZlZCwgYW5kIEkgcmVtZW1iZXIgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgQ09ORklHX1pPTkVfREVWSUNFYC4gU28sIGBERVZJQ0VfUFJJVkFURWAgZmVlbHMgbGlrZSBhIGdvb2QgY2hvaWNlIHRvIGluY2x1ZGUgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKV2FpdCBhIG1pbnV0ZSwgYERFVklDRV9QUklWQVRFYCBpcyBhIGJvb2xlYW4gY29uZmlnLCBzbyBJIHNob3VsZCBiZSBnb29kLgoKTGV0IG1lIHRoaW5rLiBBaCB5ZXMsIGBkb19zd2FwX3BhZ2VgIG5lZWRzIGBDT05GSUdfU1dBUGAuIExldCBtZSBqdXN0IGJlIGNvbXBsZXRlbHkgc3VyZSB0aGF0IGBkb19zd2FwX3BhZ2VgIGlzbiYjMzk7dCBjb21waWxlZCB3aXRob3V0IGBDT05GSUdfU1dBUGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3N3YXBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTUwODE9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MTA0LVxubW0vaHVnZV9tZW1vcnkuYzo1MTA1Olx0LyogU2VlIGRvX3N3YXBfcGFnZSgpOiByZXN0b3JlIFBBR0VfTk9ORSBmb3IgUldQICovXG5tbS9odWdlX21lbW9yeS5jLTUxMDYtXHRpZiAocG1kX3N3cF91ZmZkKCpwdm13LVx1MDAzZXBtZCkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL2ludGVybmFsLmg9NTcwPXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ludGVybmFsLmgtNTc4LVxubW0vaW50ZXJuYWwuaDo1Nzk6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xubW0vaW50ZXJuYWwuaC01ODAtdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTExNDc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMTY5LVx0XHRcdCAqIEhlcmUgdGhlIHB0bCBpcyBvbmx5IHVzZWQgdG8gY2hlY2sgcHRlX3NhbWUoKSBpblxubW0va2h1Z2VwYWdlZC5jOjExNzA6XHRcdFx0ICogZG9fc3dhcF9wYWdlKCksIHNvIHJlYWRvbmx5IHZlcnNpb24gaXMgZW5vdWdoLlxubW0va2h1Z2VwYWdlZC5jLTExNzEtXHRcdFx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyMDAtXHRcdHZtZi5wdGwgPSBwdGw7XG5tbS9raHVnZXBhZ2VkLmM6MTIwMTpcdFx0cmV0ID0gZG9fc3dhcF9wYWdlKFx1MDAyNnZtZik7XG5tbS9raHVnZXBhZ2VkLmMtMTIwMi1cdFx0LyogV2hpY2ggdW5tYXBzIHB0ZSAoYWZ0ZXIgcGVyaGFwcyByZS1jaGVja2luZyB0aGUgZW50cnkpICovXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyMDUtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTIwNjpcdFx0ICogZG9fc3dhcF9wYWdlIHJldHVybnMgVk1fRkFVTFRfUkVUUlkgd2l0aCByZWxlYXNlZCBtbWFwX2xvY2suXG5tbS9raHVnZXBhZ2VkLmMtMTIwNy1cdFx0ICogTm90ZSB3ZSB0cmVhdCBWTV9GQVVMVF9SRVRSWSBhcyBWTV9GQVVMVF9FUlJPUiBoZXJlIGJlY2F1c2Vcbi0tXG5tbS9rc20uYz0zMTQwPXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2tzbS5jLTMxNjItXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxubW0va3NtLmM6MzE2MzpcdFx0cmV0dXJuIGZvbGlvO1x0XHQvKiBsZXQgZG9fc3dhcF9wYWdlIHJlcG9ydCB0aGUgZXJyb3IgKi9cbm1tL2tzbS5jLTMxNjQtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDY1PXN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk3LSAqICAgICAgICBjb3JydXB0ZWQgZGF0YSBhbmQgc2hhbGwgYmUga2lsbGVkICh3ZSBpbnN0YWxsZWQgc2ltcGxlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwOTg6ICogICAgICAgIGludGVyY2VwdGlvbiBjb2RlIGluIGRvX3N3YXBfcGFnZSB0byBjYXRjaCBpdCkuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOTktICpcbi0tXG5tbS9tZW1vcnkuYz05NDI9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTk1Ni1cbm1tL21lbW9yeS5jOjk1NzpcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWVtb3J5LmMtOTU4LVx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL21lbW9yeS5jPTM1OTk9aW50IGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0zNjA4LSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXG5tbS9tZW1vcnkuYzozNjA5OiAqIHBhcnRzLCBkb19zd2FwX3BhZ2UgbXVzdCBjaGVjayB1bmRlciBsb2NrIGJlZm9yZSB1bm1hcHBpbmcgdGhlIHB0ZSBhbmRcbm1tL21lbW9yeS5jLTM2MTAtICogcHJvY2VlZGluZyAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrO1xuLS1cbm1tL21lbW9yeS5jPTQ3NDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc4Ni1cdC8qXG5tbS9tZW1vcnkuYzo0Nzg3Olx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xubW0vbWVtb3J5LmMtNDc4OC1cdCAqIGNvbXBsZXRlbHkgc3dhcCBlbnRyaWVzIHdpdGggY29udGlndW91cyBzd2FwIG9mZnNldHMuXG4tLVxubW0vbWVtb3J5LmM9NDgxMD1zdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbi0tXG5tbS9tZW1vcnkuYy00ODI3LSAqL1xubW0vbWVtb3J5LmM6NDgyODp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTQ4Mjkte1xuLS1cbm1tL21lbW9yeS5jLTUxNzItXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xubW0vbWVtb3J5LmM6NTE3MzpcdGFyY2hfZG9fc3dhcF9wYWdlX25yKHZtYS1cdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxubW0vbWVtb3J5LmMtNTE3NC1cdFx0XHRwdGUsIHB0ZSwgbnJfcGFnZXMpO1xuLS1cbm1tL21lbW9yeS5jPTY0NjI9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy02NTA4LVx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXHUwMDNlb3JpZ19wdGUpKVxubW0vbWVtb3J5LmM6NjUwOTpcdFx0cmV0dXJuIGRvX3N3YXBfcGFnZSh2bWYpO1xubW0vbWVtb3J5LmMtNjUxMC1cbi0tXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQwNy1cbm1tL21pZ3JhdGUuYzo0MDg6XHRcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWlncmF0ZS5jLTQwOS1cdFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcdTAwMjZcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXG4tLVxubW0vcGFnZV9pby5jPTQxOD1zdGF0aWMgYm9vbCBzd2FwX3JlYWRfZm9saW9femVyb21hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy00MjgtXHQgKiBjdXJyZW50bHkgaGFuZGxlZC4gUmV0dXJuIHRydWUgd2l0aG91dCBtYXJraW5nIHRoZSBmb2xpbyB1cHRvZGF0ZSBzb1xubW0vcGFnZV9pby5jOjQyOTpcdCAqIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHNpZ2J1cykuXG5tbS9wYWdlX2lvLmMtNDMwLVx0ICogRm9saW8gbG9jayBzdGFiaWxpemVzIHRoZSBjbHVzdGVyIGFuZCBtYXAsIHNvIHRoZSBjaGVjayBpcyBzYWZlLlxuLS1cbm1tL3JtYXAuYz0yNDY3PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjcyOS1cdFx0XHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb25cbm1tL3JtYXAuYzoyNzMwOlx0XHRcdCAqIHB0ZS4gZG9fc3dhcF9wYWdlKCkgd2lsbCB3YWl0IHVudGlsIHRoZSBtaWdyYXRpb25cbm1tL3JtYXAuYy0yNzMxLVx0XHRcdCAqIHB0ZSBpcyByZW1vdmVkIGFuZCB0aGVuIHJlc3RhcnQgZmF1bHQgaGFuZGxpbmcuXG4tLVxubW0vcm1hcC5jPTI4NzE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yOTQ5LVx0ICogU3RvcmUgdGhlIHBmbiBvZiB0aGUgcGFnZSBpbiBhIHNwZWNpYWwgZGV2aWNlLWV4Y2x1c2l2ZSBQRk4gc3dhcCBQVEUuXG5tbS9ybWFwLmM6Mjk1MDpcdCAqIGRvX3N3YXBfcGFnZSgpIHdpbGwgdHJpZ2dlciB0aGUgY29udmVyc2lvbiBiYWNrIHdoaWxlIGhvbGRpbmcgdGhlXG5tbS9ybWFwLmMtMjk1MS1cdCAqIGZvbGlvIGxvY2suXG4tLVxubW0vc2htZW0uYz0yMDM5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIwNzYtICogSW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtYXkgd2VsbCBiZSBleHRlbmRlZCB0byByZXNwZWN0IGNwdXNldCBhbmRcbm1tL3NobWVtLmM6MjA3NzogKiBOVU1BIG1lbXBvbGljeSwgYW5kIGFwcGxpZWQgYWxzbyB0byBhbm9ueW1vdXMgcGFnZXMgaW4gZG9fc3dhcF9wYWdlKCk7XG5tbS9zaG1lbS5jLTIwNzgtICogYnV0IGZvciBub3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIHpvbmUuXG4tLVxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODcwLSAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxubW0vc3dhcGZpbGUuYzoxODcxOiAqICAgZG9fc3dhcF9wYWdlKClcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmJiM0Mztzd2Fwb25cbi0tXG5tbS9zd2FwZmlsZS5jLTE4NzgtICogY2hhbmdpbmcgcGFydGx5IGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzd2FwIGVudHJ5IG1heSBiZSBmb3IgYW5vdGhlclxubW0vc3dhcGZpbGUuYzoxODc5OiAqIHN3YXAgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHN3YXBvZmYuICBBbmQgaW4gZG9fc3dhcF9wYWdlKCksIGFmdGVyXG5tbS9zd2FwZmlsZS5jLTE4ODAtICogdGhlIHBhZ2UgaXMgcmVhZCBmcm9tIHRoZSBzd2FwIGRldmljZSwgdGhlIFBURSBpcyB2ZXJpZmllZCBub3Rcbi0tXG5tbS9zd2FwZmlsZS5jPTI0MTI9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vc3dhcGZpbGUuYy0yNDc4LVx0XHQvKlxubW0vc3dhcGZpbGUuYzoyNDc5Olx0XHQgKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHdyaXRlYmFjayB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cbm1tL3N3YXBmaWxlLmMtMjQ4MC1cdFx0ICogSG93ZXZlciwgd2UgZG8gYSBmb2xpb193YWl0X3dyaXRlYmFjaygpIGp1c3QgYmVmb3JlIHRoaXNcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MDctXG5tbS9zd2FwZmlsZS5jOjI1MDg6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL3N3YXBmaWxlLmMtMjUwOS1cdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL3pzd2FwLmM9MTQ3OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNTcyLSAqICBpbnRvIHRoZSBwYWdlIGR1ZSB0byBhIGRlY29tcHJlc3Npb24gZmFpbHVyZS4gVGhlIGZvbGlvIGlzIHVubG9ja2VkLCBidXRcbm1tL3pzd2FwLmM6MTU3MzogKiAgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKClcbm1tL3pzd2FwLmMtMTU3NC0gKiAgd2lsbCBTSUdCVVMpLlxuLS1cbm1tL3pzd2FwLmMtMTU3OC0gKiAgYnV0IE5PVCBtYXJrZWQgdXAtdG8tZGF0ZSwgc28gdGhhdCBhbiBJTyBlcnJvciBpcyBlbWl0dGVkIChlLmcuXG5tbS96c3dhcC5jOjE1Nzk6ICogIGRvX3N3YXBfcGFnZSgpIHdpbGwgU0lHQlVTKS5cbm1tL3pzd2FwLmMtMTU4MC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzExOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGBkb19zd2FwX3BhZ2VgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCBtdWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSG93ZXZlciwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBgREVWSUNFX1BSSVZBVEVgIGlzIHNldC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBpbmNsdWRlIGBERVZJQ0VfUFJJVkFURWAgd2l0aGluIG15IGBFbmFibGVDb25maWdzYC4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGRlcGVuZGVuY2llcy4gSSByZWNhbGwgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGhpbmdlcyBvbiBgWk9ORV9ERVZJQ0VgLiBIbW0sIGRvIEkgZXhwbGljaXRseSBpbmNsdWRlIGBaT05FX0RFVklDRWAgbXlzZWxmLCBvciBkb2VzIHRoZSBLY29uZmlnIHN5c3RlbSBoYW5kbGUgdGhhdCBhdXRvbWF0aWNhbGx5PwoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGFuZCBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lY2Vzc2FyeSBmb3IgYSBzdGF0aWMgY29tcGlsZSBpbnRvIHZtbGludXggd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0LiBTaW5jZSBgWk9ORV9ERVZJQ0VgIGlzIGEgZGVwZW5kZW5jeSBvZiBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIHRhcmdldCBjb2RlLCBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBaT05FX0RFVklDRWAuCgpCdXQgaG9sZCBvbiwgYFpPTkVfREVWSUNFYCBhbHNvIGhhcyBpdHMgb3duIGRlcGVuZGVuY3k6IGBNRU1PUllfSE9UUkVNT1ZFYC4gQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhIHF1aWNrIGNoZWNrIG9mIGBNRU1PUllfSE9UUkVNT1ZFYCYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01Nzg9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTU3OS1cbm1tL0tjb25maWc6NTgwOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU4MS1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBNRU1PUllfSE9UUkVNT1ZFYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byByZWFsbHkgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1PUllfSE9UUkVNT1ZFYC4gV2UgbmVlZCB0byBiZSBtZXRpY3Vsb3VzIGhlcmUuIEkga25vdyB0aGlzIGFyZWEgaW5zaWRlIGFuZCBvdXQsIGJ1dCBJIGFsd2F5cyBiZWxpZXZlIGluIGRvdWJsZS1jaGVja2luZyBhbmQgY29uZmlybWluZyB0aGF0IGFzc3VtcHRpb25zIGFyZSBzb3VuZC4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpdmluZyBkZWVwIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgZHJpdmVycywgYW5kIHRyYWNpbmcgdGhyb3VnaCB0aGUgaG90cGx1ZyBpbmZyYXN0cnVjdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uYWxpdHksIGJvdGggZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNhc2NhZGluZyBlZmZlY3RzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMsIG9yIG1vcmUgcGVyaXBoZXJhbCB0aGluZ3M/IFdlIGNhbiYjMzk7dCBhZmZvcmQgYW55IHN1cnByaXNlcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IHN1YnN5c3RlbXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IG1heSBhcmlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Nzg6XHRlbmRjaG9pY2VcbiA1Nzk6XHRcbiA1ODA6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MTpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODM6XHRcbiA1ODQ6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODU6XHRcdGRlZl9ib29sIHlcbiA1ODY6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk1lbW9yeSBIb3RyZW1vdmUgQW5hbHlzaXMqKgoKUmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBNRU1PUllfSE9UUkVNT1ZFYC4uLiBoYW5nIG9uLCB0aGF0IHNlZW1zIG9kZC4gSXQmIzM5O3MgbGlzdGVkIGFzIGhhdmluZyBubyBkaXJlY3QgZGVwZW5kZW5jaWVzPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGNoZWNrIGl0cyB1c2FnZSBpbiB0aGUgc291cmNlIGNvZGU7IHRoYXQgc2VlbXMgc3VzcGljaW91cy4KCkFoLCBpdCBjbGlja3MsIEkgYmV0IHdoYXQmIzM5O3MgZ29pbmcgb24gaXMgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbGlrZWx5ICpjb25kaXRpb25hbGx5KiBlbmFibGVkLiBUaGUgbW9zdCBvYnZpb3VzIHNjZW5hcmlvIGlzIHRoYXQgaXQmIzM5O3MgYnVyaWVkIGluc2lkZSBhbiBgaWYgTUVNT1JZX0hPVFBMVUdgIGJsb2NrLiBUaGUgZGVwZW5kZW5jaWVzIHdpbGwgc3RlbSBmcm9tIGBNRU1PUllfSE9UUExVR2AsIG5vdCBgTUVNT1JZX0hPVFJFTU9WRWAgZGlyZWN0bHkuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9rYXksIG5vdyBJIGtub3cgd2hlcmUgdG8gbG9vay4gSSYjMzk7bGwgY2hlY2sgdGhhdCBgaWZgIHN0YXRlbWVudCB0byBjb25maXJtLCBidXQgSSBjYW4gYWxyZWFkeSBzZWUgd2hlcmUgdGhpcyBpcyBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTA0PWNvbmZpZyBFWENMVVNJVkVfU1lTVEVNX1JBTVxuLS1cbm1tL0tjb25maWctNTA3LVxubW0vS2NvbmZpZzo1MDg6Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUwOS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTUxMS0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTEyOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTEzLVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuLS1cbm1tL0tjb25maWctNTE1LVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzo1MTY6XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUxNy1cdGRlcGVuZHMgb24gNjRCSVRcbi0tXG5tbS9LY29uZmlnLTUxOS1cbm1tL0tjb25maWc6NTIwOmlmIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyMS1cbi0tXG5tbS9LY29uZmlnPTU4ND1jb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbi0tXG5tbS9LY29uZmlnLTU4Ny1cbm1tL0tjb25maWc6NTg4OmVuZGlmICMgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTg5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUyMgoJCQkJCQkJb3V0cHV0OiA5OQoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgYW5kIERldmljZSBQcml2YXRlIE1lbW9yeSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBNRU1PUllfSE9UUkVNT1ZFYCBpcyBuZXN0ZWQgd2l0aGluIGBpZiBNRU1PUllfSE9UUExVR2AuIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGBNRU1PUllfSE9UUkVNT1ZFYCwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgTUVNT1JZX0hPVFBMVUdgLiBCdXQgd2FpdCwgYE1FTU9SWV9IT1RQTFVHYCBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXM6IGBTUEFSU0VNRU1fVk1FTU1BUGAsIGBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR2AsIGFuZCBgNjRCSVRgLiBMZXQmIzM5O3Mga2VlcCB0aGlzIGNsZWFuIGFuZCBzaW1wbGUsIEkmIzM5O2xsIGp1c3QgZm9jdXMgb24gdGhlIGNvcmU6IEkmIzM5O2xsIGluY2x1ZGUgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4KCk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJiMzOTttIG1pc3Npbmc/IEkgc2hvdWxkIGNoZWNrIGBtaWdyYXRlX3RvX3JhbWAgaW4gYG1tL21lbW9yeS5jYC4gTGV0IG1lIHJldmlldyB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0OgoKYGBgYwoJCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CgkJCQlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7Ci4uLgoJCQkJZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CgkJCQlpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKCQkJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwoKCQkJCQlmb2xpb19nZXQoZm9saW8pOwoJCQkJCXB0ZV91bm1hcF91bmxvY2sodm1mLSZndDtwdGUsIHZtZi0mZ3Q7cHRsKTsKCQkJCQlwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLSZndDtwYWdlKTsKCQkJCQlyZXQgPSBwZ21hcC0mZ3Q7b3BzLSZndDttaWdyYXRlX3RvX3JhbSh2bWYpOwoJCQkJCWZvbGlvX3VubG9jayhmb2xpbyk7CgkJCQkJZm9saW9fcHV0KGZvbGlvKTsKCQkJCX0gZWxzZSB7CmBgYAoKQWgsIHJpZ2h0LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBkdXJpbmcgc3dhcC4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbWlncmF0aW9uIHRvIFJBTS4KClRoZSByZWxldmFudCBFbmFibGVDb25maWdzIGFyZTogYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4gQ29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSwgc2hvdWxkIEkgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuCgpMZXQgbWUgZG91YmxlLWNoZWNrOiBpcyBqdXN0IGBERVZJQ0VfUFJJVkFURWAgc3VmZmljaWVudD8gWWVzLCBgREVWSUNFX1BSSVZBVEVgIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5LCBzbyB0aGlzIGlzIHRoZSBiYXNpcy4gT2theSwgSSYjMzk7bSBjb25maWRlbnQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyBpbiB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGhhbmRsaW5nIHBhdGggb2YgZG9fc3dhcF9wYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGRldmljZSBwcml2YXRlIG1lbW9yeSBpcyBtaWdyYXRlZCB0byBSQU0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6MjYuNzc3NzU3MzU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwMzgyMDAxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyBpbiB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGhhbmRsaW5nIHBhdGggb2YgZG9fc3dhcF9wYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGRldmljZSBwcml2YXRlIG1lbW9yeSBpcyBtaWdyYXRlZCB0byBSQU0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjI2Ljc3Nzc2MjkyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyOTM2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmVjYTk4ZDQ5ZGZlMjIxMjAxYzhlYWFjODIxNzQ4NmZjYjUzNTUyY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDA0OjIwOjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA1NmIyNDQ1NTJmMTM5Li5iYmIyODliYTA5ZDNmIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDg3MywxOCArNDg3MywxOSBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbid0IGJlXFxuK1xcdFxcdFxcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4ndCBiZVxcbiBcXHRcXHRcXHQgKiBmcmVlZC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh0cnlsb2NrX3BhZ2Uodm1mLVxcdTAwM2VwYWdlKSkge1xcbitcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuIFxcbi1cXHRcXHRcXHRcXHRnZXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiBcXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuIFxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXFx1MDAzZXBhZ2UpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSBwZ21hcC1cXHUwMDNlb3BzLVxcdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xcbi1cXHRcXHRcXHRcXHR1bmxvY2tfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRwdXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbitcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRwdGVfdW5tYXAodm1mLVxcdTAwM2VwdGUpO1xcbiBcXHRcXHRcXHRcXHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVxcdTAwM2VwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDoyNy4yODE1Nzc5OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTUzNDM2ODMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHBhZ2Ugb3BlcmF0aW9ucyB0byBmb2xpbyBvcGVyYXRpb25zIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaGFuZGxpbmcgcGF0aCBvZiBkb19zd2FwX3BhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGlzIG1pZ3JhdGVkIHRvIFJBTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmVjYTk4ZDQ5ZGZlMjIxMjAxYzhlYWFjODIxNzQ4NmZjYjUzNTUyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDQ6MjA6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA1NmIyNDQ1NTJmMTM5Li5iYmIyODliYTA5ZDNmIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDg3MywxOCArNDg3MywxOSBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0XHRcdGdvdG8gdW5sb2NrO1xuIFxuIFx0XHRcdC8qXG4tXHRcdFx0ICogR2V0IGEgcGFnZSByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgcGFnZSBjYW4ndCBiZVxuK1x0XHRcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4ndCBiZVxuIFx0XHRcdCAqIGZyZWVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICh0cnlsb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpKSB7XG4rXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbitcdFx0XHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbiBcdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4gXG4tXHRcdFx0XHRnZXRfcGFnZSh2bWYtXHUwMDNlcGFnZSk7XG4rXHRcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuIFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiBcdFx0XHRcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXHUwMDNlcGFnZSk7XG4gXHRcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcbi1cdFx0XHRcdHVubG9ja19wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHRcdHB1dF9wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbitcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRwdGVfdW5tYXAodm1mLVx1MDAzZXB0ZSk7XG4gXHRcdFx0XHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVx1MDAzZXB0bCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDoyNy4yODE1ODExMzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg1MzU0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGBtbS9tZW1vcnkuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjb252ZXJ0aW5nIGB0cnlsb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpYCB0byBgZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTsgZm9saW9fdHJ5bG9jayhmb2xpbylgLiBBbmQgaXQncyBkb2luZyB0aGUgc2FtZSBmb3IgYGdldF9wYWdlYCwgYHVubG9ja19wYWdlYCwgYW5kIGBwdXRfcGFnZWAsIHN3YXBwaW5nIHRoZW0gd2l0aCB0aGVpciBmb2xpbyBjb3VudGVycGFydHM6IGBmb2xpb19nZXRgLCBgZm9saW9fdW5sb2NrYCwgYW5kIGBmb2xpb19wdXRgLCByZXNwZWN0aXZlbHkuIFRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpcyBgZG9fc3dhcF9wYWdlYC4gRnVuY3Rpb25hbGx5LCB0aGlzIHNob3VsZCBiZSBtb3N0bHkgYSBjb252ZXJzaW9uIGZyb20gdGhlIG9sZGVyIGBwYWdlYCBzdHJ1Y3R1cmUgdG8gYGZvbGlvYCwgcmlnaHQ/IE5vIGNoYW5nZSBpbiBiZWhhdmlvdXIsIGp1c3QgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24uXG5cbkJ1dCB3YWl04oCmIGlzIGl0IHJlYWxseSAqanVzdCogYSByZWZhY3RvcmluZz8gTGV0J3MgZGlnIGRlZXBlci4gVGhlIHVzZSBvZiBgZm9saW9fdHJ5bG9ja2AgaW5zdGVhZCBvZiBgdHJ5bG9ja19wYWdlYCwgYW5kIHRoZSBzYW1lIHdpdGggYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuLi4gVGhhdCBjb3VsZCBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gaG93IGBmb2xpb2AgYmVoYXZlcy4gRXNwZWNpYWxseSBjb25zaWRlcmluZyBhIGZvbGlvIGlzIG9mdGVuIGFuIGFnZ3JlZ2F0aW9uIG9mIHBhZ2VzLlxuXG5IYW5nIG9uLiBJJ20gZm9jdXNpbmcgb24gc3dhcCBvcGVyYXRpb25zLCBhbmQgYGRvX3N3YXBfcGFnZWAgaXMgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBjaGFuZ2VzIHRoaW5ncy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBhY3R1YWwgY29kZSBmb3IgYGRvX3N3YXBfcGFnZWAgaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdpdGggaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6MzEuNjY2OTM3Njc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODY1NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3N3YXBfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDI9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtOTU2LVxcbm1tL21lbW9yeS5jOjk1NzpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9tZW1vcnkuYy05NTgtXFx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9tZW1vcnkuYz0zNTk5PWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0zNjA4LSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXFxubW0vbWVtb3J5LmM6MzYwOTogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXFxubW0vbWVtb3J5LmMtMzYxMC0gKiBwcm9jZWVkaW5nIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz00NzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc4Ni1cXHQvKlxcbm1tL21lbW9yeS5jOjQ3ODc6XFx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xcbm1tL21lbW9yeS5jLTQ3ODgtXFx0ICogY29tcGxldGVseSBzd2FwIGVudHJpZXMgd2l0aCBjb250aWd1b3VzIHN3YXAgb2Zmc2V0cy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ4MTA9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9tZW1vcnkuYy00ODI3LSAqL1xcbm1tL21lbW9yeS5jOjQ4Mjg6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNDgyOS17XFxuLS1cXG5tbS9tZW1vcnkuYy01MTcyLVxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeS5jOjUxNzM6XFx0YXJjaF9kb19zd2FwX3BhZ2VfbnIodm1hLVxcdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxcbm1tL21lbW9yeS5jLTUxNzQtXFx0XFx0XFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY0NjI9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY1MDgtXFx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9tZW1vcnkuYzo2NTA5OlxcdFxcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDozMS43NjA4MDk1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjY0MDc2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiwgd2hpY2ggSSBrbm93IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIHJlbGF0ZWQgdG8gc3dhcHBlZC1vdXQgcGFnZXMuIFRoZSBrZXkgcGFydCBJJ20gZm9jdXNpbmcgb24gaXMgdGhlIGNoYW5nZSBpbiBob3cgZGV2aWNlIG1lbW9yeSBwYWdlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBjYWxsIHRvIGBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKWAuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLCBzbyBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZS4gSSBzZWUgaXQncyBjb252ZXJ0aW5nIGZyb20gdXNpbmcgYHRyeWxvY2tfcGFnZWAgYW5kIGBnZXRfcGFnZWAgb24gYSBwYWdlIGRpcmVjdGx5IHRvIHVzaW5nIGBmb2xpb190cnlsb2NrYCBhbmQgYGZvbGlvX2dldGAgb24gYSBmb2xpby4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCwgZXNzZW50aWFsbHkgYSBjb252ZXJzaW9uIGZyb20gb2xkZXIgcGFnZS1iYXNlZCBjb2RlIHRvIGZvbGlvLWJhc2VkIGNvZGUuIEZ1bmN0aW9uYWwsIGJ1dCB0aGlzIGlzIGhhcHBlbmluZyBpbiBgZG9fc3dhcF9wYWdlYCwgc28gaXQgd2FycmFudHMgY2FyZWZ1bCBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHRlc3QuXG5cbk5vdywgbXkgdGFzayBpcyB0byBkZWNpZGUgaWYgdGhpcyBtb2RpZmllZCBmdW5jdGlvbiBuZWVkcyBzcGVjaWFsIGF0dGVudGlvbiBkdXJpbmcgZnV6emluZy4gVGhlIHByb21wdCBpczogXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBIbW0sIGBkb19zd2FwX3BhZ2VgIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgSSBrbm93IGl0J3MgaGl0IGFsbCB0aGUgdGltZS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdGVsbHMgbWUgKm5vdCogdG8gaW5jbHVkZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXJ3aXNlIHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbiB3b3VsZCBiZSBza2V3ZWQsIHNvIEkgc2hvdWxkIGxlYXZlIHRoZSBgRm9jdXNTeW1ib2xzYCBlbXB0eSBvciBpcyBpdCBuZWVkZWQ/IE5vLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gKm9ubHkqIG1vZGlmeSBgZG9fc3dhcF9wYWdlYC4gU28sIEknbSB0aGlua2luZywgZG8gSSBsaXN0IGBkb19zd2FwX3BhZ2VgIG9yIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5PyBXZWxsLCBpZiB0aGUgaW50ZW50IGlzIHRvIGF2b2lkIHNrZXdpbmcsIHRoZW4gSSBzaG91bGQgbm90IGxpc3QgYGRvX3N3YXBfcGFnZWAuIEkgc2hvdWxkIGJlIG1vcmUgY29uY2VybmVkIHdpdGggdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFyb3VuZCB0aGlzIGNvZGU/IExldCBtZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6MzkuNTI3MjE5NzQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTcyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdG9fcmFtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4Mjg9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODU4LVxcdFxcdFxcdFxcdC8qXFxubW0vbWVtb3J5LmM6NDg1OTpcXHRcXHRcXHRcXHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcXG5tbS9tZW1vcnkuYy00ODYwLVxcdFxcdFxcdFxcdCAqIHVuZGVyIFZNQSBsb2NrLlxcbi0tXFxubW0vbWVtb3J5LmMtNDg4NS1cXHRcXHRcXHRcXHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVxcdTAwM2VwYWdlKTtcXG5tbS9tZW1vcnkuYzo0ODg2OlxcdFxcdFxcdFxcdHJldCA9IHBnbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1pZ3JhdGVfdG9fcmFtKHZtZik7XFxubW0vbWVtb3J5LmMtNDg4Ny1cXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDozOS41ODc3OTg3OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTEzNjIyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbWlncmF0ZV90b19yYW1gIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbWAgZnVuY3Rpb25hbGl0eS4gQSBxdWljayBsb29rIGFyb3VuZCB0ZWxscyBtZSB0aGF0IGBzdHJ1Y3QgZGV2X3BhZ2VtYXBgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtcmVtYXAuaGAuIEknbGwgbmVlZCB0byBkaWcgdGhyb3VnaCB0aGF0IGFuZCBwcm9iYWJseSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBjb250cm9sbGluZyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGlzIG1pZ3JhdGlvbiBjYXBhYmlsaXR5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjQzLjEwMTQyNDYwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjc3NDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3RvX3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbXJlbWFwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTg4LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDo4OTpcXHR2bV9mYXVsdF90ICgqbWlncmF0ZV90b19yYW0pKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtOTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjQzLjE3NDIwNTU4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTYwMTEzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIFNldHRpbmdzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgZWl0aGVyIGBERVZJQ0VfUFJJVkFURWAgb3IgYFpPTkVfREVWSUNFYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGVuIGxvb2sgYXQgYW55IGluY2x1ZGUgZmlsZXMgb3IgbW9kdWxlcyB0aGF0IGFyZSByZWZlcmVuY2VkLiBJdCdzIGxpa2VseSB0aGF0IGEgc2luZ2xlIHNldHRpbmcgbWlnaHQgY29udHJvbCBib3RoLCBvciB0aGVyZSBtaWdodCBiZSBpbmRlcGVuZGVudCBzZXR0aW5ncy4gSSBzaG91bGQga2VlcCBhbiBleWUgb3V0IGZvciBjb25kaXRpb25hbCBsb2dpYyBhcyB3ZWxsOyBwZXJoYXBzIHRoZXNlIGFyZSBlbmFibGVkIGJhc2VkIG9uIHNvbWUgaGFyZHdhcmUgb3IgZW52aXJvbm1lbnQgZGV0ZWN0aW9uLiBUaGUgZ29hbCBpcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdHJpZ2dlcnMgdGhlc2UgZGV2aWNlIHN0YXRlcy4gSSdtIGdvaW5nIHRvIGRvY3VtZW50IHRoZSBmaW5kaW5ncyB0aG9yb3VnaGx5LCBhcyBhbHdheXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTUzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NDYuMjMwMjIxMDczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDMzMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg2PWNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZzo2ODc6XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy02ODgtXFxuLS1cXG5tbS9LY29uZmlnPTEwMDY9Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXFxubW0vS2NvbmZpZy0xMDA3LVxcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcXFxcbm1tL0tjb25maWc6MTAwODpcXHRcXHQgKFpPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxubW0vS2NvbmZpZy0xMDA5LVxcbi0tXFxubW0vS2NvbmZpZz0xMjE3PWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMjEtXFxubW0vS2NvbmZpZzoxMjIyOmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIyMy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMjUyPWNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI1My1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxubW0vS2NvbmZpZzoxMjU0OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyNTUtXFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDo0Ni4zMDA1NjMzODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMjg0NzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZpY2UtU3BlY2lmaWMgU3dhcCBMb2dpYyoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgY29kZSBJJ20gbG9va2luZyBhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgaGFuZGxpbmcgZGV2aWNlLXNwZWNpZmljIHBhZ2VzLiBJJ20gcmVjYWxsaW5nIHRoYXQgYGRvX3N3YXBfcGFnZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSBwYWdlIHN3YXBwaW5nIHByb2Nlc3MsIGFuZCBpdCBzZWVtcyB0byBoYXZlIHNvbWUgbG9naWMgdGllZCB0byB0aGVzZSBkZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIGBpc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShlbnRyeSlgIGp1bXBzIG91dCBhdCBtZSwgYXMgaXTigJlzIGxpa2VseSBhIGd1YXJkIGZvciBkZXZpY2UtcHJpdmF0ZSBwYWdlIG1pZ3JhdGlvbi4gTm93LCBJIHdhbnQgdG8gdmVyaWZ5IGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gYGRvX3N3YXBfcGFnZWAgYXJvdW5kIGxpbmUgNDg3MyB0byBpbnZlc3RpZ2F0ZSB0aGUgYG1pZ3JhdGVfdG9fcmFtYCBwb3J0aW9uLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IGRldmljZS1wcml2YXRlIHBhZ2VzIGFyZSB0cmVhdGVkIGR1cmluZyBzd2FwcGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjUwLjUyMzQxNDM2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTAyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDg0MDpcXHRcXHRpbnQgbnJfcGFnZXM7XFxuNDg0MTpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xcbjQ4NDI6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbjQ4NDM6XFx0XFx0cHRlX3QgKnB0ZXA7XFxuNDg0NDpcXHRcXG40ODQ1OlxcdFxcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcXG40ODQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQ4NDc6XFx0XFxuNDg0ODpcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cXHUwMDNlb3JpZ19wdGUpO1xcbjQ4NDk6XFx0XFx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcXG40ODUwOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxuNDg1MTpcXHRcXHRcXHRcXHRtaWdyYXRpb25fZW50cnlfd2FpdCh2bWEtXFx1MDAzZXZtX21tLCB2bWYtXFx1MDAzZXBtZCxcXG40ODUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG40ODUzOlxcdFxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcXG40ODU0OlxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbjQ4NTU6XFx0XFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG40ODU2OlxcdFxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuNDg1NzpcXHRcXHRcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG40ODU4OlxcdFxcdFxcdFxcdFxcdC8qXFxuNDg1OTpcXHRcXHRcXHRcXHRcXHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcXG40ODYwOlxcdFxcdFxcdFxcdFxcdCAqIHVuZGVyIFZNQSBsb2NrLlxcbjQ4NjE6XFx0XFx0XFx0XFx0XFx0ICovXFxuNDg2MjpcXHRcXHRcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG40ODYzOlxcdFxcdFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX1JFVFJZO1xcbjQ4NjQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNDg2NTpcXHRcXHRcXHRcXHR9XFxuNDg2NjpcXHRcXG40ODY3OlxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbjQ4Njg6XFx0XFx0XFx0XFx0dm1mLVxcdTAwM2VwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cXHUwMDNldm1fbW0sIHZtZi1cXHUwMDNlcG1kLFxcbjQ4Njk6XFx0XFx0XFx0XFx0XFx0XFx0dm1mLVxcdTAwM2VhZGRyZXNzLCBcXHUwMDI2dm1mLVxcdTAwM2VwdGwpO1xcbjQ4NzA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF2bWYtXFx1MDAzZXB0ZSB8fFxcbjQ4NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVxcdTAwM2VwdGUpLFxcbjQ4NzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dm1mLVxcdTAwM2VvcmlnX3B0ZSkpKVxcbjQ4NzM6XFx0XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNDg3NDpcXHRcXG40ODc1OlxcdFxcdFxcdFxcdC8qXFxuNDg3NjpcXHRcXHRcXHRcXHQgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJ3QgYmVcXG40ODc3OlxcdFxcdFxcdFxcdCAqIGZyZWVkLlxcbjQ4Nzg6XFx0XFx0XFx0XFx0ICovXFxuNDg3OTpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKTtcXG40ODgwOlxcdFxcdFxcdFxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbjQ4ODE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcXG40ODgyOlxcdFxcbjQ4ODM6XFx0XFx0XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG40ODg0OlxcdFxcdFxcdFxcdFxcdHB0ZV91bm1hcF91bmxvY2sodm1mLVxcdTAwM2VwdGUsIHZtZi1cXHUwMDNlcHRsKTtcXG40ODg1OlxcdFxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXFx1MDAzZXBhZ2UpO1xcbjQ4ODY6XFx0XFx0XFx0XFx0XFx0cmV0ID0gcGdtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcXG40ODg3OlxcdFxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuNDg4ODpcXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjQ4ODk6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NTAuNTIzODA2OTQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzE2Njg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBDb25kaXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gdGhhdCBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpYCBjb25kaXRpb24uIEl0J3MgdGhlIGNydXggb2YgdGhpcyBsb2dpYywgdGhlIGdhdGVrZWVwZXIuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5IGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZG9pbmc/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGNvbXBsZXRlbHkuXG5cblRoZSBuYW1lIHNjcmVhbXMgXCJwcml2YWN5XCIgb3IgXCJhY2Nlc3MgY29udHJvbFwiIGZvciBhIGRldmljZSwgYnV0IEkgbmVlZCB0aGUgZGV0YWlscy4gSXMgaXQgYSBtYWNybz8gQSBmdW5jdGlvbiBjYWxsPyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBkZWZpbml0aW9uLCBhbmQgZmluZCBvdXQgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBoZXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBpcyBkZWZpbmVkLCBhbmQgc2VlIGhvdyB0aGUgYGVudHJ5YCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZC4gT25seSB0aGVuIGNhbiBJIHRydWx5IGdyYXNwIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NTMuNjU1NDc5NzYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk4Mzg5OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXFx0XFx0XFx0XFx0cHJlc2VudCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjgyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg2LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjEtXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzYyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM5LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XFxuLS1cXG5tbS9obW0uYz0yNDI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTI3My1cXHRcXHQgKi9cXG5tbS9obW0uYzoyNzQ6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTI3NS1cXHRcXHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0yNzctXFx0XFx0XFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcXG5tbS9obW0uYzoyNzg6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yNzktXFx0XFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0yOTEtXFxubW0vaG1tLmM6MjkyOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjkzLVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9obW0uYz0zNDI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmMtMzUyLVxcbm1tL2htbS5jOjM1MzpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMzU0LVxcdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXFx1MDAzZXBnbWFwLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMzYwLVxcbm1tL2htbS5jOjM2MTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTM2Mi1cXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTM3OS1cXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG5tbS9obW0uYzozODA6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zODEtXFx0XFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4NTI9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3MS1cXHRcXHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE4NzI6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4NzMtXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3Ni1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE4Nzc6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3OC1cXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNjQ0PXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2NS1cXHRcXHRcXHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjY2NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2Ny1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMTQxPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMjM0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzIzNTpcXHRcXHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTMyMzYtXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NTAwNz1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDM2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAzNzpcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDM4LVxcdFxcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTAwMz1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vbWVtb3J5LmMtMTA0NS1cXHRcXHR9XFxubW0vbWVtb3J5LmM6MTA0NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTEwNDctXFx0XFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmMtMTA3MC1cXHRcXHQgKi9cXG5tbS9tZW1vcnkuYzoxMDcxOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1vcnkuYy0xMDcyLVxcdFxcdCAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcXG4tLVxcbm1tL21lbW9yeS5jPTE4MTM9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTgyMi1cXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9tZW1vcnkuYzoxODIzOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9tZW1vcnkuYy0xODI0LVxcdCAgICBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbi0tXFxubW0vbWVtb3J5LmM9NDgyOD12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4NTUtXFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG5tbS9tZW1vcnkuYzo0ODU2OlxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDg1Ny1cXHRcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTY5LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcwOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzEtXFx0XFx0ICAgICEobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpKSB7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE4MS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE4MjpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgzLVxcdFxcdFxcdHdyaXRlID0gTUlHUkFURV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTI0NT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTktXFx0XFx0XFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzAwOlxcdFxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzAxLVxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzMzLVxcdFxcdFxcdFxcdFxcdE1JR1JBVEVfUEZOX01JR1JBVEU7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzozMzQ6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTMzNS1cXHRcXHRcXHRcXHRtcGZuIHw9IE1JR1JBVEVfUEZOX1dSSVRFO1xcbi0tXFxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21wcm90ZWN0LmMtMjM2LVxcdFxcdFxcdG5ld3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KG5ld3B0ZSk7XFxubW0vbXByb3RlY3QuYzoyMzc6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG5tbS9tcHJvdGVjdC5jLTIzOC1cXHRcXHQvKlxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE5Mz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5NC17XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE5NTpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIHx8XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5Ni1cXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTY9c3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzAtXFx0XFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6NzE6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03Mi1cXHRcXHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMwLVxcdFxcdC8qIEhhbmRsZSB1bi1hZGRyZXNzYWJsZSBaT05FX0RFVklDRSBtZW1vcnkgKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMzE6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzItXFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG4tLVxcbm1tL3JtYXAuYz0yNDY3PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNjU1LVxcbm1tL3JtYXAuYzoyNjU2OlxcdFxcdFxcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xcbm1tL3JtYXAuYy0yNjU3LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NTYuOTUzODc2OTQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQ0Nzc2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgKipcblxuT2theSwgc28gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYOKApiByaWdodCwgdGhhdCdzIGRlZmluZWQgaW5saW5lLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzb3VyY2UgaW4gYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gSSdsbCBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdCBoZWFkZXIgZmlsZSB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyByZWFsbHkgZG9pbmcgYW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgYWJvdXQgaXRzIHJvbGUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjAwLjE1ODM1OTA1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdCAqIHdyaXRhYmxlIGVudHJ5P1xcbiAyNzE6XFx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxcbiAyNzI6XFx0ICpcXG4gMjczOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBkZXZpY2UgcHJpdmF0ZSB3cml0YWJsZSBlbnRyeSwgb3RoZXJ3aXNlXFxuIDI3NDpcXHQgKiBmYWxzZS5cXG4gMjc1OlxcdCAqL1xcbiAyNzY6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI3NzpcXHR7XFxuIDI3ODpcXHRcXHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XFxuIDI3OTpcXHR9XFxuIDI4MDpcXHRcXG4gMjgxOlxcdC8qKlxcbiAyODI6XFx0ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xcbiAyODM6XFx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxcbiAyODQ6XFx0ICpcXG4gMjg1OlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeSwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAyODY6XFx0ICovXFxuIDI4NzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG4gMjg4OlxcdHtcXG4gMjg5OlxcdFxcdHN3aXRjaCAoc29mdGxlYWZfdHlwZShlbnRyeSkpIHtcXG4gMjkwOlxcdFxcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU6XFxuIDI5MTpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ6XFxuIDI5MjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjkzOlxcdFxcdGRlZmF1bHQ6XFxuIDI5NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdC8qKlxcbiAyOTk6XFx0ICogc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeT9cXG4gMzAwOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMzAxOlxcdCAqXFxuIDMwMjpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAzMDM6XFx0ICovXFxuIDMwNDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiAzMDU6XFx0e1xcbiAzMDY6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9FWENMVVNJVkU7XFxuIDMwNzpcXHR9XFxuIDMwODpcXHRcXG4gMzA5OlxcdC8qKlxcbiAzMTA6XFx0ICogc29mdGxlYWZfaXNfaHdwb2lzb24oKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGhhcmR3YXJlIHBvaXNvbiBlbnRyeT9cXG4gMzExOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMzEyOlxcdCAqXFxuIDMxMzpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgaGFyZHdhcmUgcG9pc29uIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXFxuIDMxNDpcXHQgKi9cXG4gMzE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19od3BvaXNvbihzb2Z0bGVhZl90IGVudHJ5KVxcbiAzMTY6XFx0e1xcbiAzMTc6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0hXUE9JU09OO1xcbiAzMTg6XFx0fVxcbiAzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjAwLjE1ODQ3MDEyOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEwMjE3Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipWZXJpZnlpbmcgdGhlIERldmljZSBQcml2YXRlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGZsYWcgdGhhdCBvc3RlbnNpYmx5IGVuYWJsZXMgZGV2aWNlIHByaXZhdGUgbWVtb3J5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlc3BvbnNpYmxlLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBXaGlsZSB0aGUgbmFtZSBpcyBzdWdnZXN0aXZlLCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdG8gZG91YmxlLWNoZWNrLiBJJ2xsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIHRvIGVuc3VyZSB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgY29ycmVjdGx5IGxpbmtlZCB0byB0aGUgZGVzaXJlZCBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUuIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uLCByZWxhdGVkIHNvdXJjZSBjb2RlLCBhbmQgYW55IGV4aXN0aW5nIGRlc2lnbiBzcGVjaWZpY2F0aW9ucyB0byBjb25jbHVzaXZlbHkgdmVyaWZ5IHRoYXQgZW5hYmxpbmcgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGRlZmluaXRpdmUgbWV0aG9kIHRvIGFjdGl2YXRlIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgc3BhY2UuIEEgbWlzY29uZmlndXJhdGlvbiBoZXJlIHdvdWxkIGJlIGEgc2VyaW91cyBwcm9ibGVtIGxhdGVyIG9uIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMTowMy4zNjg2OTA3OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTk3NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjIyPWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMjMxLVxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG5tbS9LY29uZmlnOjEyMzI6XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxubW0vS2NvbmZpZy0xMjMzLVxcbi0tXFxubW0vS2NvbmZpZz0xMjQ5PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI1MS1cXG5tbS9LY29uZmlnOjEyNTI6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUzLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDMuNDY3ODk4MjA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODM4MDIxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgREVWSUNFX1BSSVZBVEVgIGlzIGNvbmZpcm1lZCBhcyB0aGUgY29uZmlnIEknbSB3b3JraW5nIHdpdGgsIHRoYXQncyBzdGVwIG9uZS4gTm93LCB3YWl0IGEgbWludXRlLCBJIHNlZW0gdG8gcmVtZW1iZXIgYERFVklDRV9QUklWQVRFYCBoYXZpbmcgYSBkZXBlbmRlbmN5IG9uIGBaT05FX0RFVklDRWAuIFJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvZiBgWk9ORV9ERVZJQ0VgJ3MgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYWluIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyB0byBgREVWSUNFX1BSSVZBVEVgLiBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcgZG93bnN0cmVhbSBpcyBhZmZlY3RlZC4gR290dGEgdHJhY2sgdGhpcyB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjA2Ljc1MTcwNTA1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjIyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIyOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjM6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjI0OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRoZWxwXFxuMTIyODpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIyOTpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTIzMDpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyMzE6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyMzI6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTIzMzpcXHRcXG4xMjM0OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjEyMzU6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTIzNjpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG4xMjM3OlxcdFxcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXFxuMTIzODpcXHRcXHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxcbjEyMzk6XFx0XFxuMTI0MDpcXHQjXFxuMTI0MTpcXHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDYuNzUxODg4NDMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjE1MTEwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJ3ZlIGdvdCBhIHNpdHVhdGlvbiB3aGVyZSBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLCBhbmQgYFpPTkVfREVWSUNFYCBpbiB0dXJuIGRlcGVuZHMgb24gYE1FTU9SWV9IT1RSRU1PVkVgLiBUaGF0J3MgYSBjbGFzc2ljIGRlcGVuZGVuY3kgY2hhaW4sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LiBUaGlzIG1lYW5zIHRoYXQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBgREVWSUNFX1BSSVZBVEVgIGZ1bGx5LCBJJ20gZ29pbmcgdG8gbmVlZCB0byBncmFzcCB3aGF0IGBaT05FX0RFVklDRWAgaXMgYnJpbmdpbmcgdG8gdGhlIHRhYmxlIGFuZCwgZnVydGhlciBiYWNrLCB3aGF0IGBNRU1PUllfSE9UUkVNT1ZFYCdzIGltcGxpY2F0aW9ucyBhcmUuIEJlZm9yZSBJIGdldCBhbnkgZnVydGhlciwgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZm9jdXMgb24gdW50YW5nbGluZyBgREVWSUNFX1BSSVZBVEVgJ3MgZGVwZW5kZW5jaWVzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBERVZJQ0VfUFJJVkFURWAgaXRzZWxmLCB0byBzZWUgd2hhdCB0aGlzIHdob2xlIGNhc2NhZGUgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSByZXF1aXJlbWVudHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDkuNzczNDAyMDI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTI6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI1MzpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI1NDpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI1NTpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGhlbHBcXG4xMjU4OlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjU5OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNjA6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI2MTpcXHRcXG4xMjYyOlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNjM6XFx0XFx0Ym9vbFxcbjEyNjQ6XFx0XFxuMTI2NTpcXHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXFxuMTI2NjpcXHRcXHRib29sXFxuMTI2NzpcXHRjb25maWcgQVJDSF9IQVNfUEtFWVNcXG4xMjY4OlxcdFxcdGJvb2xcXG4xMjY5OlxcdFxcbjEyNzA6XFx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzJcXG4xMjcxOlxcdFxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDkuNzczNTM2NTc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTEyMzI3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgREVWSUNFX1BSSVZBVEVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBhdCBwbGF5PyBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgd2l0aGluIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgLiBJdCdzIGNydWNpYWwsIGFuZCBhbHdheXMgY29tcGlsZWQsIGJ1dCB0aGUgc3BlY2lmaWMgcGF0aCBtb2RpZmllZCBpczogdGhlIGJyYW5jaCB0aGF0J3MgdHJpZ2dlcmVkIHdoZW4gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAgZXZhbHVhdGVzIHRvIHRydWUuXG5cblRoYXQgY29uZGl0aW9uJ3MgaW1wb3J0YW50LiBJdCByZXF1aXJlcyBgREVWSUNFX1BSSVZBVEVgIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGF0IGEgZHJpdmVyIGlzIGFjdHVhbGx5IHVzaW5nIHRoaXMgZGV2aWNlLXByaXZhdGUgbWVtb3J5LiBOb3V2ZWF1IGlzIGFuIGV4YW1wbGUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IGZ1enppbmc6IElzIGl0IHdvcnRoIGZvY3VzaW5nIG9uIHRoaXM/IFllcywgYWJzb2x1dGVseS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQgZmxhc2hlczogYGRvX3N3YXBfcGFnZWAgaXMgYSAqZ2VuZXJpYyogaG90LXBhdGggZnVuY3Rpb24sIGEgZnVuY3Rpb24gdGhhdOKAmXMgZnVuZGFtZW50YWwsIGFuZCBmcmVxdWVudGx5IGhpdC4gSG1tLCBzaG91bGQgSSBsaXN0IGl0IGluIGBGb2N1c1N5bWJvbHNgPyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucyBmcm9tIGJlaW5nIHNrZXdlZC4gU2luY2UgYGRvX3N3YXBfcGFnZWAgaXMgY2xlYXJseSBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIEkgc2hvdWxkIGF2b2lkIGluY2x1ZGluZyBpdC5cblxuT2theSwgaXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIHRvIGNvbnNpZGVyPyBUaGUgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsICpvbmx5KiBtb2RpZmllcyBgZG9fc3dhcF9wYWdlYC4gU28sIEkgY2FuIHByb2JhYmx5IGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBCdXQsIGhvbGQgb27igKYgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0ICpjYWxscyogdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IE5vLCBsb29raW5nIHRocm91Z2ggdGhlIHBhdGNoIGFnYWluLCBpdCdzIGNsZWFyIGl0IGp1c3QgY2hhbmdlcyBgZG9fc3dhcF9wYWdlYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBtb2RpZmllZCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MTUuNzg0NzcyOTE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI4OTk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190cnlsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTk4MD1zdGF0aWMgaW50IHRyeV9yZXN0b3JlX2V4Y2x1c2l2ZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy05ODYtXFxubW0vbWVtb3J5LmM6OTg3OlxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbm1tL21lbW9yeS5jLTk4OC1cXHRcXHRyZXN0b3JlX2V4Y2x1c2l2ZV9wdGUodm1hLCBmb2xpbywgcGFnZSwgYWRkciwgcHRlcCwgb3JpZ19wdGUpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDE4Nz1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy00MjE4LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjQyMTk6XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy00MjIwLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTQyNjA9c3RhdGljIGJvb2wgd3BfY2FuX3JldXNlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTQyODYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL21lbW9yeS5jOjQyODc6XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy00Mjg4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ4Mjg9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODc5LVxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXFx1MDAzZXBhZ2UpO1xcbm1tL21lbW9yeS5jOjQ4ODA6XFx0XFx0XFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vbWVtb3J5LmMtNDg4MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMToxNS44NzkwNzc2ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4NDA5MDM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgKm9ubHkqIG1vZGlmaWVzIGBkb19zd2FwX3BhZ2VgLiBTaW5jZSBgZG9fc3dhcF9wYWdlYCBpcywgYXMgSSByZWNhbGwsIGEgZmFpcmx5IGdlbmVyaWMgZnVuY3Rpb24gdGhhdCdzIGEgZnJlcXVlbnQgaG90LXBhdGgsIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJIHNob3VsZG4ndCBsaXN0IGl0IGRpcmVjdGx5IHdpdGhpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCdzIGEgdGV4dGJvb2sgY2FzZSBvZiBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuXG5IbW0sIGJ1dCBhcmUgdGhlcmUgKmFueSogb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFwcHJvcHJpYXRlIHRvIGxpc3Q/IFBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHN3YXAgb3BlcmF0aW9uPyBNYXliZSBgbWlncmF0ZV90b19yYW1gIGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0J3MgYSBmdW5jdGlvbiBwb2ludGVyLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBmb3IgZnV0dXJlIHBhdGNoZXMuXG5cblNvLCBhY2NvcmRpbmcgdG8gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgcHJvYmFibHkgYmUgZW1wdHkuIFRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZXkgYWxzbyBzdWdnZXN0IHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZWF2aW5nIGl0IGVtcHR5IGFsaWducyB3aXRoIHRoaXMgZ3VpZGFuY2UuIFRoYXQgc2VlbXMgc2Vuc2libGUuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgYERFVklDRV9QUklWQVRFYCBpcyBpbnZvbHZlZCwgYW5kIEkgcmVtZW1iZXIgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgQ09ORklHX1pPTkVfREVWSUNFYC4gU28sIGBERVZJQ0VfUFJJVkFURWAgZmVlbHMgbGlrZSBhIGdvb2QgY2hvaWNlIHRvIGluY2x1ZGUgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5XYWl0IGEgbWludXRlLCBgREVWSUNFX1BSSVZBVEVgIGlzIGEgYm9vbGVhbiBjb25maWcsIHNvIEkgc2hvdWxkIGJlIGdvb2QuXG5cbkxldCBtZSB0aGluay4gQWggeWVzLCBgZG9fc3dhcF9wYWdlYCBuZWVkcyBgQ09ORklHX1NXQVBgLiBMZXQgbWUganVzdCBiZSBjb21wbGV0ZWx5IHN1cmUgdGhhdCBgZG9fc3dhcF9wYWdlYCBpc24ndCBjb21waWxlZCB3aXRob3V0IGBDT05GSUdfU1dBUGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjIxLjE2MzE3MDk4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MTIyNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc3dhcF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTUwODE9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUxMDQtXFxubW0vaHVnZV9tZW1vcnkuYzo1MTA1OlxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTEwNi1cXHRpZiAocG1kX3N3cF91ZmZkKCpwdm13LVxcdTAwM2VwbWQpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0vaW50ZXJuYWwuaD01NzA9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3OC1cXG5tbS9pbnRlcm5hbC5oOjU3OTp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaC01ODAtdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTE0Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9zd2FwaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTE2OS1cXHRcXHRcXHQgKiBIZXJlIHRoZSBwdGwgaXMgb25seSB1c2VkIHRvIGNoZWNrIHB0ZV9zYW1lKCkgaW5cXG5tbS9raHVnZXBhZ2VkLmM6MTE3MDpcXHRcXHRcXHQgKiBkb19zd2FwX3BhZ2UoKSwgc28gcmVhZG9ubHkgdmVyc2lvbiBpcyBlbm91Z2guXFxubW0va2h1Z2VwYWdlZC5jLTExNzEtXFx0XFx0XFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTIwMC1cXHRcXHR2bWYucHRsID0gcHRsO1xcbm1tL2todWdlcGFnZWQuYzoxMjAxOlxcdFxcdHJldCA9IGRvX3N3YXBfcGFnZShcXHUwMDI2dm1mKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTIwMi1cXHRcXHQvKiBXaGljaCB1bm1hcHMgcHRlIChhZnRlciBwZXJoYXBzIHJlLWNoZWNraW5nIHRoZSBlbnRyeSkgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjA1LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjEyMDY6XFx0XFx0ICogZG9fc3dhcF9wYWdlIHJldHVybnMgVk1fRkFVTFRfUkVUUlkgd2l0aCByZWxlYXNlZCBtbWFwX2xvY2suXFxubW0va2h1Z2VwYWdlZC5jLTEyMDctXFx0XFx0ICogTm90ZSB3ZSB0cmVhdCBWTV9GQVVMVF9SRVRSWSBhcyBWTV9GQVVMVF9FUlJPUiBoZXJlIGJlY2F1c2VcXG4tLVxcbm1tL2tzbS5jPTMxNDA9c3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9rc20uYy0zMTYyLVxcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXFxubW0va3NtLmM6MzE2MzpcXHRcXHRyZXR1cm4gZm9saW87XFx0XFx0LyogbGV0IGRvX3N3YXBfcGFnZSByZXBvcnQgdGhlIGVycm9yICovXFxubW0va3NtLmMtMzE2NC1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA2NT1zdGF0aWMgaW50IG1lX3BhZ2VjYWNoZV9kaXJ0eShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk3LSAqICAgICAgICBjb3JydXB0ZWQgZGF0YSBhbmQgc2hhbGwgYmUga2lsbGVkICh3ZSBpbnN0YWxsZWQgc2ltcGxlXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMDk4OiAqICAgICAgICBpbnRlcmNlcHRpb24gY29kZSBpbiBkb19zd2FwX3BhZ2UgdG8gY2F0Y2ggaXQpLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTA5OS0gKlxcbi0tXFxubW0vbWVtb3J5LmM9OTQyPXN0YXRpYyB2b2lkIHJlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1Ni1cXG5tbS9tZW1vcnkuYzo5NTc6XFx0LyogU2VlIGRvX3N3YXBfcGFnZSgpOiByZXN0b3JlIFBBR0VfTk9ORSBmb3IgUldQICovXFxubW0vbWVtb3J5LmMtOTU4LVxcdGlmIChwdGVfc3dwX3VmZmQob3JpZ19wdGUpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0vbWVtb3J5LmM9MzU5OT1pbnQgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMzYwOC0gKiBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaCBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZFxcbm1tL21lbW9yeS5jOjM2MDk6ICogcGFydHMsIGRvX3N3YXBfcGFnZSBtdXN0IGNoZWNrIHVuZGVyIGxvY2sgYmVmb3JlIHVubWFwcGluZyB0aGUgcHRlIGFuZFxcbm1tL21lbW9yeS5jLTM2MTAtICogcHJvY2VlZGluZyAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrO1xcbi0tXFxubW0vbWVtb3J5LmM9NDc0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ3ODYtXFx0LypcXG5tbS9tZW1vcnkuYzo0Nzg3OlxcdCAqIEZvciBkb19zd2FwX3BhZ2UsIGZpbmQgdGhlIGhpZ2hlc3Qgb3JkZXIgd2hlcmUgdGhlIGFsaWduZWQgcmFuZ2UgaXNcXG5tbS9tZW1vcnkuYy00Nzg4LVxcdCAqIGNvbXBsZXRlbHkgc3dhcCBlbnRyaWVzIHdpdGggY29udGlndW91cyBzd2FwIG9mZnNldHMuXFxuLS1cXG5tbS9tZW1vcnkuYz00ODEwPXN0YXRpYyB2b2lkIGNoZWNrX3N3YXBfZXhjbHVzaXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LFxcbi0tXFxubW0vbWVtb3J5LmMtNDgyNy0gKi9cXG5tbS9tZW1vcnkuYzo0ODI4OnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL21lbW9yeS5jLTQ4Mjkte1xcbi0tXFxubW0vbWVtb3J5LmMtNTE3Mi1cXHRzZXRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwLCBwdGUsIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnkuYzo1MTczOlxcdGFyY2hfZG9fc3dhcF9wYWdlX25yKHZtYS1cXHUwMDNldm1fbW0sIHZtYSwgYWRkcmVzcyxcXG5tbS9tZW1vcnkuYy01MTc0LVxcdFxcdFxcdHB0ZSwgcHRlLCBucl9wYWdlcyk7XFxuLS1cXG5tbS9tZW1vcnkuYz02NDYyPXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy02NTA4LVxcdGlmICghcHRlX3ByZXNlbnQodm1mLVxcdTAwM2VvcmlnX3B0ZSkpXFxubW0vbWVtb3J5LmM6NjUwOTpcXHRcXHRyZXR1cm4gZG9fc3dhcF9wYWdlKHZtZik7XFxubW0vbWVtb3J5LmMtNjUxMC1cXG4tLVxcbm1tL21pZ3JhdGUuYz0zNTE9c3RhdGljIGJvb2wgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy00MDctXFxubW0vbWlncmF0ZS5jOjQwODpcXHRcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9taWdyYXRlLmMtNDA5LVxcdFxcdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9wYWdlX2lvLmM9NDE4PXN0YXRpYyBib29sIHN3YXBfcmVhZF9mb2xpb196ZXJvbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9wYWdlX2lvLmMtNDI4LVxcdCAqIGN1cnJlbnRseSBoYW5kbGVkLiBSZXR1cm4gdHJ1ZSB3aXRob3V0IG1hcmtpbmcgdGhlIGZvbGlvIHVwdG9kYXRlIHNvXFxubW0vcGFnZV9pby5jOjQyOTpcXHQgKiB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKCkgd2lsbCBzaWdidXMpLlxcbm1tL3BhZ2VfaW8uYy00MzAtXFx0ICogRm9saW8gbG9jayBzdGFiaWxpemVzIHRoZSBjbHVzdGVyIGFuZCBtYXAsIHNvIHRoZSBjaGVjayBpcyBzYWZlLlxcbi0tXFxubW0vcm1hcC5jPTI0Njc9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI3MjktXFx0XFx0XFx0ICogU3RvcmUgdGhlIHBmbiBvZiB0aGUgcGFnZSBpbiBhIHNwZWNpYWwgbWlncmF0aW9uXFxubW0vcm1hcC5jOjI3MzA6XFx0XFx0XFx0ICogcHRlLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHdhaXQgdW50aWwgdGhlIG1pZ3JhdGlvblxcbm1tL3JtYXAuYy0yNzMxLVxcdFxcdFxcdCAqIHB0ZSBpcyByZW1vdmVkIGFuZCB0aGVuIHJlc3RhcnQgZmF1bHQgaGFuZGxpbmcuXFxuLS1cXG5tbS9ybWFwLmM9Mjg3MT1zdHJ1Y3QgcGFnZSAqbWFrZV9kZXZpY2VfZXhjbHVzaXZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9ybWFwLmMtMjk0OS1cXHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBkZXZpY2UtZXhjbHVzaXZlIFBGTiBzd2FwIFBURS5cXG5tbS9ybWFwLmM6Mjk1MDpcXHQgKiBkb19zd2FwX3BhZ2UoKSB3aWxsIHRyaWdnZXIgdGhlIGNvbnZlcnNpb24gYmFjayB3aGlsZSBob2xkaW5nIHRoZVxcbm1tL3JtYXAuYy0yOTUxLVxcdCAqIGZvbGlvIGxvY2suXFxuLS1cXG5tbS9zaG1lbS5jPTIwMzk9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMDc2LSAqIEluIGEgZnV0dXJlIHJlbGVhc2UsIHRoaXMgbWF5IHdlbGwgYmUgZXh0ZW5kZWQgdG8gcmVzcGVjdCBjcHVzZXQgYW5kXFxubW0vc2htZW0uYzoyMDc3OiAqIE5VTUEgbWVtcG9saWN5LCBhbmQgYXBwbGllZCBhbHNvIHRvIGFub255bW91cyBwYWdlcyBpbiBkb19zd2FwX3BhZ2UoKTtcXG5tbS9zaG1lbS5jLTIwNzgtICogYnV0IGZvciBub3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIHpvbmUuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE4MzA9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTg3MC0gKiAgIENQVTFcXHRcXHRcXHRcXHRDUFUyXFxubW0vc3dhcGZpbGUuYzoxODcxOiAqICAgZG9fc3dhcF9wYWdlKClcXG5tbS9zd2FwZmlsZS5jLTE4NzItICogICAgIC4uLlxcdFxcdFxcdFxcdHN3YXBvZmYrc3dhcG9uXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4NzgtICogY2hhbmdpbmcgcGFydGx5IGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzd2FwIGVudHJ5IG1heSBiZSBmb3IgYW5vdGhlclxcbm1tL3N3YXBmaWxlLmM6MTg3OTogKiBzd2FwIGRldmljZSB3aGljaCBoYXMgYmVlbiBzd2Fwb2ZmLiAgQW5kIGluIGRvX3N3YXBfcGFnZSgpLCBhZnRlclxcbm1tL3N3YXBmaWxlLmMtMTg4MC0gKiB0aGUgcGFnZSBpcyByZWFkIGZyb20gdGhlIHN3YXAgZGV2aWNlLCB0aGUgUFRFIGlzIHZlcmlmaWVkIG5vdFxcbi0tXFxubW0vc3dhcGZpbGUuYz0yNDEyPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNDc4LVxcdFxcdC8qXFxubW0vc3dhcGZpbGUuYzoyNDc5OlxcdFxcdCAqIFNlZSBkb19zd2FwX3BhZ2UoKTogd3JpdGViYWNrIHdvdWxkIGJlIHByb2JsZW1hdGljLlxcbm1tL3N3YXBmaWxlLmMtMjQ4MC1cXHRcXHQgKiBIb3dldmVyLCB3ZSBkbyBhIGZvbGlvX3dhaXRfd3JpdGViYWNrKCkganVzdCBiZWZvcmUgdGhpc1xcbi0tXFxubW0vc3dhcGZpbGUuYy0yNTA3LVxcbm1tL3N3YXBmaWxlLmM6MjUwODpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9zd2FwZmlsZS5jLTI1MDktXFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcXHUwMDI2XFx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcXG4tLVxcbm1tL3pzd2FwLmM9MTQ3OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE1NzItICogIGludG8gdGhlIHBhZ2UgZHVlIHRvIGEgZGVjb21wcmVzc2lvbiBmYWlsdXJlLiBUaGUgZm9saW8gaXMgdW5sb2NrZWQsIGJ1dFxcbm1tL3pzd2FwLmM6MTU3MzogKiAgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKClcXG5tbS96c3dhcC5jLTE1NzQtICogIHdpbGwgU0lHQlVTKS5cXG4tLVxcbm1tL3pzd2FwLmMtMTU3OC0gKiAgYnV0IE5PVCBtYXJrZWQgdXAtdG8tZGF0ZSwgc28gdGhhdCBhbiBJTyBlcnJvciBpcyBlbWl0dGVkIChlLmcuXFxubW0venN3YXAuYzoxNTc5OiAqICBkb19zd2FwX3BhZ2UoKSB3aWxsIFNJR0JVUykuXFxubW0venN3YXAuYy0xNTgwLSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjIxLjI2MjU4NzgwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0MjIwOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgZG9fc3dhcF9wYWdlYCBpcyBhbHdheXMgY29tcGlsZWQsIHRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIEhvd2V2ZXIsIHRoZSBtb2RpZmllZCBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gYERFVklDRV9QUklWQVRFYCBpcyBzZXQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBgREVWSUNFX1BSSVZBVEVgIHdpdGhpbiBteSBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciBkZXBlbmRlbmNpZXMuIEkgcmVjYWxsIHRoYXQgYERFVklDRV9QUklWQVRFYCBoaW5nZXMgb24gYFpPTkVfREVWSUNFYC4gSG1tLCBkbyBJIGV4cGxpY2l0bHkgaW5jbHVkZSBgWk9ORV9ERVZJQ0VgIG15c2VsZiwgb3IgZG9lcyB0aGUgS2NvbmZpZyBzeXN0ZW0gaGFuZGxlIHRoYXQgYXV0b21hdGljYWxseT9cblxuVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGFuZCBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lY2Vzc2FyeSBmb3IgYSBzdGF0aWMgY29tcGlsZSBpbnRvIHZtbGludXggd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0LiBTaW5jZSBgWk9ORV9ERVZJQ0VgIGlzIGEgZGVwZW5kZW5jeSBvZiBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIHRhcmdldCBjb2RlLCBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBaT05FX0RFVklDRWAuXG5cbkJ1dCBob2xkIG9uLCBgWk9ORV9ERVZJQ0VgIGFsc28gaGFzIGl0cyBvd24gZGVwZW5kZW5jeTogYE1FTU9SWV9IT1RSRU1PVkVgLiBBbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2UgYSBxdWljayBjaGVjayBvZiBgTUVNT1JZX0hPVFJFTU9WRWAncyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTE4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjI1LjUwNjgxMjc3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3NzgwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTU3OD1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTU3OS1cXG5tbS9LY29uZmlnOjU4MDpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctNTgxLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MjUuNTc2NTk4MDA3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDI5MTgwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgTUVNT1JZX0hPVFJFTU9WRWAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRvIHJlYWxseSBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1FTU9SWV9IT1RSRU1PVkVgLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgaGVyZS4gSSBrbm93IHRoaXMgYXJlYSBpbnNpZGUgYW5kIG91dCwgYnV0IEkgYWx3YXlzIGJlbGlldmUgaW4gZG91YmxlLWNoZWNraW5nIGFuZCBjb25maXJtaW5nIHRoYXQgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLiBUaGlzIGNvdWxkIGludm9sdmUgZGl2aW5nIGRlZXAgaW50byB0aGUga2VybmVsIHNvdXJjZSwgZXhhbWluaW5nIHRoZSByZWxldmFudCBkcml2ZXJzLCBhbmQgdHJhY2luZyB0aHJvdWdoIHRoZSBob3RwbHVnIGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gYnVpbGQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb25hbGl0eSwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcywgb3IgbW9yZSBwZXJpcGhlcmFsIHRoaW5ncz8gV2UgY2FuJ3QgYWZmb3JkIGFueSBzdXJwcmlzZXMuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IHN1YnN5c3RlbXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IG1heSBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMToyOC45MTk1MjAxMjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTc4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTc4OlxcdGVuZGNob2ljZVxcbiA1Nzk6XFx0XFxuIDU4MDpcXHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbiA1ODE6XFx0XFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbiA1ODI6XFx0XFx0c2VsZWN0IE1JR1JBVElPTlxcbiA1ODM6XFx0XFxuIDU4NDpcXHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG4gNTg1OlxcdFxcdGRlZl9ib29sIHlcXG4gNTg2OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcXG4gNTg3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMToyOC45MjAyNjcxNTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4OTM1MzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNZW1vcnkgSG90cmVtb3ZlIEFuYWx5c2lzKipcblxuUmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBNRU1PUllfSE9UUkVNT1ZFYC4uLiBoYW5nIG9uLCB0aGF0IHNlZW1zIG9kZC4gSXQncyBsaXN0ZWQgYXMgaGF2aW5nIG5vIGRpcmVjdCBkZXBlbmRlbmNpZXM/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gY2hlY2sgaXRzIHVzYWdlIGluIHRoZSBzb3VyY2UgY29kZTsgdGhhdCBzZWVtcyBzdXNwaWNpb3VzLlxuXG5BaCwgaXQgY2xpY2tzLCBJIGJldCB3aGF0J3MgZ29pbmcgb24gaXMgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbGlrZWx5ICpjb25kaXRpb25hbGx5KiBlbmFibGVkLiBUaGUgbW9zdCBvYnZpb3VzIHNjZW5hcmlvIGlzIHRoYXQgaXQncyBidXJpZWQgaW5zaWRlIGFuIGBpZiBNRU1PUllfSE9UUExVR2AgYmxvY2suIFRoZSBkZXBlbmRlbmNpZXMgd2lsbCBzdGVtIGZyb20gYE1FTU9SWV9IT1RQTFVHYCwgbm90IGBNRU1PUllfSE9UUkVNT1ZFYCBkaXJlY3RseS4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gT2theSwgbm93IEkga25vdyB3aGVyZSB0byBsb29rLiBJJ2xsIGNoZWNrIHRoYXQgYGlmYCBzdGF0ZW1lbnQgdG8gY29uZmlybSwgYnV0IEkgY2FuIGFscmVhZHkgc2VlIHdoZXJlIHRoaXMgaXMgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTc1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMTozMi4xMDk2NDg1NjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDUwOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MDQ9Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxuLS1cXG5tbS9LY29uZmlnLTUwNy1cXG5tbS9LY29uZmlnOjUwODpjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUwOS1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTUxMS0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MTI6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTEzLVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcbi0tXFxubW0vS2NvbmZpZy01MTUtXFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWc6NTE2OlxcdGRlcGVuZHMgb24gQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUxNy1cXHRkZXBlbmRzIG9uIDY0QklUXFxuLS1cXG5tbS9LY29uZmlnLTUxOS1cXG5tbS9LY29uZmlnOjUyMDppZiBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTIxLVxcbi0tXFxubW0vS2NvbmZpZz01ODQ9Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXFxuLS1cXG5tbS9LY29uZmlnLTU4Ny1cXG5tbS9LY29uZmlnOjU4ODplbmRpZiAjIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01ODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjMyLjE3NDcwMzkxOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA1ODUxMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgSG90cGx1ZyBhbmQgRGV2aWNlIFByaXZhdGUgTWVtb3J5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbmVzdGVkIHdpdGhpbiBgaWYgTUVNT1JZX0hPVFBMVUdgLiBUaGVyZWZvcmUsIHRvIGVuYWJsZSBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYE1FTU9SWV9IT1RQTFVHYC4gQnV0IHdhaXQsIGBNRU1PUllfSE9UUExVR2AgaGFzIGl0cyBvd24gZGVwZW5kZW5jaWVzOiBgU1BBUlNFTUVNX1ZNRU1NQVBgLCBgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdgLCBhbmQgYDY0QklUYC4gTGV0J3Mga2VlcCB0aGlzIGNsZWFuIGFuZCBzaW1wbGUsIEknbGwganVzdCBmb2N1cyBvbiB0aGUgY29yZTogSSdsbCBpbmNsdWRlIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBNRU1PUllfSE9UUExVR2AuXG5cbk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJ20gbWlzc2luZz8gSSBzaG91bGQgY2hlY2sgYG1pZ3JhdGVfdG9fcmFtYCBpbiBgbW0vbWVtb3J5LmNgLiBMZXQgbWUgcmV2aWV3IHRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcblx0XHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuLi4uXG5cdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG5cdFx0XHRcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuXHRcdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG5cblx0XHRcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuXHRcdFx0XHRcdHB0ZV91bm1hcF91bmxvY2sodm1mLVx1MDAzZXB0ZSwgdm1mLVx1MDAzZXB0bCk7XG5cdFx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcblx0XHRcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcblx0XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5gYGBcblxuQWgsIHJpZ2h0LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBkdXJpbmcgc3dhcC4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbWlncmF0aW9uIHRvIFJBTS5cblxuVGhlIHJlbGV2YW50IEVuYWJsZUNvbmZpZ3MgYXJlOiBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgTUVNT1JZX0hPVFBMVUdgLiBDb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlLCBzaG91bGQgSSBmdXp6IHRoaXM/IEFic29sdXRlbHksIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuTGV0IG1lIGRvdWJsZS1jaGVjazogaXMganVzdCBgREVWSUNFX1BSSVZBVEVgIHN1ZmZpY2llbnQ/IFllcywgYERFVklDRV9QUklWQVRFYCBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSwgc28gdGhpcyBpcyB0aGUgYmFzaXMuIE9rYXksIEknbSBjb25maWRlbnQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUyMiwiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMTozOC42ODA1NTc0MTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzODM2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 03:46:54 +0000 UTC FinishedAt: 2026-08-03 04:21:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a47d7a8a12f194ef5593cc0e7756de19def7761", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4a47d7a8a12f194ef5593cc0e7756de19def7761", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG" ], "series_id": "1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmVjYTk4ZDQ5ZGZlMjIxMjAxYzhlYWFjODIxNzQ4NmZjYjUzNTUyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDQ6MjA6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNTZiMjQ0NTUyZjEzOS4uYmJiMjg5YmEwOWQzZiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4NzMsMTggJiM0Mzs0ODczLDE5IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRcdFx0Z290byB1bmxvY2s7XG4gXG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbiYjMzk7dCBiZVxuJiM0MztcdFx0XHQgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJiMzOTt0IGJlXG4gXHRcdFx0ICogZnJlZWQuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKHRyeWxvY2tfcGFnZSh2bWYtXHUwMDNlcGFnZSkpIHtcbiYjNDM7XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbiYjNDM7XHRcdFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4gXHRcdFx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xuIFxuLVx0XHRcdFx0Z2V0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuIFx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcbiBcdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuLVx0XHRcdFx0dW5sb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdFx0cHV0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cHRlX3VubWFwKHZtZi1cdTAwM2VwdGUpO1xuIFx0XHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHBhZ2Ugb3BlcmF0aW9ucyB0byBmb2xpbyBvcGVyYXRpb25zIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaGFuZGxpbmcgcGF0aCBvZiBkb19zd2FwX3BhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGlzIG1pZ3JhdGVkIHRvIFJBTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlY2E5OGQ0OWRmZTIyMTIwMWM4ZWFhYzgyMTc0ODZmY2I1MzU1MmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDA0OjIwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA1NmIyNDQ1NTJmMTM5Li5iYmIyODliYTA5ZDNmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDg3MywxOCAmIzQzOzQ4NzMsMTkgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCQkJZ290byB1bmxvY2s7CiAKIAkJCS8qCi0JCQkgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbiYjMzk7dCBiZQomIzQzOwkJCSAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4mIzM5O3QgYmUKIAkJCSAqIGZyZWVkLgogCQkJICovCi0JCQlpZiAodHJ5bG9ja19wYWdlKHZtZi0mZ3Q7cGFnZSkpIHsKJiM0MzsJCQlmb2xpbyA9IHBhZ2VfZm9saW8odm1mLSZndDtwYWdlKTsKJiM0MzsJCQlpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKIAkJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwogCi0JCQkJZ2V0X3BhZ2Uodm1mLSZndDtwYWdlKTsKJiM0MzsJCQkJZm9saW9fZ2V0KGZvbGlvKTsKIAkJCQlwdGVfdW5tYXBfdW5sb2NrKHZtZi0mZ3Q7cHRlLCB2bWYtJmd0O3B0bCk7CiAJCQkJcGdtYXAgPSBwYWdlX3BnbWFwKHZtZi0mZ3Q7cGFnZSk7CiAJCQkJcmV0ID0gcGdtYXAtJmd0O29wcy0mZ3Q7bWlncmF0ZV90b19yYW0odm1mKTsKLQkJCQl1bmxvY2tfcGFnZSh2bWYtJmd0O3BhZ2UpOwotCQkJCXB1dF9wYWdlKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CQkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQl9IGVsc2UgewogCQkJCXB0ZV91bm1hcCh2bWYtJmd0O3B0ZSk7CiAJCQkJc29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi0mZ3Q7cHRsKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbW0vbWVtb3J5LmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbW9yeS5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgY29udmVydGluZyBgdHJ5bG9ja19wYWdlKHZtZi0mZ3Q7cGFnZSlgIHRvIGBmb2xpbyA9IHBhZ2VfZm9saW8odm1mLSZndDtwYWdlKTsgZm9saW9fdHJ5bG9jayhmb2xpbylgLiBBbmQgaXQmIzM5O3MgZG9pbmcgdGhlIHNhbWUgZm9yIGBnZXRfcGFnZWAsIGB1bmxvY2tfcGFnZWAsIGFuZCBgcHV0X3BhZ2VgLCBzd2FwcGluZyB0aGVtIHdpdGggdGhlaXIgZm9saW8gY291bnRlcnBhcnRzOiBgZm9saW9fZ2V0YCwgYGZvbGlvX3VubG9ja2AsIGFuZCBgZm9saW9fcHV0YCwgcmVzcGVjdGl2ZWx5LiBUaGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYGRvX3N3YXBfcGFnZWAuIEZ1bmN0aW9uYWxseSwgdGhpcyBzaG91bGQgYmUgbW9zdGx5IGEgY29udmVyc2lvbiBmcm9tIHRoZSBvbGRlciBgcGFnZWAgc3RydWN0dXJlIHRvIGBmb2xpb2AsIHJpZ2h0PyBObyBjaGFuZ2UgaW4gYmVoYXZpb3VyLCBqdXN0IGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uLgoKQnV0IHdhaXTigKYgaXMgaXQgcmVhbGx5ICpqdXN0KiBhIHJlZmFjdG9yaW5nPyBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIHVzZSBvZiBgZm9saW9fdHJ5bG9ja2AgaW5zdGVhZCBvZiBgdHJ5bG9ja19wYWdlYCwgYW5kIHRoZSBzYW1lIHdpdGggYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuLi4gVGhhdCBjb3VsZCBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gaG93IGBmb2xpb2AgYmVoYXZlcy4gRXNwZWNpYWxseSBjb25zaWRlcmluZyBhIGZvbGlvIGlzIG9mdGVuIGFuIGFnZ3JlZ2F0aW9uIG9mIHBhZ2VzLgoKSGFuZyBvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBzd2FwIG9wZXJhdGlvbnMsIGFuZCBgZG9fc3dhcF9wYWdlYCBpcyAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVhbGx5IG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGlzIGNoYW5nZXMgdGhpbmdzLiBJIHNob3VsZCByZWFsbHkgY2hlY2sgdGhlIGFjdHVhbCBjb2RlIGZvciBgZG9fc3dhcF9wYWdlYCBpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9OTQyPXN0YXRpYyB2b2lkIHJlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy05NTYtXG5tbS9tZW1vcnkuYzo5NTc6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL21lbW9yeS5jLTk1OC1cdGlmIChwdGVfc3dwX3VmZmQob3JpZ19wdGUpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcbi0tXG5tbS9tZW1vcnkuYz0zNTk5PWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtMzYwOC0gKiBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaCBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZFxubW0vbWVtb3J5LmM6MzYwOTogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXG5tbS9tZW1vcnkuYy0zNjEwLSAqIHByb2NlZWRpbmcgKGJ1dCBkb193cF9wYWdlIGlzIG9ubHkgY2FsbGVkIGFmdGVyIGFscmVhZHkgbWFraW5nIHN1Y2ggYSBjaGVjaztcbi0tXG5tbS9tZW1vcnkuYz00NzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3ODYtXHQvKlxubW0vbWVtb3J5LmM6NDc4NzpcdCAqIEZvciBkb19zd2FwX3BhZ2UsIGZpbmQgdGhlIGhpZ2hlc3Qgb3JkZXIgd2hlcmUgdGhlIGFsaWduZWQgcmFuZ2UgaXNcbm1tL21lbW9yeS5jLTQ3ODgtXHQgKiBjb21wbGV0ZWx5IHN3YXAgZW50cmllcyB3aXRoIGNvbnRpZ3VvdXMgc3dhcCBvZmZzZXRzLlxuLS1cbm1tL21lbW9yeS5jPTQ4MTA9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDgyNy0gKi9cbm1tL21lbW9yeS5jOjQ4Mjg6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODI5LXtcbi0tXG5tbS9tZW1vcnkuYy01MTcyLVx0c2V0X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwLCBwdGUsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeS5jOjUxNzM6XHRhcmNoX2RvX3N3YXBfcGFnZV9ucih2bWEtXHUwMDNldm1fbW0sIHZtYSwgYWRkcmVzcyxcbm1tL21lbW9yeS5jLTUxNzQtXHRcdFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1vcnkuYz02NDYyPXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjUwOC1cdGlmICghcHRlX3ByZXNlbnQodm1mLVx1MDAzZW9yaWdfcHRlKSlcbm1tL21lbW9yeS5jOjY1MDk6XHRcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcbm1tL21lbW9yeS5jLTY1MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgYGRvX3N3YXBfcGFnZWAgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyByZWxhdGVkIHRvIHN3YXBwZWQtb3V0IHBhZ2VzLiBUaGUga2V5IHBhcnQgSSYjMzk7bSBmb2N1c2luZyBvbiBpcyB0aGUgY2hhbmdlIGluIGhvdyBkZXZpY2UgbWVtb3J5IHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGNhbGwgdG8gYHBnbWFwLSZndDtvcHMtJmd0O21pZ3JhdGVfdG9fcmFtKHZtZilgLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UsIHNvIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZS4gSSBzZWUgaXQmIzM5O3MgY29udmVydGluZyBmcm9tIHVzaW5nIGB0cnlsb2NrX3BhZ2VgIGFuZCBgZ2V0X3BhZ2VgIG9uIGEgcGFnZSBkaXJlY3RseSB0byB1c2luZyBgZm9saW9fdHJ5bG9ja2AgYW5kIGBmb2xpb19nZXRgIG9uIGEgZm9saW8uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQsIGVzc2VudGlhbGx5IGEgY29udmVyc2lvbiBmcm9tIG9sZGVyIHBhZ2UtYmFzZWQgY29kZSB0byBmb2xpby1iYXNlZCBjb2RlLiBGdW5jdGlvbmFsLCBidXQgdGhpcyBpcyBoYXBwZW5pbmcgaW4gYGRvX3N3YXBfcGFnZWAsIHNvIGl0IHdhcnJhbnRzIGNhcmVmdWwgZnV6emluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byB0ZXN0LgoKTm93LCBteSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIG1vZGlmaWVkIGZ1bmN0aW9uIG5lZWRzIHNwZWNpYWwgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLiBUaGUgcHJvbXB0IGlzOiAmIzM0O0V4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiYjMzQ7IEhtbSwgYGRvX3N3YXBfcGFnZWAgaXMgYSAqdmVyeSogaG90IHBhdGguIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgSSBrbm93IGl0JiMzOTtzIGhpdCBhbGwgdGhlIHRpbWUuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHRlbGxzIG1lICpub3QqIHRvIGluY2x1ZGUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgZnV6emluZyBkaXN0cmlidXRpb24gd291bGQgYmUgc2tld2VkLCBzbyBJIHNob3VsZCBsZWF2ZSB0aGUgYEZvY3VzU3ltYm9sc2AgZW1wdHkgb3IgaXMgaXQgbmVlZGVkPyBOby4KClRoZSBwYXRjaCBzZWVtcyB0byAqb25seSogbW9kaWZ5IGBkb19zd2FwX3BhZ2VgLiBTbywgSSYjMzk7bSB0aGlua2luZywgZG8gSSBsaXN0IGBkb19zd2FwX3BhZ2VgIG9yIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5PyBXZWxsLCBpZiB0aGUgaW50ZW50IGlzIHRvIGF2b2lkIHNrZXdpbmcsIHRoZW4gSSBzaG91bGQgbm90IGxpc3QgYGRvX3N3YXBfcGFnZWAuIEkgc2hvdWxkIGJlIG1vcmUgY29uY2VybmVkIHdpdGggdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFyb3VuZCB0aGlzIGNvZGU/IExldCBtZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV90b19yYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz00ODI4PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4NTgtXHRcdFx0XHQvKlxubW0vbWVtb3J5LmM6NDg1OTpcdFx0XHRcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxubW0vbWVtb3J5LmMtNDg2MC1cdFx0XHRcdCAqIHVuZGVyIFZNQSBsb2NrLlxuLS1cbm1tL21lbW9yeS5jLTQ4ODUtXHRcdFx0XHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVx1MDAzZXBhZ2UpO1xubW0vbWVtb3J5LmM6NDg4NjpcdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xubW0vbWVtb3J5LmMtNDg4Ny1cdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBtaWdyYXRlX3RvX3JhbWAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYHBnbWFwLSZndDtvcHMtJmd0O21pZ3JhdGVfdG9fcmFtYCBmdW5jdGlvbmFsaXR5LiBBIHF1aWNrIGxvb2sgYXJvdW5kIHRlbGxzIG1lIHRoYXQgYHN0cnVjdCBkZXZfcGFnZW1hcGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oYC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgdGhyb3VnaCB0aGF0IGFuZCBwcm9iYWJseSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBtaWdyYXRpb24gY2FwYWJpbGl0eS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV90b19yYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC04OC1cdCAqL1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjg5Olx0dm1fZmF1bHRfdCAoKm1pZ3JhdGVfdG9fcmFtKShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIFNldHRpbmdzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGVpdGhlciBgREVWSUNFX1BSSVZBVEVgIG9yIGBaT05FX0RFVklDRWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgdGhlbiBsb29rIGF0IGFueSBpbmNsdWRlIGZpbGVzIG9yIG1vZHVsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBzaW5nbGUgc2V0dGluZyBtaWdodCBjb250cm9sIGJvdGgsIG9yIHRoZXJlIG1pZ2h0IGJlIGluZGVwZW5kZW50IHNldHRpbmdzLiBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFzIHdlbGw7IHBlcmhhcHMgdGhlc2UgYXJlIGVuYWJsZWQgYmFzZWQgb24gc29tZSBoYXJkd2FyZSBvciBlbnZpcm9ubWVudCBkZXRlY3Rpb24uIFRoZSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB0aGVzZSBkZXZpY2Ugc3RhdGVzLiBJJiMzOTttIGdvaW5nIHRvIGRvY3VtZW50IHRoZSBmaW5kaW5ncyB0aG9yb3VnaGx5LCBhcyBhbHdheXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02ODY9Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWc6Njg3Olx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxubW0vS2NvbmZpZy02ODgtXG4tLVxubW0vS2NvbmZpZz0xMDA2PWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xubW0vS2NvbmZpZy0xMDA3LVx0ZGVmX2Jvb2wgKEhVR0VUTEJfUEFHRSBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcbm1tL0tjb25maWc6MTAwODpcdFx0IChaT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbm1tL0tjb25maWctMTAwOS1cbi0tXG5tbS9LY29uZmlnPTEyMTc9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjEtXG5tbS9LY29uZmlnOjEyMjI6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjMtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEyNTI9Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTMtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xubW0vS2NvbmZpZzoxMjU0Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjU1LVx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBEZXZpY2UtU3BlY2lmaWMgU3dhcCBMb2dpYyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1pPTkVfREVWSUNFYCBhbmQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIGNvZGUgSSYjMzk7bSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyBkZXZpY2Utc3BlY2lmaWMgcGFnZXMuIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYGRvX3N3YXBfcGFnZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSBwYWdlIHN3YXBwaW5nIHByb2Nlc3MsIGFuZCBpdCBzZWVtcyB0byBoYXZlIHNvbWUgbG9naWMgdGllZCB0byB0aGVzZSBkZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIGBpc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShlbnRyeSlgIGp1bXBzIG91dCBhdCBtZSwgYXMgaXTigJlzIGxpa2VseSBhIGd1YXJkIGZvciBkZXZpY2UtcHJpdmF0ZSBwYWdlIG1pZ3JhdGlvbi4gTm93LCBJIHdhbnQgdG8gdmVyaWZ5IGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGBkb19zd2FwX3BhZ2VgIGFyb3VuZCBsaW5lIDQ4NzMgdG8gaW52ZXN0aWdhdGUgdGhlIGBtaWdyYXRlX3RvX3JhbWAgcG9ydGlvbi4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBkZXZpY2UtcHJpdmF0ZSBwYWdlcyBhcmUgdHJlYXRlZCBkdXJpbmcgc3dhcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4NDA6XHRcdGludCBucl9wYWdlcztcbjQ4NDE6XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG40ODQyOlx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG40ODQzOlx0XHRwdGVfdCAqcHRlcDtcbjQ4NDQ6XHRcbjQ4NDU6XHRcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcbjQ4NDY6XHRcdFx0Z290byBvdXQ7XG40ODQ3Olx0XG40ODQ4Olx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cdTAwM2VvcmlnX3B0ZSk7XG40ODQ5Olx0XHRpZiAodW5saWtlbHkoIXNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xuNDg1MDpcdFx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSkge1xuNDg1MTpcdFx0XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbjQ4NTI6XHRcdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyk7XG40ODUzOlx0XHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbjQ4NTQ6XHRcdFx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuNDg1NTpcdFx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG40ODU2Olx0XHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG40ODU3Olx0XHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuNDg1ODpcdFx0XHRcdFx0LypcbjQ4NTk6XHRcdFx0XHRcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxuNDg2MDpcdFx0XHRcdFx0ICogdW5kZXIgVk1BIGxvY2suXG40ODYxOlx0XHRcdFx0XHQgKi9cbjQ4NjI6XHRcdFx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuNDg2MzpcdFx0XHRcdFx0cmV0ID0gVk1fRkFVTFRfUkVUUlk7XG40ODY0Olx0XHRcdFx0XHRnb3RvIG91dDtcbjQ4NjU6XHRcdFx0XHR9XG40ODY2Olx0XG40ODY3Olx0XHRcdFx0dm1mLVx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbjQ4Njg6XHRcdFx0XHR2bWYtXHUwMDNlcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VwbWQsXG40ODY5Olx0XHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBcdTAwMjZ2bWYtXHUwMDNlcHRsKTtcbjQ4NzA6XHRcdFx0XHRpZiAodW5saWtlbHkoIXZtZi1cdTAwM2VwdGUgfHxcbjQ4NzE6XHRcdFx0XHRcdCAgICAgIXB0ZV9zYW1lKHB0ZXBfZ2V0KHZtZi1cdTAwM2VwdGUpLFxuNDg3MjpcdFx0XHRcdFx0XHRcdFx0dm1mLVx1MDAzZW9yaWdfcHRlKSkpXG40ODczOlx0XHRcdFx0XHRnb3RvIHVubG9jaztcbjQ4NzQ6XHRcbjQ4NzU6XHRcdFx0XHQvKlxuNDg3NjpcdFx0XHRcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4mIzM5O3QgYmVcbjQ4Nzc6XHRcdFx0XHQgKiBmcmVlZC5cbjQ4Nzg6XHRcdFx0XHQgKi9cbjQ4Nzk6XHRcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuNDg4MDpcdFx0XHRcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuNDg4MTpcdFx0XHRcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbjQ4ODI6XHRcbjQ4ODM6XHRcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG40ODg0Olx0XHRcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuNDg4NTpcdFx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcbjQ4ODY6XHRcdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuNDg4NzpcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjQ4ODg6XHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG40ODg5Olx0XHRcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBDb25kaXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiB0aGF0IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIGNvbmRpdGlvbi4gSXQmIzM5O3MgdGhlIGNydXggb2YgdGhpcyBsb2dpYywgdGhlIGdhdGVrZWVwZXIuIE15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hhdCBleGFjdGx5IGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZG9pbmc/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGNvbXBsZXRlbHkuCgpUaGUgbmFtZSBzY3JlYW1zICYjMzQ7cHJpdmFjeSYjMzQ7IG9yICYjMzQ7YWNjZXNzIGNvbnRyb2wmIzM0OyBmb3IgYSBkZXZpY2UsIGJ1dCBJIG5lZWQgdGhlIGRldGFpbHMuIElzIGl0IGEgbWFjcm8/IEEgZnVuY3Rpb24gY2FsbD8gSSBuZWVkIHRvIGdldCB0byB0aGUgZGVmaW5pdGlvbiwgYW5kIGZpbmQgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGhlcmUuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCBzZWUgaG93IHRoZSBgZW50cnlgIHBhcmFtZXRlciBpcyBiZWluZyB1c2VkLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgZ3Jhc3AgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXHRcdFx0XHRwcmVzZW50ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3MC0gKiB3cml0YWJsZSBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4MS0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4OC17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYxLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2MjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDY6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM3LVx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzOS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcbi0tXG5tbS9obW0uYz0yNDI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yNzMtXHRcdCAqL1xubW0vaG1tLmM6Mjc0Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMjc1LVx0XHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0yNzctXHRcdFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcbm1tL2htbS5jOjI3ODpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMjc5LVx0XHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMjkxLVxubW0vaG1tLmM6MjkyOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMjkzLVx0XHRcdGdvdG8gZmF1bHQ7XG4tLVxubW0vaG1tLmM9MzQyPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYy0zNTItXG5tbS9obW0uYzozNTM6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMzU0LVx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTM2MC1cbm1tL2htbS5jOjM2MTpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTM2Mi1cdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0zNzktXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbm1tL2htbS5jOjM4MDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTM4MS1cdFx0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4NTI9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4NzEtXHRcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxODcyOlx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3My1cdFx0Lypcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4NzYtXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxODc3Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4NzgtXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI2NDQ9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjY2NS1cdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNjY2Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2Ny1cdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMxNDE9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMjM0LVxubW0vaHVnZV9tZW1vcnkuYzozMjM1Olx0XHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzIzNi1cdFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTUwMDc9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMzYtXG5tbS9odWdlX21lbW9yeS5jOjUwMzc6XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzOC1cdFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XG4tLVxubW0vbWVtb3J5LmM9MTAwMz1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTEwNDUtXHRcdH1cbm1tL21lbW9yeS5jOjEwNDY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtMTA0Ny1cdFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLS1cbm1tL21lbW9yeS5jLTEwNzAtXHRcdCAqL1xubW0vbWVtb3J5LmM6MTA3MTpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL21lbW9yeS5jLTEwNzItXHRcdCAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcbi0tXG5tbS9tZW1vcnkuYz0xODEzPXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODIyLVx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5tbS9tZW1vcnkuYzoxODIzOlx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxubW0vbWVtb3J5LmMtMTgyNC1cdCAgICBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xuLS1cbm1tL21lbW9yeS5jPTQ4Mjg9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDg1NS1cdFx0XHRyZXQgPSByZW1vdmVfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeSh2bWYpO1xubW0vbWVtb3J5LmM6NDg1NjpcdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTQ4NTctXHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE2OS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcwOlx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzEtXHRcdCAgICAhKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkpIHtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE4MS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTgyOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODMtXHRcdFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTI0NT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk5LVx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzAwOlx0XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMDEtXHRcdFx0XHRnb3RvIG5leHQ7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzMtXHRcdFx0XHRcdE1JR1JBVEVfUEZOX01JR1JBVEU7XG5tbS9taWdyYXRlX2RldmljZS5jOjMzNDpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzUtXHRcdFx0XHRtcGZuIHw9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbXByb3RlY3QuYy0yMzYtXHRcdFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcbm1tL21wcm90ZWN0LmM6MjM3Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL21wcm90ZWN0LmMtMjM4LVx0XHQvKlxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xOTM9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5NC17XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTk1Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5Ni1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzAtXHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6NzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXHRcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMC1cdFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTMxOlx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9ybWFwLmM9MjQ2Nz1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI2NTUtXG5tbS9ybWFwLmM6MjY1NjpcdFx0XHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL3JtYXAuYy0yNjU3LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKgoKT2theSwgc28gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYOKApiByaWdodCwgdGhhdCYjMzk7cyBkZWZpbmVkIGlubGluZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc291cmNlIGluIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IGhlYWRlciBmaWxlIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZyBhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGFib3V0IGl0cyByb2xlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdCAqIHdyaXRhYmxlIGVudHJ5P1xuIDI3MTpcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbiAyNzI6XHQgKlxuIDI3MzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBkZXZpY2UgcHJpdmF0ZSB3cml0YWJsZSBlbnRyeSwgb3RoZXJ3aXNlXG4gMjc0Olx0ICogZmFsc2UuXG4gMjc1Olx0ICovXG4gMjc2Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjc3Olx0e1xuIDI3ODpcdFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFO1xuIDI3OTpcdH1cbiAyODA6XHRcbiAyODE6XHQvKipcbiAyODI6XHQgKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG4gMjgzOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDI4NDpcdCAqXG4gMjg1Olx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXG4gMjg2Olx0ICovXG4gMjg3Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjg4Olx0e1xuIDI4OTpcdFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuIDI5MDpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbiAyOTE6XHRcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiAyOTI6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjkzOlx0XHRkZWZhdWx0OlxuIDI5NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjk1Olx0XHR9XG4gMjk2Olx0fVxuIDI5NzpcdFxuIDI5ODpcdC8qKlxuIDI5OTpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XG4gMzAwOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDMwMTpcdCAqXG4gMzAyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZS1leGNsdXNpdmUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAzMDM6XHQgKi9cbiAzMDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxuIDMwNTpcdHtcbiAzMDY6XHRcdHJldHVybiBzb2Z0bGVhZl90eXBlKGVudHJ5KSA9PSBTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFO1xuIDMwNzpcdH1cbiAzMDg6XHRcbiAzMDk6XHQvKipcbiAzMTA6XHQgKiBzb2Z0bGVhZl9pc19od3BvaXNvbigpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgaGFyZHdhcmUgcG9pc29uIGVudHJ5P1xuIDMxMTpcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbiAzMTI6XHQgKlxuIDMxMzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBoYXJkd2FyZSBwb2lzb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiAzMTQ6XHQgKi9cbiAzMTU6XHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfaHdwb2lzb24oc29mdGxlYWZfdCBlbnRyeSlcbiAzMTY6XHR7XG4gMzE3Olx0XHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfSFdQT0lTT047XG4gMzE4Olx0fVxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipWZXJpZnlpbmcgdGhlIERldmljZSBQcml2YXRlIE1lbW9yeSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGlzIHRoZSBmbGFnIHRoYXQgb3N0ZW5zaWJseSBlbmFibGVzIGRldmljZSBwcml2YXRlIG1lbW9yeS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZXNwb25zaWJsZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGluZGVlZCB0aGUgY2FzZS4gV2hpbGUgdGhlIG5hbWUgaXMgc3VnZ2VzdGl2ZSwgZXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRvIGRvdWJsZS1jaGVjay4gSSYjMzk7bGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgdG8gZW5zdXJlIHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBjb3JyZWN0bHkgbGlua2VkIHRvIHRoZSBkZXNpcmVkIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZS4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uLCByZWxhdGVkIHNvdXJjZSBjb2RlLCBhbmQgYW55IGV4aXN0aW5nIGRlc2lnbiBzcGVjaWZpY2F0aW9ucyB0byBjb25jbHVzaXZlbHkgdmVyaWZ5IHRoYXQgZW5hYmxpbmcgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGRlZmluaXRpdmUgbWV0aG9kIHRvIGFjdGl2YXRlIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgc3BhY2UuIEEgbWlzY29uZmlndXJhdGlvbiBoZXJlIHdvdWxkIGJlIGEgc2VyaW91cyBwcm9ibGVtIGxhdGVyIG9uIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjI9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMjMxLVx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbm1tL0tjb25maWc6MTIzMjpcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxubW0vS2NvbmZpZy0xMjMzLVxuLS1cbm1tL0tjb25maWc9MTI0OT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjUxLVxubW0vS2NvbmZpZzoxMjUyOmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjUzLVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgREVWSUNFX1BSSVZBVEVgIGlzIGNvbmZpcm1lZCBhcyB0aGUgY29uZmlnIEkmIzM5O20gd29ya2luZyB3aXRoLCB0aGF0JiMzOTtzIHN0ZXAgb25lLiBOb3csIHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZW1lbWJlciBgREVWSUNFX1BSSVZBVEVgIGhhdmluZyBhIGRlcGVuZGVuY3kgb24gYFpPTkVfREVWSUNFYC4gUmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvZiBgWk9ORV9ERVZJQ0VgJiMzOTtzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFpbiBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IGNoYW5nZXMgdG8gYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGRvd25zdHJlYW0gaXMgYWZmZWN0ZWQuIEdvdHRhIHRyYWNrIHRoaXMgdGhyb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjIyOlx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjIzOlx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMjQ6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTIyNTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTIyNjpcdFxuMTIyNzpcdFx0aGVscFxuMTIyODpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTIyOTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTIzMDpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyMzE6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjMyOlx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyMzM6XHRcbjEyMzQ6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTIzNTpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMjM2Olx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbjEyMzc6XHRcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXG4xMjM4Olx0XHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxuMTIzOTpcdFxuMTI0MDpcdCNcbjEyNDE6XHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgSSYjMzk7dmUgZ290IGEgc2l0dWF0aW9uIHdoZXJlIGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAsIGFuZCBgWk9ORV9ERVZJQ0VgIGluIHR1cm4gZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGRlcGVuZGVuY3kgY2hhaW4sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LiBUaGlzIG1lYW5zIHRoYXQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBgREVWSUNFX1BSSVZBVEVgIGZ1bGx5LCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZ3Jhc3Agd2hhdCBgWk9ORV9ERVZJQ0VgIGlzIGJyaW5naW5nIHRvIHRoZSB0YWJsZSBhbmQsIGZ1cnRoZXIgYmFjaywgd2hhdCBgTUVNT1JZX0hPVFJFTU9WRWAmIzM5O3MgaW1wbGljYXRpb25zIGFyZS4gQmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyLCB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB1bnRhbmdsaW5nIGBERVZJQ0VfUFJJVkFURWAmIzM5O3MgZGVwZW5kZW5jaWVzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBERVZJQ0VfUFJJVkFURWAgaXRzZWxmLCB0byBzZWUgd2hhdCB0aGlzIHdob2xlIGNhc2NhZGUgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbW1lZGlhdGUgcmVxdWlyZW1lbnRzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjUyOlx0Y29uZmlnIERFVklDRV9QUklWQVRFXG4xMjUzOlx0XHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuMTI1NDpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuMTI1NTpcdFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxuMTI1NjpcdFxuMTI1NzpcdFx0aGVscFxuMTI1ODpcdFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxuMTI1OTpcdFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXG4xMjYwOlx0XHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cbjEyNjE6XHRcbjEyNjI6XHRjb25maWcgVk1BUF9QRk5cbjEyNjM6XHRcdGJvb2xcbjEyNjQ6XHRcbjEyNjU6XHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXG4xMjY2Olx0XHRib29sXG4xMjY3Olx0Y29uZmlnIEFSQ0hfSEFTX1BLRVlTXG4xMjY4Olx0XHRib29sXG4xMjY5Olx0XG4xMjcwOlx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzJcbjEyNzE6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2OTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGBERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIGF0IHBsYXk/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gdGhlIGBkb19zd2FwX3BhZ2VgIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnkuY2AuIEl0JiMzOTtzIGNydWNpYWwsIGFuZCBhbHdheXMgY29tcGlsZWQsIGJ1dCB0aGUgc3BlY2lmaWMgcGF0aCBtb2RpZmllZCBpczogdGhlIGJyYW5jaCB0aGF0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIGV2YWx1YXRlcyB0byB0cnVlLgoKVGhhdCBjb25kaXRpb24mIzM5O3MgaW1wb3J0YW50LiBJdCByZXF1aXJlcyBgREVWSUNFX1BSSVZBVEVgIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGF0IGEgZHJpdmVyIGlzIGFjdHVhbGx5IHVzaW5nIHRoaXMgZGV2aWNlLXByaXZhdGUgbWVtb3J5LiBOb3V2ZWF1IGlzIGFuIGV4YW1wbGUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IGZ1enppbmc6IElzIGl0IHdvcnRoIGZvY3VzaW5nIG9uIHRoaXM/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCk5vdywgYSBjcml0aWNhbCBwb2ludCBmbGFzaGVzOiBgZG9fc3dhcF9wYWdlYCBpcyBhICpnZW5lcmljKiBob3QtcGF0aCBmdW5jdGlvbiwgYSBmdW5jdGlvbiB0aGF04oCZcyBmdW5kYW1lbnRhbCwgYW5kIGZyZXF1ZW50bHkgaGl0LiBIbW0sIHNob3VsZCBJIGxpc3QgaXQgaW4gYEZvY3VzU3ltYm9sc2A/IFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gYmVpbmcgc2tld2VkLiBTaW5jZSBgZG9fc3dhcF9wYWdlYCBpcyBjbGVhcmx5IGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgSSBzaG91bGQgYXZvaWQgaW5jbHVkaW5nIGl0LgoKT2theSwgaXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIHRvIGNvbnNpZGVyPyBUaGUgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsICpvbmx5KiBtb2RpZmllcyBgZG9fc3dhcF9wYWdlYC4gU28sIEkgY2FuIHByb2JhYmx5IGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBCdXQsIGhvbGQgb27igKYgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0ICpjYWxscyogdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IE5vLCBsb29raW5nIHRocm91Z2ggdGhlIHBhdGNoIGFnYWluLCBpdCYjMzk7cyBjbGVhciBpdCBqdXN0IGNoYW5nZXMgYGRvX3N3YXBfcGFnZWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQgdGhvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb190cnlsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9OTgwPXN0YXRpYyBpbnQgdHJ5X3Jlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy05ODYtXG5tbS9tZW1vcnkuYzo5ODc6XHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbm1tL21lbW9yeS5jLTk4OC1cdFx0cmVzdG9yZV9leGNsdXNpdmVfcHRlKHZtYSwgZm9saW8sIHBhZ2UsIGFkZHIsIHB0ZXAsIG9yaWdfcHRlKTtcbi0tXG5tbS9tZW1vcnkuYz00MTg3PXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy00MjE4LVx0XHQgKi9cbm1tL21lbW9yeS5jOjQyMTk6XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG5tbS9tZW1vcnkuYy00MjIwLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9tZW1vcnkuYz00MjYwPXN0YXRpYyBib29sIHdwX2Nhbl9yZXVzZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDI4Ni1cdFx0cmV0dXJuIGZhbHNlO1xubW0vbWVtb3J5LmM6NDI4NzpcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG5tbS9tZW1vcnkuYy00Mjg4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9NDgyOD12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODc5LVx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG5tbS9tZW1vcnkuYzo0ODgwOlx0XHRcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xubW0vbWVtb3J5LmMtNDg4MS1cdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTM5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0ICpvbmx5KiBtb2RpZmllcyBgZG9fc3dhcF9wYWdlYC4gU2luY2UgYGRvX3N3YXBfcGFnZWAgaXMsIGFzIEkgcmVjYWxsLCBhIGZhaXJseSBnZW5lcmljIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYSBmcmVxdWVudCBob3QtcGF0aCwgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEkgc2hvdWxkbiYjMzk7dCBsaXN0IGl0IGRpcmVjdGx5IHdpdGhpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCYjMzk7cyBhIHRleHRib29rIGNhc2Ugb2Ygc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KCkhtbSwgYnV0IGFyZSB0aGVyZSAqYW55KiBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgYXBwcm9wcmlhdGUgdG8gbGlzdD8gUGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgc3dhcCBvcGVyYXRpb24/IE1heWJlIGBtaWdyYXRlX3RvX3JhbWAgY29tZXMgdG8gbWluZCwgYnV0IHRoYXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgZm9yIGZ1dHVyZSBwYXRjaGVzLgoKU28sIGFjY29yZGluZyB0byBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBwcm9iYWJseSBiZSBlbXB0eS4gVGhlIHByb21wdCBkb2VzIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhleSBhbHNvIHN1Z2dlc3QgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExlYXZpbmcgaXQgZW1wdHkgYWxpZ25zIHdpdGggdGhpcyBndWlkYW5jZS4gVGhhdCBzZWVtcyBzZW5zaWJsZS4KCkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgYERFVklDRV9QUklWQVRFYCBpcyBpbnZvbHZlZCwgYW5kIEkgcmVtZW1iZXIgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgQ09ORklHX1pPTkVfREVWSUNFYC4gU28sIGBERVZJQ0VfUFJJVkFURWAgZmVlbHMgbGlrZSBhIGdvb2QgY2hvaWNlIHRvIGluY2x1ZGUgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKV2FpdCBhIG1pbnV0ZSwgYERFVklDRV9QUklWQVRFYCBpcyBhIGJvb2xlYW4gY29uZmlnLCBzbyBJIHNob3VsZCBiZSBnb29kLgoKTGV0IG1lIHRoaW5rLiBBaCB5ZXMsIGBkb19zd2FwX3BhZ2VgIG5lZWRzIGBDT05GSUdfU1dBUGAuIExldCBtZSBqdXN0IGJlIGNvbXBsZXRlbHkgc3VyZSB0aGF0IGBkb19zd2FwX3BhZ2VgIGlzbiYjMzk7dCBjb21waWxlZCB3aXRob3V0IGBDT05GSUdfU1dBUGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3N3YXBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTUwODE9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MTA0LVxubW0vaHVnZV9tZW1vcnkuYzo1MTA1Olx0LyogU2VlIGRvX3N3YXBfcGFnZSgpOiByZXN0b3JlIFBBR0VfTk9ORSBmb3IgUldQICovXG5tbS9odWdlX21lbW9yeS5jLTUxMDYtXHRpZiAocG1kX3N3cF91ZmZkKCpwdm13LVx1MDAzZXBtZCkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL2ludGVybmFsLmg9NTcwPXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ludGVybmFsLmgtNTc4LVxubW0vaW50ZXJuYWwuaDo1Nzk6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xubW0vaW50ZXJuYWwuaC01ODAtdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTExNDc9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2Vfc3dhcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMTY5LVx0XHRcdCAqIEhlcmUgdGhlIHB0bCBpcyBvbmx5IHVzZWQgdG8gY2hlY2sgcHRlX3NhbWUoKSBpblxubW0va2h1Z2VwYWdlZC5jOjExNzA6XHRcdFx0ICogZG9fc3dhcF9wYWdlKCksIHNvIHJlYWRvbmx5IHZlcnNpb24gaXMgZW5vdWdoLlxubW0va2h1Z2VwYWdlZC5jLTExNzEtXHRcdFx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyMDAtXHRcdHZtZi5wdGwgPSBwdGw7XG5tbS9raHVnZXBhZ2VkLmM6MTIwMTpcdFx0cmV0ID0gZG9fc3dhcF9wYWdlKFx1MDAyNnZtZik7XG5tbS9raHVnZXBhZ2VkLmMtMTIwMi1cdFx0LyogV2hpY2ggdW5tYXBzIHB0ZSAoYWZ0ZXIgcGVyaGFwcyByZS1jaGVja2luZyB0aGUgZW50cnkpICovXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEyMDUtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTIwNjpcdFx0ICogZG9fc3dhcF9wYWdlIHJldHVybnMgVk1fRkFVTFRfUkVUUlkgd2l0aCByZWxlYXNlZCBtbWFwX2xvY2suXG5tbS9raHVnZXBhZ2VkLmMtMTIwNy1cdFx0ICogTm90ZSB3ZSB0cmVhdCBWTV9GQVVMVF9SRVRSWSBhcyBWTV9GQVVMVF9FUlJPUiBoZXJlIGJlY2F1c2Vcbi0tXG5tbS9rc20uYz0zMTQwPXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2tzbS5jLTMxNjItXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxubW0va3NtLmM6MzE2MzpcdFx0cmV0dXJuIGZvbGlvO1x0XHQvKiBsZXQgZG9fc3dhcF9wYWdlIHJlcG9ydCB0aGUgZXJyb3IgKi9cbm1tL2tzbS5jLTMxNjQtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDY1PXN0YXRpYyBpbnQgbWVfcGFnZWNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk3LSAqICAgICAgICBjb3JydXB0ZWQgZGF0YSBhbmQgc2hhbGwgYmUga2lsbGVkICh3ZSBpbnN0YWxsZWQgc2ltcGxlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwOTg6ICogICAgICAgIGludGVyY2VwdGlvbiBjb2RlIGluIGRvX3N3YXBfcGFnZSB0byBjYXRjaCBpdCkuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOTktICpcbi0tXG5tbS9tZW1vcnkuYz05NDI9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTk1Ni1cbm1tL21lbW9yeS5jOjk1NzpcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWVtb3J5LmMtOTU4LVx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL21lbW9yeS5jPTM1OTk9aW50IGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0zNjA4LSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXG5tbS9tZW1vcnkuYzozNjA5OiAqIHBhcnRzLCBkb19zd2FwX3BhZ2UgbXVzdCBjaGVjayB1bmRlciBsb2NrIGJlZm9yZSB1bm1hcHBpbmcgdGhlIHB0ZSBhbmRcbm1tL21lbW9yeS5jLTM2MTAtICogcHJvY2VlZGluZyAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrO1xuLS1cbm1tL21lbW9yeS5jPTQ3NDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDc4Ni1cdC8qXG5tbS9tZW1vcnkuYzo0Nzg3Olx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xubW0vbWVtb3J5LmMtNDc4OC1cdCAqIGNvbXBsZXRlbHkgc3dhcCBlbnRyaWVzIHdpdGggY29udGlndW91cyBzd2FwIG9mZnNldHMuXG4tLVxubW0vbWVtb3J5LmM9NDgxMD1zdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbi0tXG5tbS9tZW1vcnkuYy00ODI3LSAqL1xubW0vbWVtb3J5LmM6NDgyODp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTQ4Mjkte1xuLS1cbm1tL21lbW9yeS5jLTUxNzItXHRzZXRfcHRlcyh2bWEtXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xubW0vbWVtb3J5LmM6NTE3MzpcdGFyY2hfZG9fc3dhcF9wYWdlX25yKHZtYS1cdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxubW0vbWVtb3J5LmMtNTE3NC1cdFx0XHRwdGUsIHB0ZSwgbnJfcGFnZXMpO1xuLS1cbm1tL21lbW9yeS5jPTY0NjI9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy02NTA4LVx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXHUwMDNlb3JpZ19wdGUpKVxubW0vbWVtb3J5LmM6NjUwOTpcdFx0cmV0dXJuIGRvX3N3YXBfcGFnZSh2bWYpO1xubW0vbWVtb3J5LmMtNjUxMC1cbi0tXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQwNy1cbm1tL21pZ3JhdGUuYzo0MDg6XHRcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xubW0vbWlncmF0ZS5jLTQwOS1cdFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcdTAwMjZcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXG4tLVxubW0vcGFnZV9pby5jPTQxOD1zdGF0aWMgYm9vbCBzd2FwX3JlYWRfZm9saW9femVyb21hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy00MjgtXHQgKiBjdXJyZW50bHkgaGFuZGxlZC4gUmV0dXJuIHRydWUgd2l0aG91dCBtYXJraW5nIHRoZSBmb2xpbyB1cHRvZGF0ZSBzb1xubW0vcGFnZV9pby5jOjQyOTpcdCAqIHRoYXQgYW4gSU8gZXJyb3IgaXMgZW1pdHRlZCAoZS5nLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHNpZ2J1cykuXG5tbS9wYWdlX2lvLmMtNDMwLVx0ICogRm9saW8gbG9jayBzdGFiaWxpemVzIHRoZSBjbHVzdGVyIGFuZCBtYXAsIHNvIHRoZSBjaGVjayBpcyBzYWZlLlxuLS1cbm1tL3JtYXAuYz0yNDY3PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjcyOS1cdFx0XHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb25cbm1tL3JtYXAuYzoyNzMwOlx0XHRcdCAqIHB0ZS4gZG9fc3dhcF9wYWdlKCkgd2lsbCB3YWl0IHVudGlsIHRoZSBtaWdyYXRpb25cbm1tL3JtYXAuYy0yNzMxLVx0XHRcdCAqIHB0ZSBpcyByZW1vdmVkIGFuZCB0aGVuIHJlc3RhcnQgZmF1bHQgaGFuZGxpbmcuXG4tLVxubW0vcm1hcC5jPTI4NzE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yOTQ5LVx0ICogU3RvcmUgdGhlIHBmbiBvZiB0aGUgcGFnZSBpbiBhIHNwZWNpYWwgZGV2aWNlLWV4Y2x1c2l2ZSBQRk4gc3dhcCBQVEUuXG5tbS9ybWFwLmM6Mjk1MDpcdCAqIGRvX3N3YXBfcGFnZSgpIHdpbGwgdHJpZ2dlciB0aGUgY29udmVyc2lvbiBiYWNrIHdoaWxlIGhvbGRpbmcgdGhlXG5tbS9ybWFwLmMtMjk1MS1cdCAqIGZvbGlvIGxvY2suXG4tLVxubW0vc2htZW0uYz0yMDM5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIwNzYtICogSW4gYSBmdXR1cmUgcmVsZWFzZSwgdGhpcyBtYXkgd2VsbCBiZSBleHRlbmRlZCB0byByZXNwZWN0IGNwdXNldCBhbmRcbm1tL3NobWVtLmM6MjA3NzogKiBOVU1BIG1lbXBvbGljeSwgYW5kIGFwcGxpZWQgYWxzbyB0byBhbm9ueW1vdXMgcGFnZXMgaW4gZG9fc3dhcF9wYWdlKCk7XG5tbS9zaG1lbS5jLTIwNzgtICogYnV0IGZvciBub3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIHpvbmUuXG4tLVxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODcwLSAqICAgQ1BVMVx0XHRcdFx0Q1BVMlxubW0vc3dhcGZpbGUuYzoxODcxOiAqICAgZG9fc3dhcF9wYWdlKClcbm1tL3N3YXBmaWxlLmMtMTg3Mi0gKiAgICAgLi4uXHRcdFx0XHRzd2Fwb2ZmJiM0Mztzd2Fwb25cbi0tXG5tbS9zd2FwZmlsZS5jLTE4NzgtICogY2hhbmdpbmcgcGFydGx5IGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzd2FwIGVudHJ5IG1heSBiZSBmb3IgYW5vdGhlclxubW0vc3dhcGZpbGUuYzoxODc5OiAqIHN3YXAgZGV2aWNlIHdoaWNoIGhhcyBiZWVuIHN3YXBvZmYuICBBbmQgaW4gZG9fc3dhcF9wYWdlKCksIGFmdGVyXG5tbS9zd2FwZmlsZS5jLTE4ODAtICogdGhlIHBhZ2UgaXMgcmVhZCBmcm9tIHRoZSBzd2FwIGRldmljZSwgdGhlIFBURSBpcyB2ZXJpZmllZCBub3Rcbi0tXG5tbS9zd2FwZmlsZS5jPTI0MTI9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vc3dhcGZpbGUuYy0yNDc4LVx0XHQvKlxubW0vc3dhcGZpbGUuYzoyNDc5Olx0XHQgKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHdyaXRlYmFjayB3b3VsZCBiZSBwcm9ibGVtYXRpYy5cbm1tL3N3YXBmaWxlLmMtMjQ4MC1cdFx0ICogSG93ZXZlciwgd2UgZG8gYSBmb2xpb193YWl0X3dyaXRlYmFjaygpIGp1c3QgYmVmb3JlIHRoaXNcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MDctXG5tbS9zd2FwZmlsZS5jOjI1MDg6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL3N3YXBmaWxlLmMtMjUwOS1cdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxuLS1cbm1tL3pzd2FwLmM9MTQ3OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNTcyLSAqICBpbnRvIHRoZSBwYWdlIGR1ZSB0byBhIGRlY29tcHJlc3Npb24gZmFpbHVyZS4gVGhlIGZvbGlvIGlzIHVubG9ja2VkLCBidXRcbm1tL3pzd2FwLmM6MTU3MzogKiAgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKClcbm1tL3pzd2FwLmMtMTU3NC0gKiAgd2lsbCBTSUdCVVMpLlxuLS1cbm1tL3pzd2FwLmMtMTU3OC0gKiAgYnV0IE5PVCBtYXJrZWQgdXAtdG8tZGF0ZSwgc28gdGhhdCBhbiBJTyBlcnJvciBpcyBlbWl0dGVkIChlLmcuXG5tbS96c3dhcC5jOjE1Nzk6ICogIGRvX3N3YXBfcGFnZSgpIHdpbGwgU0lHQlVTKS5cbm1tL3pzd2FwLmMtMTU4MC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzExOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGBkb19zd2FwX3BhZ2VgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCBtdWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSG93ZXZlciwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBgREVWSUNFX1BSSVZBVEVgIGlzIHNldC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBpbmNsdWRlIGBERVZJQ0VfUFJJVkFURWAgd2l0aGluIG15IGBFbmFibGVDb25maWdzYC4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGRlcGVuZGVuY2llcy4gSSByZWNhbGwgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGhpbmdlcyBvbiBgWk9ORV9ERVZJQ0VgLiBIbW0sIGRvIEkgZXhwbGljaXRseSBpbmNsdWRlIGBaT05FX0RFVklDRWAgbXlzZWxmLCBvciBkb2VzIHRoZSBLY29uZmlnIHN5c3RlbSBoYW5kbGUgdGhhdCBhdXRvbWF0aWNhbGx5PwoKVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGFuZCBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lY2Vzc2FyeSBmb3IgYSBzdGF0aWMgY29tcGlsZSBpbnRvIHZtbGludXggd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0LiBTaW5jZSBgWk9ORV9ERVZJQ0VgIGlzIGEgZGVwZW5kZW5jeSBvZiBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIHRhcmdldCBjb2RlLCBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBaT05FX0RFVklDRWAuCgpCdXQgaG9sZCBvbiwgYFpPTkVfREVWSUNFYCBhbHNvIGhhcyBpdHMgb3duIGRlcGVuZGVuY3k6IGBNRU1PUllfSE9UUkVNT1ZFYC4gQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhIHF1aWNrIGNoZWNrIG9mIGBNRU1PUllfSE9UUkVNT1ZFYCYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01Nzg9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTU3OS1cbm1tL0tjb25maWc6NTgwOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU4MS1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBNRU1PUllfSE9UUkVNT1ZFYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byByZWFsbHkgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1PUllfSE9UUkVNT1ZFYC4gV2UgbmVlZCB0byBiZSBtZXRpY3Vsb3VzIGhlcmUuIEkga25vdyB0aGlzIGFyZWEgaW5zaWRlIGFuZCBvdXQsIGJ1dCBJIGFsd2F5cyBiZWxpZXZlIGluIGRvdWJsZS1jaGVja2luZyBhbmQgY29uZmlybWluZyB0aGF0IGFzc3VtcHRpb25zIGFyZSBzb3VuZC4gVGhpcyBjb3VsZCBpbnZvbHZlIGRpdmluZyBkZWVwIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgZHJpdmVycywgYW5kIHRyYWNpbmcgdGhyb3VnaCB0aGUgaG90cGx1ZyBpbmZyYXN0cnVjdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uYWxpdHksIGJvdGggZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNhc2NhZGluZyBlZmZlY3RzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMsIG9yIG1vcmUgcGVyaXBoZXJhbCB0aGluZ3M/IFdlIGNhbiYjMzk7dCBhZmZvcmQgYW55IHN1cnByaXNlcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IHN1YnN5c3RlbXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IG1heSBhcmlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Nzg6XHRlbmRjaG9pY2VcbiA1Nzk6XHRcbiA1ODA6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MTpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODM6XHRcbiA1ODQ6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODU6XHRcdGRlZl9ib29sIHlcbiA1ODY6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk1lbW9yeSBIb3RyZW1vdmUgQW5hbHlzaXMqKgoKUmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBNRU1PUllfSE9UUkVNT1ZFYC4uLiBoYW5nIG9uLCB0aGF0IHNlZW1zIG9kZC4gSXQmIzM5O3MgbGlzdGVkIGFzIGhhdmluZyBubyBkaXJlY3QgZGVwZW5kZW5jaWVzPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGNoZWNrIGl0cyB1c2FnZSBpbiB0aGUgc291cmNlIGNvZGU7IHRoYXQgc2VlbXMgc3VzcGljaW91cy4KCkFoLCBpdCBjbGlja3MsIEkgYmV0IHdoYXQmIzM5O3MgZ29pbmcgb24gaXMgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbGlrZWx5ICpjb25kaXRpb25hbGx5KiBlbmFibGVkLiBUaGUgbW9zdCBvYnZpb3VzIHNjZW5hcmlvIGlzIHRoYXQgaXQmIzM5O3MgYnVyaWVkIGluc2lkZSBhbiBgaWYgTUVNT1JZX0hPVFBMVUdgIGJsb2NrLiBUaGUgZGVwZW5kZW5jaWVzIHdpbGwgc3RlbSBmcm9tIGBNRU1PUllfSE9UUExVR2AsIG5vdCBgTUVNT1JZX0hPVFJFTU9WRWAgZGlyZWN0bHkuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9rYXksIG5vdyBJIGtub3cgd2hlcmUgdG8gbG9vay4gSSYjMzk7bGwgY2hlY2sgdGhhdCBgaWZgIHN0YXRlbWVudCB0byBjb25maXJtLCBidXQgSSBjYW4gYWxyZWFkeSBzZWUgd2hlcmUgdGhpcyBpcyBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTA0PWNvbmZpZyBFWENMVVNJVkVfU1lTVEVNX1JBTVxuLS1cbm1tL0tjb25maWctNTA3LVxubW0vS2NvbmZpZzo1MDg6Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUwOS1cdGJvb2xcbi0tXG5tbS9LY29uZmlnLTUxMS0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTEyOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTEzLVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuLS1cbm1tL0tjb25maWctNTE1LVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzo1MTY6XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUxNy1cdGRlcGVuZHMgb24gNjRCSVRcbi0tXG5tbS9LY29uZmlnLTUxOS1cbm1tL0tjb25maWc6NTIwOmlmIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyMS1cbi0tXG5tbS9LY29uZmlnPTU4ND1jb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbi0tXG5tbS9LY29uZmlnLTU4Ny1cbm1tL0tjb25maWc6NTg4OmVuZGlmICMgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTg5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUyMgoJCQkJCQkJb3V0cHV0OiA5OQoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgYW5kIERldmljZSBQcml2YXRlIE1lbW9yeSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBNRU1PUllfSE9UUkVNT1ZFYCBpcyBuZXN0ZWQgd2l0aGluIGBpZiBNRU1PUllfSE9UUExVR2AuIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGBNRU1PUllfSE9UUkVNT1ZFYCwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgTUVNT1JZX0hPVFBMVUdgLiBCdXQgd2FpdCwgYE1FTU9SWV9IT1RQTFVHYCBoYXMgaXRzIG93biBkZXBlbmRlbmNpZXM6IGBTUEFSU0VNRU1fVk1FTU1BUGAsIGBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR2AsIGFuZCBgNjRCSVRgLiBMZXQmIzM5O3Mga2VlcCB0aGlzIGNsZWFuIGFuZCBzaW1wbGUsIEkmIzM5O2xsIGp1c3QgZm9jdXMgb24gdGhlIGNvcmU6IEkmIzM5O2xsIGluY2x1ZGUgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4KCk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJiMzOTttIG1pc3Npbmc/IEkgc2hvdWxkIGNoZWNrIGBtaWdyYXRlX3RvX3JhbWAgaW4gYG1tL21lbW9yeS5jYC4gTGV0IG1lIHJldmlldyB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0OgoKYGBgYwoJCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CgkJCQlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7Ci4uLgoJCQkJZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CgkJCQlpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKCQkJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwoKCQkJCQlmb2xpb19nZXQoZm9saW8pOwoJCQkJCXB0ZV91bm1hcF91bmxvY2sodm1mLSZndDtwdGUsIHZtZi0mZ3Q7cHRsKTsKCQkJCQlwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLSZndDtwYWdlKTsKCQkJCQlyZXQgPSBwZ21hcC0mZ3Q7b3BzLSZndDttaWdyYXRlX3RvX3JhbSh2bWYpOwoJCQkJCWZvbGlvX3VubG9jayhmb2xpbyk7CgkJCQkJZm9saW9fcHV0KGZvbGlvKTsKCQkJCX0gZWxzZSB7CmBgYAoKQWgsIHJpZ2h0LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBkdXJpbmcgc3dhcC4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbWlncmF0aW9uIHRvIFJBTS4KClRoZSByZWxldmFudCBFbmFibGVDb25maWdzIGFyZTogYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4gQ29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSwgc2hvdWxkIEkgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuCgpMZXQgbWUgZG91YmxlLWNoZWNrOiBpcyBqdXN0IGBERVZJQ0VfUFJJVkFURWAgc3VmZmljaWVudD8gWWVzLCBgREVWSUNFX1BSSVZBVEVgIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5LCBzbyB0aGlzIGlzIHRoZSBiYXNpcy4gT2theSwgSSYjMzk7bSBjb25maWRlbnQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyBpbiB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGhhbmRsaW5nIHBhdGggb2YgZG9fc3dhcF9wYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGRldmljZSBwcml2YXRlIG1lbW9yeSBpcyBtaWdyYXRlZCB0byBSQU0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6MjYuNzc3NzU3MzU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwMzgyMDAxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyBpbiB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGhhbmRsaW5nIHBhdGggb2YgZG9fc3dhcF9wYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGRldmljZSBwcml2YXRlIG1lbW9yeSBpcyBtaWdyYXRlZCB0byBSQU0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjI2Ljc3Nzc2MjkyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyOTM2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmVjYTk4ZDQ5ZGZlMjIxMjAxYzhlYWFjODIxNzQ4NmZjYjUzNTUyY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDA0OjIwOjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA1NmIyNDQ1NTJmMTM5Li5iYmIyODliYTA5ZDNmIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDg3MywxOCArNDg3MywxOSBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbid0IGJlXFxuK1xcdFxcdFxcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4ndCBiZVxcbiBcXHRcXHRcXHQgKiBmcmVlZC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh0cnlsb2NrX3BhZ2Uodm1mLVxcdTAwM2VwYWdlKSkge1xcbitcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0XFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuIFxcbi1cXHRcXHRcXHRcXHRnZXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiBcXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuIFxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXFx1MDAzZXBhZ2UpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSBwZ21hcC1cXHUwMDNlb3BzLVxcdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xcbi1cXHRcXHRcXHRcXHR1bmxvY2tfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRwdXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbitcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRwdGVfdW5tYXAodm1mLVxcdTAwM2VwdGUpO1xcbiBcXHRcXHRcXHRcXHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVxcdTAwM2VwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDoyNy4yODE1Nzc5OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTUzNDM2ODMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHBhZ2Ugb3BlcmF0aW9ucyB0byBmb2xpbyBvcGVyYXRpb25zIGluIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaGFuZGxpbmcgcGF0aCBvZiBkb19zd2FwX3BhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGlzIG1pZ3JhdGVkIHRvIFJBTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmVjYTk4ZDQ5ZGZlMjIxMjAxYzhlYWFjODIxNzQ4NmZjYjUzNTUyY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDQ6MjA6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA1NmIyNDQ1NTJmMTM5Li5iYmIyODliYTA5ZDNmIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDg3MywxOCArNDg3MywxOSBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0XHRcdGdvdG8gdW5sb2NrO1xuIFxuIFx0XHRcdC8qXG4tXHRcdFx0ICogR2V0IGEgcGFnZSByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgcGFnZSBjYW4ndCBiZVxuK1x0XHRcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4ndCBiZVxuIFx0XHRcdCAqIGZyZWVkLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICh0cnlsb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpKSB7XG4rXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbitcdFx0XHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbiBcdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4gXG4tXHRcdFx0XHRnZXRfcGFnZSh2bWYtXHUwMDNlcGFnZSk7XG4rXHRcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuIFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiBcdFx0XHRcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXHUwMDNlcGFnZSk7XG4gXHRcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcbi1cdFx0XHRcdHVubG9ja19wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHRcdHB1dF9wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbitcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRwdGVfdW5tYXAodm1mLVx1MDAzZXB0ZSk7XG4gXHRcdFx0XHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVx1MDAzZXB0bCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDoyNy4yODE1ODExMzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg1MzU0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGBtbS9tZW1vcnkuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjb252ZXJ0aW5nIGB0cnlsb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpYCB0byBgZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTsgZm9saW9fdHJ5bG9jayhmb2xpbylgLiBBbmQgaXQncyBkb2luZyB0aGUgc2FtZSBmb3IgYGdldF9wYWdlYCwgYHVubG9ja19wYWdlYCwgYW5kIGBwdXRfcGFnZWAsIHN3YXBwaW5nIHRoZW0gd2l0aCB0aGVpciBmb2xpbyBjb3VudGVycGFydHM6IGBmb2xpb19nZXRgLCBgZm9saW9fdW5sb2NrYCwgYW5kIGBmb2xpb19wdXRgLCByZXNwZWN0aXZlbHkuIFRoZSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpcyBgZG9fc3dhcF9wYWdlYC4gRnVuY3Rpb25hbGx5LCB0aGlzIHNob3VsZCBiZSBtb3N0bHkgYSBjb252ZXJzaW9uIGZyb20gdGhlIG9sZGVyIGBwYWdlYCBzdHJ1Y3R1cmUgdG8gYGZvbGlvYCwgcmlnaHQ/IE5vIGNoYW5nZSBpbiBiZWhhdmlvdXIsIGp1c3QgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24uXG5cbkJ1dCB3YWl04oCmIGlzIGl0IHJlYWxseSAqanVzdCogYSByZWZhY3RvcmluZz8gTGV0J3MgZGlnIGRlZXBlci4gVGhlIHVzZSBvZiBgZm9saW9fdHJ5bG9ja2AgaW5zdGVhZCBvZiBgdHJ5bG9ja19wYWdlYCwgYW5kIHRoZSBzYW1lIHdpdGggYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuLi4gVGhhdCBjb3VsZCBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gaG93IGBmb2xpb2AgYmVoYXZlcy4gRXNwZWNpYWxseSBjb25zaWRlcmluZyBhIGZvbGlvIGlzIG9mdGVuIGFuIGFnZ3JlZ2F0aW9uIG9mIHBhZ2VzLlxuXG5IYW5nIG9uLiBJJ20gZm9jdXNpbmcgb24gc3dhcCBvcGVyYXRpb25zLCBhbmQgYGRvX3N3YXBfcGFnZWAgaXMgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBjaGFuZ2VzIHRoaW5ncy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBhY3R1YWwgY29kZSBmb3IgYGRvX3N3YXBfcGFnZWAgaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdpdGggaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6MzEuNjY2OTM3Njc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODY1NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3N3YXBfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDI9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtOTU2LVxcbm1tL21lbW9yeS5jOjk1NzpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9tZW1vcnkuYy05NTgtXFx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9tZW1vcnkuYz0zNTk5PWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0zNjA4LSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXFxubW0vbWVtb3J5LmM6MzYwOTogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXFxubW0vbWVtb3J5LmMtMzYxMC0gKiBwcm9jZWVkaW5nIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz00NzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc4Ni1cXHQvKlxcbm1tL21lbW9yeS5jOjQ3ODc6XFx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xcbm1tL21lbW9yeS5jLTQ3ODgtXFx0ICogY29tcGxldGVseSBzd2FwIGVudHJpZXMgd2l0aCBjb250aWd1b3VzIHN3YXAgb2Zmc2V0cy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ4MTA9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9tZW1vcnkuYy00ODI3LSAqL1xcbm1tL21lbW9yeS5jOjQ4Mjg6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNDgyOS17XFxuLS1cXG5tbS9tZW1vcnkuYy01MTcyLVxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeS5jOjUxNzM6XFx0YXJjaF9kb19zd2FwX3BhZ2VfbnIodm1hLVxcdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxcbm1tL21lbW9yeS5jLTUxNzQtXFx0XFx0XFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY0NjI9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY1MDgtXFx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9tZW1vcnkuYzo2NTA5OlxcdFxcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDozMS43NjA4MDk1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjY0MDc2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiwgd2hpY2ggSSBrbm93IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIHJlbGF0ZWQgdG8gc3dhcHBlZC1vdXQgcGFnZXMuIFRoZSBrZXkgcGFydCBJJ20gZm9jdXNpbmcgb24gaXMgdGhlIGNoYW5nZSBpbiBob3cgZGV2aWNlIG1lbW9yeSBwYWdlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoZSBjYWxsIHRvIGBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKWAuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLCBzbyBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZS4gSSBzZWUgaXQncyBjb252ZXJ0aW5nIGZyb20gdXNpbmcgYHRyeWxvY2tfcGFnZWAgYW5kIGBnZXRfcGFnZWAgb24gYSBwYWdlIGRpcmVjdGx5IHRvIHVzaW5nIGBmb2xpb190cnlsb2NrYCBhbmQgYGZvbGlvX2dldGAgb24gYSBmb2xpby4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCwgZXNzZW50aWFsbHkgYSBjb252ZXJzaW9uIGZyb20gb2xkZXIgcGFnZS1iYXNlZCBjb2RlIHRvIGZvbGlvLWJhc2VkIGNvZGUuIEZ1bmN0aW9uYWwsIGJ1dCB0aGlzIGlzIGhhcHBlbmluZyBpbiBgZG9fc3dhcF9wYWdlYCwgc28gaXQgd2FycmFudHMgY2FyZWZ1bCBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHRlc3QuXG5cbk5vdywgbXkgdGFzayBpcyB0byBkZWNpZGUgaWYgdGhpcyBtb2RpZmllZCBmdW5jdGlvbiBuZWVkcyBzcGVjaWFsIGF0dGVudGlvbiBkdXJpbmcgZnV6emluZy4gVGhlIHByb21wdCBpczogXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBIbW0sIGBkb19zd2FwX3BhZ2VgIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgSSBrbm93IGl0J3MgaGl0IGFsbCB0aGUgdGltZS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdGVsbHMgbWUgKm5vdCogdG8gaW5jbHVkZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXJ3aXNlIHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbiB3b3VsZCBiZSBza2V3ZWQsIHNvIEkgc2hvdWxkIGxlYXZlIHRoZSBgRm9jdXNTeW1ib2xzYCBlbXB0eSBvciBpcyBpdCBuZWVkZWQ/IE5vLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gKm9ubHkqIG1vZGlmeSBgZG9fc3dhcF9wYWdlYC4gU28sIEknbSB0aGlua2luZywgZG8gSSBsaXN0IGBkb19zd2FwX3BhZ2VgIG9yIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5PyBXZWxsLCBpZiB0aGUgaW50ZW50IGlzIHRvIGF2b2lkIHNrZXdpbmcsIHRoZW4gSSBzaG91bGQgbm90IGxpc3QgYGRvX3N3YXBfcGFnZWAuIEkgc2hvdWxkIGJlIG1vcmUgY29uY2VybmVkIHdpdGggdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFyb3VuZCB0aGlzIGNvZGU/IExldCBtZSBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6MzkuNTI3MjE5NzQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTcyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdG9fcmFtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4Mjg9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODU4LVxcdFxcdFxcdFxcdC8qXFxubW0vbWVtb3J5LmM6NDg1OTpcXHRcXHRcXHRcXHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcXG5tbS9tZW1vcnkuYy00ODYwLVxcdFxcdFxcdFxcdCAqIHVuZGVyIFZNQSBsb2NrLlxcbi0tXFxubW0vbWVtb3J5LmMtNDg4NS1cXHRcXHRcXHRcXHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVxcdTAwM2VwYWdlKTtcXG5tbS9tZW1vcnkuYzo0ODg2OlxcdFxcdFxcdFxcdHJldCA9IHBnbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1pZ3JhdGVfdG9fcmFtKHZtZik7XFxubW0vbWVtb3J5LmMtNDg4Ny1cXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDozOS41ODc3OTg3OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTEzNjIyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbWlncmF0ZV90b19yYW1gIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgYHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbWAgZnVuY3Rpb25hbGl0eS4gQSBxdWljayBsb29rIGFyb3VuZCB0ZWxscyBtZSB0aGF0IGBzdHJ1Y3QgZGV2X3BhZ2VtYXBgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtcmVtYXAuaGAuIEknbGwgbmVlZCB0byBkaWcgdGhyb3VnaCB0aGF0IGFuZCBwcm9iYWJseSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBjb250cm9sbGluZyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGlzIG1pZ3JhdGlvbiBjYXBhYmlsaXR5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjQzLjEwMTQyNDYwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjc3NDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3RvX3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbXJlbWFwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTc3PXN0cnVjdCBkZXZfcGFnZW1hcF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTg4LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDo4OTpcXHR2bV9mYXVsdF90ICgqbWlncmF0ZV90b19yYW0pKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtOTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjQzLjE3NDIwNTU4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTYwMTEzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIFNldHRpbmdzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgZWl0aGVyIGBERVZJQ0VfUFJJVkFURWAgb3IgYFpPTkVfREVWSUNFYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGVuIGxvb2sgYXQgYW55IGluY2x1ZGUgZmlsZXMgb3IgbW9kdWxlcyB0aGF0IGFyZSByZWZlcmVuY2VkLiBJdCdzIGxpa2VseSB0aGF0IGEgc2luZ2xlIHNldHRpbmcgbWlnaHQgY29udHJvbCBib3RoLCBvciB0aGVyZSBtaWdodCBiZSBpbmRlcGVuZGVudCBzZXR0aW5ncy4gSSBzaG91bGQga2VlcCBhbiBleWUgb3V0IGZvciBjb25kaXRpb25hbCBsb2dpYyBhcyB3ZWxsOyBwZXJoYXBzIHRoZXNlIGFyZSBlbmFibGVkIGJhc2VkIG9uIHNvbWUgaGFyZHdhcmUgb3IgZW52aXJvbm1lbnQgZGV0ZWN0aW9uLiBUaGUgZ29hbCBpcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdHJpZ2dlcnMgdGhlc2UgZGV2aWNlIHN0YXRlcy4gSSdtIGdvaW5nIHRvIGRvY3VtZW50IHRoZSBmaW5kaW5ncyB0aG9yb3VnaGx5LCBhcyBhbHdheXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTUzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NDYuMjMwMjIxMDczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDMzMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg2PWNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZzo2ODc6XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy02ODgtXFxuLS1cXG5tbS9LY29uZmlnPTEwMDY9Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXFxubW0vS2NvbmZpZy0xMDA3LVxcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcXFxcbm1tL0tjb25maWc6MTAwODpcXHRcXHQgKFpPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxubW0vS2NvbmZpZy0xMDA5LVxcbi0tXFxubW0vS2NvbmZpZz0xMjE3PWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMjEtXFxubW0vS2NvbmZpZzoxMjIyOmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIyMy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMjUyPWNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI1My1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxubW0vS2NvbmZpZzoxMjU0OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyNTUtXFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMDo0Ni4zMDA1NjMzODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMjg0NzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXZpY2UtU3BlY2lmaWMgU3dhcCBMb2dpYyoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgY29kZSBJJ20gbG9va2luZyBhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgaGFuZGxpbmcgZGV2aWNlLXNwZWNpZmljIHBhZ2VzLiBJJ20gcmVjYWxsaW5nIHRoYXQgYGRvX3N3YXBfcGFnZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSBwYWdlIHN3YXBwaW5nIHByb2Nlc3MsIGFuZCBpdCBzZWVtcyB0byBoYXZlIHNvbWUgbG9naWMgdGllZCB0byB0aGVzZSBkZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIGBpc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShlbnRyeSlgIGp1bXBzIG91dCBhdCBtZSwgYXMgaXTigJlzIGxpa2VseSBhIGd1YXJkIGZvciBkZXZpY2UtcHJpdmF0ZSBwYWdlIG1pZ3JhdGlvbi4gTm93LCBJIHdhbnQgdG8gdmVyaWZ5IGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gYGRvX3N3YXBfcGFnZWAgYXJvdW5kIGxpbmUgNDg3MyB0byBpbnZlc3RpZ2F0ZSB0aGUgYG1pZ3JhdGVfdG9fcmFtYCBwb3J0aW9uLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IGRldmljZS1wcml2YXRlIHBhZ2VzIGFyZSB0cmVhdGVkIGR1cmluZyBzd2FwcGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIwOjUwLjUyMzQxNDM2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTAyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDg0MDpcXHRcXHRpbnQgbnJfcGFnZXM7XFxuNDg0MTpcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xcbjQ4NDI6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbjQ4NDM6XFx0XFx0cHRlX3QgKnB0ZXA7XFxuNDg0NDpcXHRcXG40ODQ1OlxcdFxcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcXG40ODQ2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQ4NDc6XFx0XFxuNDg0ODpcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cXHUwMDNlb3JpZ19wdGUpO1xcbjQ4NDk6XFx0XFx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcXG40ODUwOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxuNDg1MTpcXHRcXHRcXHRcXHRtaWdyYXRpb25fZW50cnlfd2FpdCh2bWEtXFx1MDAzZXZtX21tLCB2bWYtXFx1MDAzZXBtZCxcXG40ODUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG40ODUzOlxcdFxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcXG40ODU0OlxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbjQ4NTU6XFx0XFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG40ODU2OlxcdFxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuNDg1NzpcXHRcXHRcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG40ODU4OlxcdFxcdFxcdFxcdFxcdC8qXFxuNDg1OTpcXHRcXHRcXHRcXHRcXHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcXG40ODYwOlxcdFxcdFxcdFxcdFxcdCAqIHVuZGVyIFZNQSBsb2NrLlxcbjQ4NjE6XFx0XFx0XFx0XFx0XFx0ICovXFxuNDg2MjpcXHRcXHRcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG40ODYzOlxcdFxcdFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX1JFVFJZO1xcbjQ4NjQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNDg2NTpcXHRcXHRcXHRcXHR9XFxuNDg2NjpcXHRcXG40ODY3OlxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbjQ4Njg6XFx0XFx0XFx0XFx0dm1mLVxcdTAwM2VwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cXHUwMDNldm1fbW0sIHZtZi1cXHUwMDNlcG1kLFxcbjQ4Njk6XFx0XFx0XFx0XFx0XFx0XFx0dm1mLVxcdTAwM2VhZGRyZXNzLCBcXHUwMDI2dm1mLVxcdTAwM2VwdGwpO1xcbjQ4NzA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF2bWYtXFx1MDAzZXB0ZSB8fFxcbjQ4NzE6XFx0XFx0XFx0XFx0XFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVxcdTAwM2VwdGUpLFxcbjQ4NzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dm1mLVxcdTAwM2VvcmlnX3B0ZSkpKVxcbjQ4NzM6XFx0XFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNDg3NDpcXHRcXG40ODc1OlxcdFxcdFxcdFxcdC8qXFxuNDg3NjpcXHRcXHRcXHRcXHQgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJ3QgYmVcXG40ODc3OlxcdFxcdFxcdFxcdCAqIGZyZWVkLlxcbjQ4Nzg6XFx0XFx0XFx0XFx0ICovXFxuNDg3OTpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKTtcXG40ODgwOlxcdFxcdFxcdFxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbjQ4ODE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcXG40ODgyOlxcdFxcbjQ4ODM6XFx0XFx0XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG40ODg0OlxcdFxcdFxcdFxcdFxcdHB0ZV91bm1hcF91bmxvY2sodm1mLVxcdTAwM2VwdGUsIHZtZi1cXHUwMDNlcHRsKTtcXG40ODg1OlxcdFxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXFx1MDAzZXBhZ2UpO1xcbjQ4ODY6XFx0XFx0XFx0XFx0XFx0cmV0ID0gcGdtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcXG40ODg3OlxcdFxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuNDg4ODpcXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjQ4ODk6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NTAuNTIzODA2OTQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzE2Njg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBDb25kaXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gdGhhdCBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpYCBjb25kaXRpb24uIEl0J3MgdGhlIGNydXggb2YgdGhpcyBsb2dpYywgdGhlIGdhdGVrZWVwZXIuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5IGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZG9pbmc/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGNvbXBsZXRlbHkuXG5cblRoZSBuYW1lIHNjcmVhbXMgXCJwcml2YWN5XCIgb3IgXCJhY2Nlc3MgY29udHJvbFwiIGZvciBhIGRldmljZSwgYnV0IEkgbmVlZCB0aGUgZGV0YWlscy4gSXMgaXQgYSBtYWNybz8gQSBmdW5jdGlvbiBjYWxsPyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBkZWZpbml0aW9uLCBhbmQgZmluZCBvdXQgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBoZXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBpcyBkZWZpbmVkLCBhbmQgc2VlIGhvdyB0aGUgYGVudHJ5YCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZC4gT25seSB0aGVuIGNhbiBJIHRydWx5IGdyYXNwIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NTMuNjU1NDc5NzYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk4Mzg5OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXFx0XFx0XFx0XFx0cHJlc2VudCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yNTY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjgyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODMtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjg2LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjEtXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzYyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYzODpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM5LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XFxuLS1cXG5tbS9obW0uYz0yNDI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTI3My1cXHRcXHQgKi9cXG5tbS9obW0uYzoyNzQ6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTI3NS1cXHRcXHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0yNzctXFx0XFx0XFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcXG5tbS9obW0uYzoyNzg6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yNzktXFx0XFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0yOTEtXFxubW0vaG1tLmM6MjkyOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjkzLVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9obW0uYz0zNDI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmMtMzUyLVxcbm1tL2htbS5jOjM1MzpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMzU0LVxcdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXFx1MDAzZXBnbWFwLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMzYwLVxcbm1tL2htbS5jOjM2MTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTM2Mi1cXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTM3OS1cXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG5tbS9obW0uYzozODA6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zODEtXFx0XFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4NTI9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3MS1cXHRcXHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE4NzI6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4NzMtXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3Ni1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE4Nzc6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTg3OC1cXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNjQ0PXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2NS1cXHRcXHRcXHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjY2NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjY2Ny1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMTQxPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMjM0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzIzNTpcXHRcXHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTMyMzYtXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NTAwNz1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDM2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAzNzpcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDM4LVxcdFxcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTAwMz1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vbWVtb3J5LmMtMTA0NS1cXHRcXHR9XFxubW0vbWVtb3J5LmM6MTA0NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTEwNDctXFx0XFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmMtMTA3MC1cXHRcXHQgKi9cXG5tbS9tZW1vcnkuYzoxMDcxOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1vcnkuYy0xMDcyLVxcdFxcdCAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcXG4tLVxcbm1tL21lbW9yeS5jPTE4MTM9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTgyMi1cXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9tZW1vcnkuYzoxODIzOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9tZW1vcnkuYy0xODI0LVxcdCAgICBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbi0tXFxubW0vbWVtb3J5LmM9NDgyOD12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4NTUtXFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG5tbS9tZW1vcnkuYzo0ODU2OlxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDg1Ny1cXHRcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTY5LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcwOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzEtXFx0XFx0ICAgICEobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpKSB7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE4MS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE4MjpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgzLVxcdFxcdFxcdHdyaXRlID0gTUlHUkFURV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTI0NT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTktXFx0XFx0XFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzAwOlxcdFxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzAxLVxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzMzLVxcdFxcdFxcdFxcdFxcdE1JR1JBVEVfUEZOX01JR1JBVEU7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzozMzQ6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTMzNS1cXHRcXHRcXHRcXHRtcGZuIHw9IE1JR1JBVEVfUEZOX1dSSVRFO1xcbi0tXFxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21wcm90ZWN0LmMtMjM2LVxcdFxcdFxcdG5ld3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KG5ld3B0ZSk7XFxubW0vbXByb3RlY3QuYzoyMzc6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG5tbS9tcHJvdGVjdC5jLTIzOC1cXHRcXHQvKlxcbi0tXFxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE5Mz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5NC17XFxubW0vcGFnZV90YWJsZV9jaGVjay5jOjE5NTpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIHx8XFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE5Ni1cXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTY9c3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzAtXFx0XFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6NzE6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03Mi1cXHRcXHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMwLVxcdFxcdC8qIEhhbmRsZSB1bi1hZGRyZXNzYWJsZSBaT05FX0RFVklDRSBtZW1vcnkgKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMzE6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzItXFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG4tLVxcbm1tL3JtYXAuYz0yNDY3PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNjU1LVxcbm1tL3JtYXAuYzoyNjU2OlxcdFxcdFxcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xcbm1tL3JtYXAuYy0yNjU3LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjA6NTYuOTUzODc2OTQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQ0Nzc2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgKipcblxuT2theSwgc28gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYOKApiByaWdodCwgdGhhdCdzIGRlZmluZWQgaW5saW5lLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzb3VyY2UgaW4gYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gSSdsbCBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdCBoZWFkZXIgZmlsZSB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyByZWFsbHkgZG9pbmcgYW5kIGhvdyBpdCdzIGltcGxlbWVudGVkLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgYWJvdXQgaXRzIHJvbGUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjAwLjE1ODM1OTA1OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdCAqIHdyaXRhYmxlIGVudHJ5P1xcbiAyNzE6XFx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxcbiAyNzI6XFx0ICpcXG4gMjczOlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBkZXZpY2UgcHJpdmF0ZSB3cml0YWJsZSBlbnRyeSwgb3RoZXJ3aXNlXFxuIDI3NDpcXHQgKiBmYWxzZS5cXG4gMjc1OlxcdCAqL1xcbiAyNzY6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI3NzpcXHR7XFxuIDI3ODpcXHRcXHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XFxuIDI3OTpcXHR9XFxuIDI4MDpcXHRcXG4gMjgxOlxcdC8qKlxcbiAyODI6XFx0ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xcbiAyODM6XFx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxcbiAyODQ6XFx0ICpcXG4gMjg1OlxcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIGxlYWYgZW50cnkgaXMgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeSwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAyODY6XFx0ICovXFxuIDI4NzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG4gMjg4OlxcdHtcXG4gMjg5OlxcdFxcdHN3aXRjaCAoc29mdGxlYWZfdHlwZShlbnRyeSkpIHtcXG4gMjkwOlxcdFxcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU6XFxuIDI5MTpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ6XFxuIDI5MjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjkzOlxcdFxcdGRlZmF1bHQ6XFxuIDI5NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdC8qKlxcbiAyOTk6XFx0ICogc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeT9cXG4gMzAwOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMzAxOlxcdCAqXFxuIDMwMjpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeSwgb3RoZXJ3aXNlIGZhbHNlLlxcbiAzMDM6XFx0ICovXFxuIDMwNDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiAzMDU6XFx0e1xcbiAzMDY6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0RFVklDRV9FWENMVVNJVkU7XFxuIDMwNzpcXHR9XFxuIDMwODpcXHRcXG4gMzA5OlxcdC8qKlxcbiAzMTA6XFx0ICogc29mdGxlYWZfaXNfaHdwb2lzb24oKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGhhcmR3YXJlIHBvaXNvbiBlbnRyeT9cXG4gMzExOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMzEyOlxcdCAqXFxuIDMxMzpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgaGFyZHdhcmUgcG9pc29uIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXFxuIDMxNDpcXHQgKi9cXG4gMzE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19od3BvaXNvbihzb2Z0bGVhZl90IGVudHJ5KVxcbiAzMTY6XFx0e1xcbiAzMTc6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX3R5cGUoZW50cnkpID09IFNPRlRMRUFGX0hXUE9JU09OO1xcbiAzMTg6XFx0fVxcbiAzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjAwLjE1ODQ3MDEyOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEwMjE3Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipWZXJpZnlpbmcgdGhlIERldmljZSBQcml2YXRlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGZsYWcgdGhhdCBvc3RlbnNpYmx5IGVuYWJsZXMgZGV2aWNlIHByaXZhdGUgbWVtb3J5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlc3BvbnNpYmxlLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBXaGlsZSB0aGUgbmFtZSBpcyBzdWdnZXN0aXZlLCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdG8gZG91YmxlLWNoZWNrLiBJJ2xsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIHRvIGVuc3VyZSB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgY29ycmVjdGx5IGxpbmtlZCB0byB0aGUgZGVzaXJlZCBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUuIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uLCByZWxhdGVkIHNvdXJjZSBjb2RlLCBhbmQgYW55IGV4aXN0aW5nIGRlc2lnbiBzcGVjaWZpY2F0aW9ucyB0byBjb25jbHVzaXZlbHkgdmVyaWZ5IHRoYXQgZW5hYmxpbmcgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGRlZmluaXRpdmUgbWV0aG9kIHRvIGFjdGl2YXRlIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgc3BhY2UuIEEgbWlzY29uZmlndXJhdGlvbiBoZXJlIHdvdWxkIGJlIGEgc2VyaW91cyBwcm9ibGVtIGxhdGVyIG9uIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMTowMy4zNjg2OTA3OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTk3NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjIyPWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMjMxLVxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG5tbS9LY29uZmlnOjEyMzI6XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxubW0vS2NvbmZpZy0xMjMzLVxcbi0tXFxubW0vS2NvbmZpZz0xMjQ5PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI1MS1cXG5tbS9LY29uZmlnOjEyNTI6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUzLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDMuNDY3ODk4MjA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODM4MDIxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgREVWSUNFX1BSSVZBVEVgIGlzIGNvbmZpcm1lZCBhcyB0aGUgY29uZmlnIEknbSB3b3JraW5nIHdpdGgsIHRoYXQncyBzdGVwIG9uZS4gTm93LCB3YWl0IGEgbWludXRlLCBJIHNlZW0gdG8gcmVtZW1iZXIgYERFVklDRV9QUklWQVRFYCBoYXZpbmcgYSBkZXBlbmRlbmN5IG9uIGBaT05FX0RFVklDRWAuIFJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvZiBgWk9ORV9ERVZJQ0VgJ3MgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYWluIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgY2hhbmdlcyB0byBgREVWSUNFX1BSSVZBVEVgLiBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcgZG93bnN0cmVhbSBpcyBhZmZlY3RlZC4gR290dGEgdHJhY2sgdGhpcyB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjA2Ljc1MTcwNTA1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjIyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIyOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjM6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjI0OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRoZWxwXFxuMTIyODpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIyOTpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTIzMDpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyMzE6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyMzI6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTIzMzpcXHRcXG4xMjM0OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjEyMzU6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTIzNjpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG4xMjM3OlxcdFxcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXFxuMTIzODpcXHRcXHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxcbjEyMzk6XFx0XFxuMTI0MDpcXHQjXFxuMTI0MTpcXHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDYuNzUxODg4NDMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjE1MTEwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBJJ3ZlIGdvdCBhIHNpdHVhdGlvbiB3aGVyZSBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLCBhbmQgYFpPTkVfREVWSUNFYCBpbiB0dXJuIGRlcGVuZHMgb24gYE1FTU9SWV9IT1RSRU1PVkVgLiBUaGF0J3MgYSBjbGFzc2ljIGRlcGVuZGVuY3kgY2hhaW4sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LiBUaGlzIG1lYW5zIHRoYXQgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCBgREVWSUNFX1BSSVZBVEVgIGZ1bGx5LCBJJ20gZ29pbmcgdG8gbmVlZCB0byBncmFzcCB3aGF0IGBaT05FX0RFVklDRWAgaXMgYnJpbmdpbmcgdG8gdGhlIHRhYmxlIGFuZCwgZnVydGhlciBiYWNrLCB3aGF0IGBNRU1PUllfSE9UUkVNT1ZFYCdzIGltcGxpY2F0aW9ucyBhcmUuIEJlZm9yZSBJIGdldCBhbnkgZnVydGhlciwgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZm9jdXMgb24gdW50YW5nbGluZyBgREVWSUNFX1BSSVZBVEVgJ3MgZGVwZW5kZW5jaWVzLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBERVZJQ0VfUFJJVkFURWAgaXRzZWxmLCB0byBzZWUgd2hhdCB0aGlzIHdob2xlIGNhc2NhZGUgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSByZXF1aXJlbWVudHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDkuNzczNDAyMDI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTI6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI1MzpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI1NDpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI1NTpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGhlbHBcXG4xMjU4OlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjU5OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNjA6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI2MTpcXHRcXG4xMjYyOlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNjM6XFx0XFx0Ym9vbFxcbjEyNjQ6XFx0XFxuMTI2NTpcXHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXFxuMTI2NjpcXHRcXHRib29sXFxuMTI2NzpcXHRjb25maWcgQVJDSF9IQVNfUEtFWVNcXG4xMjY4OlxcdFxcdGJvb2xcXG4xMjY5OlxcdFxcbjEyNzA6XFx0Y29uZmlnIEFSQ0hfVVNFU19QR19BUkNIXzJcXG4xMjcxOlxcdFxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MDkuNzczNTM2NTc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTEyMzI3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgREVWSUNFX1BSSVZBVEVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBhdCBwbGF5PyBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgd2l0aGluIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgLiBJdCdzIGNydWNpYWwsIGFuZCBhbHdheXMgY29tcGlsZWQsIGJ1dCB0aGUgc3BlY2lmaWMgcGF0aCBtb2RpZmllZCBpczogdGhlIGJyYW5jaCB0aGF0J3MgdHJpZ2dlcmVkIHdoZW4gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAgZXZhbHVhdGVzIHRvIHRydWUuXG5cblRoYXQgY29uZGl0aW9uJ3MgaW1wb3J0YW50LiBJdCByZXF1aXJlcyBgREVWSUNFX1BSSVZBVEVgIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGF0IGEgZHJpdmVyIGlzIGFjdHVhbGx5IHVzaW5nIHRoaXMgZGV2aWNlLXByaXZhdGUgbWVtb3J5LiBOb3V2ZWF1IGlzIGFuIGV4YW1wbGUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IGZ1enppbmc6IElzIGl0IHdvcnRoIGZvY3VzaW5nIG9uIHRoaXM/IFllcywgYWJzb2x1dGVseS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQgZmxhc2hlczogYGRvX3N3YXBfcGFnZWAgaXMgYSAqZ2VuZXJpYyogaG90LXBhdGggZnVuY3Rpb24sIGEgZnVuY3Rpb24gdGhhdOKAmXMgZnVuZGFtZW50YWwsIGFuZCBmcmVxdWVudGx5IGhpdC4gSG1tLCBzaG91bGQgSSBsaXN0IGl0IGluIGBGb2N1c1N5bWJvbHNgPyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucyBmcm9tIGJlaW5nIHNrZXdlZC4gU2luY2UgYGRvX3N3YXBfcGFnZWAgaXMgY2xlYXJseSBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIEkgc2hvdWxkIGF2b2lkIGluY2x1ZGluZyBpdC5cblxuT2theSwgaXMgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9uIHRvIGNvbnNpZGVyPyBUaGUgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsICpvbmx5KiBtb2RpZmllcyBgZG9fc3dhcF9wYWdlYC4gU28sIEkgY2FuIHByb2JhYmx5IGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBCdXQsIGhvbGQgb27igKYgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0ICpjYWxscyogdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IE5vLCBsb29raW5nIHRocm91Z2ggdGhlIHBhdGNoIGFnYWluLCBpdCdzIGNsZWFyIGl0IGp1c3QgY2hhbmdlcyBgZG9fc3dhcF9wYWdlYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBtb2RpZmllZCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MTUuNzg0NzcyOTE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI4OTk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190cnlsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTk4MD1zdGF0aWMgaW50IHRyeV9yZXN0b3JlX2V4Y2x1c2l2ZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy05ODYtXFxubW0vbWVtb3J5LmM6OTg3OlxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbm1tL21lbW9yeS5jLTk4OC1cXHRcXHRyZXN0b3JlX2V4Y2x1c2l2ZV9wdGUodm1hLCBmb2xpbywgcGFnZSwgYWRkciwgcHRlcCwgb3JpZ19wdGUpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDE4Nz1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy00MjE4LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjQyMTk6XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy00MjIwLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTQyNjA9c3RhdGljIGJvb2wgd3BfY2FuX3JldXNlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTQyODYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL21lbW9yeS5jOjQyODc6XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy00Mjg4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ4Mjg9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODc5LVxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXFx1MDAzZXBhZ2UpO1xcbm1tL21lbW9yeS5jOjQ4ODA6XFx0XFx0XFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vbWVtb3J5LmMtNDg4MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMToxNS44NzkwNzc2ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4NDA5MDM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgKm9ubHkqIG1vZGlmaWVzIGBkb19zd2FwX3BhZ2VgLiBTaW5jZSBgZG9fc3dhcF9wYWdlYCBpcywgYXMgSSByZWNhbGwsIGEgZmFpcmx5IGdlbmVyaWMgZnVuY3Rpb24gdGhhdCdzIGEgZnJlcXVlbnQgaG90LXBhdGgsIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJIHNob3VsZG4ndCBsaXN0IGl0IGRpcmVjdGx5IHdpdGhpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCdzIGEgdGV4dGJvb2sgY2FzZSBvZiBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuXG5IbW0sIGJ1dCBhcmUgdGhlcmUgKmFueSogb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFwcHJvcHJpYXRlIHRvIGxpc3Q/IFBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHN3YXAgb3BlcmF0aW9uPyBNYXliZSBgbWlncmF0ZV90b19yYW1gIGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0J3MgYSBmdW5jdGlvbiBwb2ludGVyLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBmb3IgZnV0dXJlIHBhdGNoZXMuXG5cblNvLCBhY2NvcmRpbmcgdG8gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgcHJvYmFibHkgYmUgZW1wdHkuIFRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZXkgYWxzbyBzdWdnZXN0IHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZWF2aW5nIGl0IGVtcHR5IGFsaWducyB3aXRoIHRoaXMgZ3VpZGFuY2UuIFRoYXQgc2VlbXMgc2Vuc2libGUuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgYERFVklDRV9QUklWQVRFYCBpcyBpbnZvbHZlZCwgYW5kIEkgcmVtZW1iZXIgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgQ09ORklHX1pPTkVfREVWSUNFYC4gU28sIGBERVZJQ0VfUFJJVkFURWAgZmVlbHMgbGlrZSBhIGdvb2QgY2hvaWNlIHRvIGluY2x1ZGUgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5XYWl0IGEgbWludXRlLCBgREVWSUNFX1BSSVZBVEVgIGlzIGEgYm9vbGVhbiBjb25maWcsIHNvIEkgc2hvdWxkIGJlIGdvb2QuXG5cbkxldCBtZSB0aGluay4gQWggeWVzLCBgZG9fc3dhcF9wYWdlYCBuZWVkcyBgQ09ORklHX1NXQVBgLiBMZXQgbWUganVzdCBiZSBjb21wbGV0ZWx5IHN1cmUgdGhhdCBgZG9fc3dhcF9wYWdlYCBpc24ndCBjb21waWxlZCB3aXRob3V0IGBDT05GSUdfU1dBUGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTM5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjIxLjE2MzE3MDk4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MTIyNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc3dhcF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTUwODE9dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUxMDQtXFxubW0vaHVnZV9tZW1vcnkuYzo1MTA1OlxcdC8qIFNlZSBkb19zd2FwX3BhZ2UoKTogcmVzdG9yZSBQQUdFX05PTkUgZm9yIFJXUCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTEwNi1cXHRpZiAocG1kX3N3cF91ZmZkKCpwdm13LVxcdTAwM2VwbWQpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0vaW50ZXJuYWwuaD01NzA9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3OC1cXG5tbS9pbnRlcm5hbC5oOjU3OTp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaC01ODAtdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTE0Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9zd2FwaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTE2OS1cXHRcXHRcXHQgKiBIZXJlIHRoZSBwdGwgaXMgb25seSB1c2VkIHRvIGNoZWNrIHB0ZV9zYW1lKCkgaW5cXG5tbS9raHVnZXBhZ2VkLmM6MTE3MDpcXHRcXHRcXHQgKiBkb19zd2FwX3BhZ2UoKSwgc28gcmVhZG9ubHkgdmVyc2lvbiBpcyBlbm91Z2guXFxubW0va2h1Z2VwYWdlZC5jLTExNzEtXFx0XFx0XFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTIwMC1cXHRcXHR2bWYucHRsID0gcHRsO1xcbm1tL2todWdlcGFnZWQuYzoxMjAxOlxcdFxcdHJldCA9IGRvX3N3YXBfcGFnZShcXHUwMDI2dm1mKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTIwMi1cXHRcXHQvKiBXaGljaCB1bm1hcHMgcHRlIChhZnRlciBwZXJoYXBzIHJlLWNoZWNraW5nIHRoZSBlbnRyeSkgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjA1LVxcdFxcdC8qXFxubW0va2h1Z2VwYWdlZC5jOjEyMDY6XFx0XFx0ICogZG9fc3dhcF9wYWdlIHJldHVybnMgVk1fRkFVTFRfUkVUUlkgd2l0aCByZWxlYXNlZCBtbWFwX2xvY2suXFxubW0va2h1Z2VwYWdlZC5jLTEyMDctXFx0XFx0ICogTm90ZSB3ZSB0cmVhdCBWTV9GQVVMVF9SRVRSWSBhcyBWTV9GQVVMVF9FUlJPUiBoZXJlIGJlY2F1c2VcXG4tLVxcbm1tL2tzbS5jPTMxNDA9c3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9rc20uYy0zMTYyLVxcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXFxubW0va3NtLmM6MzE2MzpcXHRcXHRyZXR1cm4gZm9saW87XFx0XFx0LyogbGV0IGRvX3N3YXBfcGFnZSByZXBvcnQgdGhlIGVycm9yICovXFxubW0va3NtLmMtMzE2NC1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA2NT1zdGF0aWMgaW50IG1lX3BhZ2VjYWNoZV9kaXJ0eShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMDk3LSAqICAgICAgICBjb3JydXB0ZWQgZGF0YSBhbmQgc2hhbGwgYmUga2lsbGVkICh3ZSBpbnN0YWxsZWQgc2ltcGxlXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMDk4OiAqICAgICAgICBpbnRlcmNlcHRpb24gY29kZSBpbiBkb19zd2FwX3BhZ2UgdG8gY2F0Y2ggaXQpLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTA5OS0gKlxcbi0tXFxubW0vbWVtb3J5LmM9OTQyPXN0YXRpYyB2b2lkIHJlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1Ni1cXG5tbS9tZW1vcnkuYzo5NTc6XFx0LyogU2VlIGRvX3N3YXBfcGFnZSgpOiByZXN0b3JlIFBBR0VfTk9ORSBmb3IgUldQICovXFxubW0vbWVtb3J5LmMtOTU4LVxcdGlmIChwdGVfc3dwX3VmZmQob3JpZ19wdGUpIFxcdTAwMjZcXHUwMDI2IHVzZXJmYXVsdGZkX3J3cCh2bWEpKVxcbi0tXFxubW0vbWVtb3J5LmM9MzU5OT1pbnQgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMzYwOC0gKiBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaCBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZFxcbm1tL21lbW9yeS5jOjM2MDk6ICogcGFydHMsIGRvX3N3YXBfcGFnZSBtdXN0IGNoZWNrIHVuZGVyIGxvY2sgYmVmb3JlIHVubWFwcGluZyB0aGUgcHRlIGFuZFxcbm1tL21lbW9yeS5jLTM2MTAtICogcHJvY2VlZGluZyAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrO1xcbi0tXFxubW0vbWVtb3J5LmM9NDc0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ3ODYtXFx0LypcXG5tbS9tZW1vcnkuYzo0Nzg3OlxcdCAqIEZvciBkb19zd2FwX3BhZ2UsIGZpbmQgdGhlIGhpZ2hlc3Qgb3JkZXIgd2hlcmUgdGhlIGFsaWduZWQgcmFuZ2UgaXNcXG5tbS9tZW1vcnkuYy00Nzg4LVxcdCAqIGNvbXBsZXRlbHkgc3dhcCBlbnRyaWVzIHdpdGggY29udGlndW91cyBzd2FwIG9mZnNldHMuXFxuLS1cXG5tbS9tZW1vcnkuYz00ODEwPXN0YXRpYyB2b2lkIGNoZWNrX3N3YXBfZXhjbHVzaXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LFxcbi0tXFxubW0vbWVtb3J5LmMtNDgyNy0gKi9cXG5tbS9tZW1vcnkuYzo0ODI4OnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL21lbW9yeS5jLTQ4Mjkte1xcbi0tXFxubW0vbWVtb3J5LmMtNTE3Mi1cXHRzZXRfcHRlcyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwLCBwdGUsIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnkuYzo1MTczOlxcdGFyY2hfZG9fc3dhcF9wYWdlX25yKHZtYS1cXHUwMDNldm1fbW0sIHZtYSwgYWRkcmVzcyxcXG5tbS9tZW1vcnkuYy01MTc0LVxcdFxcdFxcdHB0ZSwgcHRlLCBucl9wYWdlcyk7XFxuLS1cXG5tbS9tZW1vcnkuYz02NDYyPXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy02NTA4LVxcdGlmICghcHRlX3ByZXNlbnQodm1mLVxcdTAwM2VvcmlnX3B0ZSkpXFxubW0vbWVtb3J5LmM6NjUwOTpcXHRcXHRyZXR1cm4gZG9fc3dhcF9wYWdlKHZtZik7XFxubW0vbWVtb3J5LmMtNjUxMC1cXG4tLVxcbm1tL21pZ3JhdGUuYz0zNTE9c3RhdGljIGJvb2wgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy00MDctXFxubW0vbWlncmF0ZS5jOjQwODpcXHRcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9taWdyYXRlLmMtNDA5LVxcdFxcdGlmIChwdGVfc3dwX3VmZmQob2xkX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9wYWdlX2lvLmM9NDE4PXN0YXRpYyBib29sIHN3YXBfcmVhZF9mb2xpb196ZXJvbWFwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9wYWdlX2lvLmMtNDI4LVxcdCAqIGN1cnJlbnRseSBoYW5kbGVkLiBSZXR1cm4gdHJ1ZSB3aXRob3V0IG1hcmtpbmcgdGhlIGZvbGlvIHVwdG9kYXRlIHNvXFxubW0vcGFnZV9pby5jOjQyOTpcXHQgKiB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKCkgd2lsbCBzaWdidXMpLlxcbm1tL3BhZ2VfaW8uYy00MzAtXFx0ICogRm9saW8gbG9jayBzdGFiaWxpemVzIHRoZSBjbHVzdGVyIGFuZCBtYXAsIHNvIHRoZSBjaGVjayBpcyBzYWZlLlxcbi0tXFxubW0vcm1hcC5jPTI0Njc9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI3MjktXFx0XFx0XFx0ICogU3RvcmUgdGhlIHBmbiBvZiB0aGUgcGFnZSBpbiBhIHNwZWNpYWwgbWlncmF0aW9uXFxubW0vcm1hcC5jOjI3MzA6XFx0XFx0XFx0ICogcHRlLiBkb19zd2FwX3BhZ2UoKSB3aWxsIHdhaXQgdW50aWwgdGhlIG1pZ3JhdGlvblxcbm1tL3JtYXAuYy0yNzMxLVxcdFxcdFxcdCAqIHB0ZSBpcyByZW1vdmVkIGFuZCB0aGVuIHJlc3RhcnQgZmF1bHQgaGFuZGxpbmcuXFxuLS1cXG5tbS9ybWFwLmM9Mjg3MT1zdHJ1Y3QgcGFnZSAqbWFrZV9kZXZpY2VfZXhjbHVzaXZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9ybWFwLmMtMjk0OS1cXHQgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBkZXZpY2UtZXhjbHVzaXZlIFBGTiBzd2FwIFBURS5cXG5tbS9ybWFwLmM6Mjk1MDpcXHQgKiBkb19zd2FwX3BhZ2UoKSB3aWxsIHRyaWdnZXIgdGhlIGNvbnZlcnNpb24gYmFjayB3aGlsZSBob2xkaW5nIHRoZVxcbm1tL3JtYXAuYy0yOTUxLVxcdCAqIGZvbGlvIGxvY2suXFxuLS1cXG5tbS9zaG1lbS5jPTIwMzk9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMDc2LSAqIEluIGEgZnV0dXJlIHJlbGVhc2UsIHRoaXMgbWF5IHdlbGwgYmUgZXh0ZW5kZWQgdG8gcmVzcGVjdCBjcHVzZXQgYW5kXFxubW0vc2htZW0uYzoyMDc3OiAqIE5VTUEgbWVtcG9saWN5LCBhbmQgYXBwbGllZCBhbHNvIHRvIGFub255bW91cyBwYWdlcyBpbiBkb19zd2FwX3BhZ2UoKTtcXG5tbS9zaG1lbS5jLTIwNzgtICogYnV0IGZvciBub3cgaXQgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIHpvbmUuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE4MzA9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTg3MC0gKiAgIENQVTFcXHRcXHRcXHRcXHRDUFUyXFxubW0vc3dhcGZpbGUuYzoxODcxOiAqICAgZG9fc3dhcF9wYWdlKClcXG5tbS9zd2FwZmlsZS5jLTE4NzItICogICAgIC4uLlxcdFxcdFxcdFxcdHN3YXBvZmYrc3dhcG9uXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4NzgtICogY2hhbmdpbmcgcGFydGx5IGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzd2FwIGVudHJ5IG1heSBiZSBmb3IgYW5vdGhlclxcbm1tL3N3YXBmaWxlLmM6MTg3OTogKiBzd2FwIGRldmljZSB3aGljaCBoYXMgYmVlbiBzd2Fwb2ZmLiAgQW5kIGluIGRvX3N3YXBfcGFnZSgpLCBhZnRlclxcbm1tL3N3YXBmaWxlLmMtMTg4MC0gKiB0aGUgcGFnZSBpcyByZWFkIGZyb20gdGhlIHN3YXAgZGV2aWNlLCB0aGUgUFRFIGlzIHZlcmlmaWVkIG5vdFxcbi0tXFxubW0vc3dhcGZpbGUuYz0yNDEyPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNDc4LVxcdFxcdC8qXFxubW0vc3dhcGZpbGUuYzoyNDc5OlxcdFxcdCAqIFNlZSBkb19zd2FwX3BhZ2UoKTogd3JpdGViYWNrIHdvdWxkIGJlIHByb2JsZW1hdGljLlxcbm1tL3N3YXBmaWxlLmMtMjQ4MC1cXHRcXHQgKiBIb3dldmVyLCB3ZSBkbyBhIGZvbGlvX3dhaXRfd3JpdGViYWNrKCkganVzdCBiZWZvcmUgdGhpc1xcbi0tXFxubW0vc3dhcGZpbGUuYy0yNTA3LVxcbm1tL3N3YXBmaWxlLmM6MjUwODpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9zd2FwZmlsZS5jLTI1MDktXFx0aWYgKHB0ZV9zd3BfdWZmZChvbGRfcHRlKSBcXHUwMDI2XFx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcXG4tLVxcbm1tL3pzd2FwLmM9MTQ3OD1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE1NzItICogIGludG8gdGhlIHBhZ2UgZHVlIHRvIGEgZGVjb21wcmVzc2lvbiBmYWlsdXJlLiBUaGUgZm9saW8gaXMgdW5sb2NrZWQsIGJ1dFxcbm1tL3pzd2FwLmM6MTU3MzogKiAgTk9UIG1hcmtlZCB1cC10by1kYXRlLCBzbyB0aGF0IGFuIElPIGVycm9yIGlzIGVtaXR0ZWQgKGUuZy4gZG9fc3dhcF9wYWdlKClcXG5tbS96c3dhcC5jLTE1NzQtICogIHdpbGwgU0lHQlVTKS5cXG4tLVxcbm1tL3pzd2FwLmMtMTU3OC0gKiAgYnV0IE5PVCBtYXJrZWQgdXAtdG8tZGF0ZSwgc28gdGhhdCBhbiBJTyBlcnJvciBpcyBlbWl0dGVkIChlLmcuXFxubW0venN3YXAuYzoxNTc5OiAqICBkb19zd2FwX3BhZ2UoKSB3aWxsIFNJR0JVUykuXFxubW0venN3YXAuYy0xNTgwLSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjIxLjI2MjU4NzgwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0MjIwOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgZG9fc3dhcF9wYWdlYCBpcyBhbHdheXMgY29tcGlsZWQsIHRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIEhvd2V2ZXIsIHRoZSBtb2RpZmllZCBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gYERFVklDRV9QUklWQVRFYCBpcyBzZXQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBgREVWSUNFX1BSSVZBVEVgIHdpdGhpbiBteSBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciBkZXBlbmRlbmNpZXMuIEkgcmVjYWxsIHRoYXQgYERFVklDRV9QUklWQVRFYCBoaW5nZXMgb24gYFpPTkVfREVWSUNFYC4gSG1tLCBkbyBJIGV4cGxpY2l0bHkgaW5jbHVkZSBgWk9ORV9ERVZJQ0VgIG15c2VsZiwgb3IgZG9lcyB0aGUgS2NvbmZpZyBzeXN0ZW0gaGFuZGxlIHRoYXQgYXV0b21hdGljYWxseT9cblxuVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGFuZCBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lY2Vzc2FyeSBmb3IgYSBzdGF0aWMgY29tcGlsZSBpbnRvIHZtbGludXggd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0LiBTaW5jZSBgWk9ORV9ERVZJQ0VgIGlzIGEgZGVwZW5kZW5jeSBvZiBgREVWSUNFX1BSSVZBVEVgLCB3aGljaCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIHRhcmdldCBjb2RlLCBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBaT05FX0RFVklDRWAuXG5cbkJ1dCBob2xkIG9uLCBgWk9ORV9ERVZJQ0VgIGFsc28gaGFzIGl0cyBvd24gZGVwZW5kZW5jeTogYE1FTU9SWV9IT1RSRU1PVkVgLiBBbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2UgYSBxdWljayBjaGVjayBvZiBgTUVNT1JZX0hPVFJFTU9WRWAncyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTE4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjI1LjUwNjgxMjc3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3NzgwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTU3OD1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTU3OS1cXG5tbS9LY29uZmlnOjU4MDpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWctNTgxLVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDQ6MjE6MjUuNTc2NTk4MDA3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDI5MTgwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgTUVNT1JZX0hPVFJFTU9WRWAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRvIHJlYWxseSBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1FTU9SWV9IT1RSRU1PVkVgLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgaGVyZS4gSSBrbm93IHRoaXMgYXJlYSBpbnNpZGUgYW5kIG91dCwgYnV0IEkgYWx3YXlzIGJlbGlldmUgaW4gZG91YmxlLWNoZWNraW5nIGFuZCBjb25maXJtaW5nIHRoYXQgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLiBUaGlzIGNvdWxkIGludm9sdmUgZGl2aW5nIGRlZXAgaW50byB0aGUga2VybmVsIHNvdXJjZSwgZXhhbWluaW5nIHRoZSByZWxldmFudCBkcml2ZXJzLCBhbmQgdHJhY2luZyB0aHJvdWdoIHRoZSBob3RwbHVnIGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gYnVpbGQgYSByb2NrLXNvbGlkIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb25hbGl0eSwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcywgb3IgbW9yZSBwZXJpcGhlcmFsIHRoaW5ncz8gV2UgY2FuJ3QgYWZmb3JkIGFueSBzdXJwcmlzZXMuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IHN1YnN5c3RlbXMgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IG1heSBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMToyOC45MTk1MjAxMjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTc4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTc4OlxcdGVuZGNob2ljZVxcbiA1Nzk6XFx0XFxuIDU4MDpcXHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcbiA1ODE6XFx0XFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbiA1ODI6XFx0XFx0c2VsZWN0IE1JR1JBVElPTlxcbiA1ODM6XFx0XFxuIDU4NDpcXHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG4gNTg1OlxcdFxcdGRlZl9ib29sIHlcXG4gNTg2OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcXG4gNTg3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMToyOC45MjAyNjcxNTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4OTM1MzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNZW1vcnkgSG90cmVtb3ZlIEFuYWx5c2lzKipcblxuUmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBNRU1PUllfSE9UUkVNT1ZFYC4uLiBoYW5nIG9uLCB0aGF0IHNlZW1zIG9kZC4gSXQncyBsaXN0ZWQgYXMgaGF2aW5nIG5vIGRpcmVjdCBkZXBlbmRlbmNpZXM/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gY2hlY2sgaXRzIHVzYWdlIGluIHRoZSBzb3VyY2UgY29kZTsgdGhhdCBzZWVtcyBzdXNwaWNpb3VzLlxuXG5BaCwgaXQgY2xpY2tzLCBJIGJldCB3aGF0J3MgZ29pbmcgb24gaXMgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbGlrZWx5ICpjb25kaXRpb25hbGx5KiBlbmFibGVkLiBUaGUgbW9zdCBvYnZpb3VzIHNjZW5hcmlvIGlzIHRoYXQgaXQncyBidXJpZWQgaW5zaWRlIGFuIGBpZiBNRU1PUllfSE9UUExVR2AgYmxvY2suIFRoZSBkZXBlbmRlbmNpZXMgd2lsbCBzdGVtIGZyb20gYE1FTU9SWV9IT1RQTFVHYCwgbm90IGBNRU1PUllfSE9UUkVNT1ZFYCBkaXJlY3RseS4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gT2theSwgbm93IEkga25vdyB3aGVyZSB0byBsb29rLiBJJ2xsIGNoZWNrIHRoYXQgYGlmYCBzdGF0ZW1lbnQgdG8gY29uZmlybSwgYnV0IEkgY2FuIGFscmVhZHkgc2VlIHdoZXJlIHRoaXMgaXMgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTc1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMTozMi4xMDk2NDg1NjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDUwOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MDQ9Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXFxuLS1cXG5tbS9LY29uZmlnLTUwNy1cXG5tbS9LY29uZmlnOjUwODpjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUwOS1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnLTUxMS0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MTI6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTEzLVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcbi0tXFxubW0vS2NvbmZpZy01MTUtXFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWc6NTE2OlxcdGRlcGVuZHMgb24gQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUxNy1cXHRkZXBlbmRzIG9uIDY0QklUXFxuLS1cXG5tbS9LY29uZmlnLTUxOS1cXG5tbS9LY29uZmlnOjUyMDppZiBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTIxLVxcbi0tXFxubW0vS2NvbmZpZz01ODQ9Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXFxuLS1cXG5tbS9LY29uZmlnLTU4Ny1cXG5tbS9LY29uZmlnOjU4ODplbmRpZiAjIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01ODktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDA0OjIxOjMyLjE3NDcwMzkxOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA1ODUxMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgSG90cGx1ZyBhbmQgRGV2aWNlIFByaXZhdGUgTWVtb3J5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbmVzdGVkIHdpdGhpbiBgaWYgTUVNT1JZX0hPVFBMVUdgLiBUaGVyZWZvcmUsIHRvIGVuYWJsZSBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYE1FTU9SWV9IT1RQTFVHYC4gQnV0IHdhaXQsIGBNRU1PUllfSE9UUExVR2AgaGFzIGl0cyBvd24gZGVwZW5kZW5jaWVzOiBgU1BBUlNFTUVNX1ZNRU1NQVBgLCBgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdgLCBhbmQgYDY0QklUYC4gTGV0J3Mga2VlcCB0aGlzIGNsZWFuIGFuZCBzaW1wbGUsIEknbGwganVzdCBmb2N1cyBvbiB0aGUgY29yZTogSSdsbCBpbmNsdWRlIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBNRU1PUllfSE9UUExVR2AuXG5cbk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJJ20gbWlzc2luZz8gSSBzaG91bGQgY2hlY2sgYG1pZ3JhdGVfdG9fcmFtYCBpbiBgbW0vbWVtb3J5LmNgLiBMZXQgbWUgcmV2aWV3IHRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcblx0XHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuLi4uXG5cdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSk7XG5cdFx0XHRcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuXHRcdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG5cblx0XHRcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuXHRcdFx0XHRcdHB0ZV91bm1hcF91bmxvY2sodm1mLVx1MDAzZXB0ZSwgdm1mLVx1MDAzZXB0bCk7XG5cdFx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcblx0XHRcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcblx0XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5gYGBcblxuQWgsIHJpZ2h0LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBjb252ZXJ0cyBwYWdlIG9wZXJhdGlvbnMgdG8gZm9saW8gb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBkdXJpbmcgc3dhcC4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWZmZWN0cyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbWlncmF0aW9uIHRvIFJBTS5cblxuVGhlIHJlbGV2YW50IEVuYWJsZUNvbmZpZ3MgYXJlOiBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgTUVNT1JZX0hPVFBMVUdgLiBDb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlLCBzaG91bGQgSSBmdXp6IHRoaXM/IEFic29sdXRlbHksIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuTGV0IG1lIGRvdWJsZS1jaGVjazogaXMganVzdCBgREVWSUNFX1BSSVZBVEVgIHN1ZmZpY2llbnQ/IFllcywgYERFVklDRV9QUklWQVRFYCBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSwgc28gdGhpcyBpcyB0aGUgYmFzaXMuIE9rYXksIEknbSBjb25maWRlbnQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUyMiwiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNDoyMTozOC42ODA1NTc0MTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUzODM2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgcGFnZSBvcGVyYXRpb25zIHRvIGZvbGlvIG9wZXJhdGlvbnMgaW4gdGhlIGRldmljZSBwcml2YXRlIG1lbW9yeSBoYW5kbGluZyBwYXRoIG9mIGRvX3N3YXBfcGFnZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaXMgbWlncmF0ZWQgdG8gUkFNLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[1] Phase: Succeeded StartedAt: 2026-08-03 04:21:52 +0000 UTC FinishedAt: 2026-08-03 04:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 04:21:52 +0000 UTC FinishedAt: 2026-08-03 04:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2] Phase: Succeeded StartedAt: 2026-08-03 04:21:53 +0000 UTC FinishedAt: 2026-08-03 08:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 04:21:53 +0000 UTC FinishedAt: 2026-08-03 08:19:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 04:21:53 +0000 UTC FinishedAt: 2026-08-03 04:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 04:21:53 +0000 UTC FinishedAt: 2026-08-03 04:22:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtlv4l/series-workflowtlv4l-convert-artifact-1364554141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 04:22:03 +0000 UTC FinishedAt: 2026-08-03 04:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 04:22:03 +0000 UTC FinishedAt: 2026-08-03 04:44:29 +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:*c44fb3af-cfd9-41a2-8a9a-419be4724d3b,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-workflowtlv4l/series-workflowtlv4l-convert-artifact-1364554141/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": "206452bc-d716-4e53-8b6a-2956853d6b97", "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-workflowtlv4l/series-workflowtlv4l-build-action-1376379603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 04:22:03 +0000 UTC FinishedAt: 2026-08-03 04:44:19 +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:*c44fb3af-cfd9-41a2-8a9a-419be4724d3b,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-workflowtlv4l/series-workflowtlv4l-convert-artifact-1364554141/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": "206452bc-d716-4e53-8b6a-2956853d6b97", "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-workflowtlv4l/series-workflowtlv4l-build-action-1376379603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 04:44:29 +0000 UTC FinishedAt: 2026-08-03 04:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 04:44:29 +0000 UTC FinishedAt: 2026-08-03 04:44:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 04:44:29 +0000 UTC FinishedAt: 2026-08-03 04:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 04:44:29 +0000 UTC FinishedAt: 2026-08-03 04:44:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtlv4l/series-workflowtlv4l-convert-artifact-4112934008/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 04:45:00 +0000 UTC FinishedAt: 2026-08-03 04:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 04:45:00 +0000 UTC FinishedAt: 2026-08-03 04:47:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*206452bc-d716-4e53-8b6a-2956853d6b97,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-workflowtlv4l/series-workflowtlv4l-build-action-1376379603/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-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 04:47:11 +0000 UTC FinishedAt: 2026-08-03 04:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 04:47:11 +0000 UTC FinishedAt: 2026-08-03 04:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 04:47:11 +0000 UTC FinishedAt: 2026-08-03 05:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 04:47:11 +0000 UTC FinishedAt: 2026-08-03 05:13:40 +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:*c44fb3af-cfd9-41a2-8a9a-419be4724d3b,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-workflowtlv4l/series-workflowtlv4l-convert-artifact-4112934008/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": "0ae15cf0-d45a-4cde-8aef-0df8ac71570e", "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-workflowtlv4l/series-workflowtlv4l-build-action-2127563108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 04:47:11 +0000 UTC FinishedAt: 2026-08-03 05:13:02 +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:*c44fb3af-cfd9-41a2-8a9a-419be4724d3b,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-workflowtlv4l/series-workflowtlv4l-convert-artifact-4112934008/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": "0ae15cf0-d45a-4cde-8aef-0df8ac71570e", "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-workflowtlv4l/series-workflowtlv4l-build-action-2127563108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 05:13:40 +0000 UTC FinishedAt: 2026-08-03 05:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 05:13:40 +0000 UTC FinishedAt: 2026-08-03 05:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 05:13:40 +0000 UTC FinishedAt: 2026-08-03 05:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 05:13:40 +0000 UTC FinishedAt: 2026-08-03 05:15:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ae15cf0-d45a-4cde-8aef-0df8ac71570e,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-workflowtlv4l/series-workflowtlv4l-build-action-2127563108/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-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 08:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 08:19:31 +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":[],"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:*206452bc-d716-4e53-8b6a-2956853d6b97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ae15cf0-d45a-4cde-8aef-0df8ac71570e,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-workflowtlv4l/series-workflowtlv4l-build-action-1376379603/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-workflowtlv4l/series-workflowtlv4l-build-action-2127563108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 05:15:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 05:15:52 +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":[],"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-workflowtlv4l/series-workflowtlv4l-convert-artifact-4254302673/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 05:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 05:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 05:15:46 +0000 UTC FinishedAt: 2026-08-03 05:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 05:15:56 +0000 UTC FinishedAt: 2026-08-03 08:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlv4l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a47d7a8a12f194ef5593cc0e7756de19def7761","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG"],"series_id":"1cfe4c1c-104b-4e1d-b8cb-0a3c3bccd0fd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 05:15:56 +0000 UTC FinishedAt: 2026-08-03 08:19:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*206452bc-d716-4e53-8b6a-2956853d6b97,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ae15cf0-d45a-4cde-8aef-0df8ac71570e,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-workflowtlv4l/series-workflowtlv4l-build-action-1376379603/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-workflowtlv4l/series-workflowtlv4l-build-action-2127563108/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-workflowtlv4l/series-workflowtlv4l-convert-artifact-4254302673/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,}