Name: series-workflowsw87c Phase: Failed StartedAt: 2026-07-31 00:24:39 +0000 UTC FinishedAt: 2026-07-31 01:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw87c[0] Phase: Succeeded StartedAt: 2026-07-31 00:24:39 +0000 UTC FinishedAt: 2026-07-31 01:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw87c[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 00:24:39 +0000 UTC FinishedAt: 2026-07-31 01:15:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIGRyaXZlciAucmVtb3ZlIGNhbGxiYWNrICh0amExMTAyX3AwX3JlbW92ZSkgYW5kIHNldHMgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIHNvIHRoZSBjYWxsYmFjayBjYW4gY2FuY2VsIGEgd29ya3F1ZXVlLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGV4ZWN1dGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciB1bmJpbmQgYXJlIGV4Y2x1ZGVkIGZyb20gZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YzVlZDI5MmUyNGMwMjllMTUzYjAwMzc2ZjgxODhlNTc2ODI5NzMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTQ6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xuaW5kZXggMDdlOTRhMjQ3OGFjMy4uNjgwNjJhNGM1MTkwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xuQEAgLTYyMCw2ICYjNDM7NjIwLDcgQEAgc3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpO1xuIFxuIFx0cmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpO1xuQEAgLTYzMSw2ICYjNDM7NjMyLDEzIEBAIHN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRqYTExeHhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4ge1xuIFx0aW50IHJldDtcbkBAIC04NDcsNiAmIzQzOzg1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xuIFx0XHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXG4gXHRcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXG4gXHRcdC5wcm9iZVx0XHQ9IHRqYTExMDJfcDBfcHJvYmUsXG4mIzQzO1x0XHQucmVtb3ZlXHRcdD0gdGphMTEwMl9wMF9yZW1vdmUsXG4gXHRcdC5zb2Z0X3Jlc2V0XHQ9IHRqYTExeHhfc29mdF9yZXNldCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXG4gXHRcdC5jb25maWdfaW5pdFx0PSB0amExMXh4X2NvbmZpZ19pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkcml2ZXIgLnJlbW92ZSBjYWxsYmFjayAodGphMTEwMl9wMF9yZW1vdmUpIGFuZCBzZXRzIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzbyB0aGUgY2FsbGJhY2sgY2FuIGNhbmNlbCBhIHdvcmtxdWV1ZS4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBleGVjdXRlZCBkdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgdW5iaW5kIGFyZSBleGNsdWRlZCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM1ZWQyOTJlMjRjMDI5ZTE1M2IwMDM3NmY4MTg4ZTU3NjgyOTczMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDAxOjE0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYwppbmRleCAwN2U5NGEyNDc4YWMzLi42ODA2MmE0YzUxOTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYwpAQCAtNjIwLDYgJiM0Mzs2MjAsNyBAQCBzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2LSZndDtwaHlkZXYgPSBwaHlkZXY7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiAJSU5JVF9XT1JLKCZhbXA7cHJpdi0mZ3Q7cGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpOwogCiAJcmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpOwpAQCAtNjMxLDYgJiM0Mzs2MzIsMTMgQEAgc3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHRqYTExeHhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3BoeV9yZWdpc3Rlcl93b3JrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRqYTExMDJfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBvcnQwKQogewogCWludCByZXQ7CkBAIC04NDcsNiAmIzQzOzg1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0gewogCQkuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsCiAJCS5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsCiAJCS5wcm9iZQkJPSB0amExMTAyX3AwX3Byb2JlLAomIzQzOwkJLnJlbW92ZQkJPSB0amExMTAyX3AwX3JlbW92ZSwKIAkJLnNvZnRfcmVzZXQJPSB0amExMXh4X3NvZnRfcmVzZXQsCiAJCS5jb25maWdfYW5lZwk9IHRqYTExeHhfY29uZmlnX2FuZWcsCiAJCS5jb25maWdfaW5pdAk9IHRqYTExeHhfY29uZmlnX2luaXQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhGdXp6aW5nIERldGVybWluYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgb3Igbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYGZhbHNlYCBpZiBpdCAqb25seSogbW9kaWZpZXMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcywgbGlrZSBgLnJlbW92ZWAsIHdoZW4gZGVhbGluZyB3aXRoIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC4KClJpZ2h0LCBzbyB0aGUgcGF0Y2ggbW9kaWZpZXMgYHRqYTExMDJfcDBfcHJvYmVgIGJ5IGFkZGluZyBgcGh5ZGV2LSZndDtwcml2ID0gcHJpdjtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGlzIGp1c3QgYWJvdXQgdGhhdCBgLnJlbW92ZWAgY2FsbGJhY2s/JiMzNDsgQmVjYXVzZSB0aGUgcGF0Y2ggKmFsc28qIGludHJvZHVjZXMgYSBgdGphMTEwMl9wMF9yZW1vdmVgIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYGNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtwaHlfcmVnaXN0ZXJfd29yayk7YC4gQW5kLCBpdCYjMzk7cyBhc3NpZ25pbmcgYC5yZW1vdmUgPSB0amExMTAyX3AwX3JlbW92ZWAgaW4gdGhlIGB0amExMXh4X2RyaXZlcmAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGB0amExMTAyX3AwX3JlbW92ZWAgd2lsbCB1c2UgYHBoeWRldi0mZ3Q7cHJpdmAuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCEgSXMgYHBoeWRldi0mZ3Q7cHJpdmAgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlPyBHb3R0YSBkb3VibGUgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5ZGV2LVx1MDAzZXByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0yNzU9c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMjc2LXtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjI3NzpcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3OC1cdGludCBtaWlfbW9kZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz01MTc9c3RhdGljIGludCB0amExMXh4X3BhcnNlX2R0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTE5LVx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1MjA6XHRzdHJ1Y3QgdGphMTF4eF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MjEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTMxPXN0YXRpYyBpbnQgdGphMTF4eF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU0MS1cdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTQyOlx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTYxMj1zdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MjItXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjYyMzpcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYyNC1cdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXBoeV9yZWdpc3Rlcl93b3JrLCB0amExMTAyX3AxX3JlZ2lzdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz02MzU9c3RhdGljIHZvaWQgdGphMTEwMl9wMF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNi17XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2Mzc6XHRzdHJ1Y3QgdGphMTF4eF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2NwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIFNpbXBsZSBQSFkgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIGluIGB0amExMTAyX3AwX3Byb2JlYCBpcyBzdHJhaWdodGZvcndhcmQ6IGp1c3QgYXNzaWduaW5nIGBwcml2YCB0byBgcGh5ZGV2LSZndDtwcml2YC4gU2VlbXMgaW5ub2N1b3VzIGVub3VnaC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGVyZSBlbHNlIGlzIGBwaHlkZXYtJmd0O3ByaXZgIHVzZWQ/CgpSaWdodCwgZGlnZ2luZyBpbnRvIGl0LCBJIHNlZSB0aGF0IGJvdGggYHRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlYCBhbmQgYHRqYTExeHhfcGFyc2VfZHRgIHJlbHkgb24gdGhpcyBgcGh5ZGV2LSZndDtwcml2YCBmaWVsZC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYHRqYTExMDJfcDBfcHJvYmVgIGNhbGwuIElmIHRoZXkgYXJlLCB0aGlzIHNpbXBsZSBhc3NpZ25tZW50IGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLCBvciBhdCBsZWFzdCBiZSB2ZXJ5IGltcG9ydGFudCB0byB0aGUgc3RhYmlsaXR5IG9mIHRoZSBkZXZpY2UuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGVpdGhlciBgdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGVgIG9yIGB0amExMXh4X3BhcnNlX2R0YCBhcmUgaW52b2tlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgdGphMTEwMl9wMGAgZGV2aWNlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAgdG8gY29uZmlybSB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTI0ND1zdGF0aWMgaW50IHRqYTExeHhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0yNzQtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzoyNzU6c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMjc2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0zMDA9c3RhdGljIGludCB0amExMXh4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMzIwLVx0XHRyZWdfbWFzayB8PSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6MzIxOlx0XHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMzIyLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTMzMi1cdFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6MzMzOlx0XHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMzM0LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTIKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGB0amExMTAyX3AwYCBjb21wb25lbnQgdXRpbGl6ZXMgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBpbnRpbWF0ZWx5LiBUaGUgc3RydWN0dXJlIHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIG5ldHdvcmsgdHJhbnNjZWl2ZXIsIHBlcmhhcHMgYW4gYXV0b21vdGl2ZSBFdGhlcm5ldCBQSFkuIFRoZSBuYW1pbmcgY29udmVudGlvbiwgd2l0aCB0aGUgYHRqYWAgcHJlZml4LCBzdHJvbmdseSBoaW50cyBhdCBhIGNvbm5lY3Rpb24gdG8gYSBwYXJ0aWN1bGFyIG1hbnVmYWN0dXJlciBhbmQgcGFydCBzZXJpZXMuCgpNeSBhcHByb2FjaCB3b3VsZCBiZTogRmlyc3QsIEkgbmVlZCB0byBvcGVuIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgc3BlY2lmaWNhbGx5LCB0aGUgYHRqYTExeHhfZHJpdmVyYCBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIGFuZCBleGFtaW5lIHRoZSBgdGphMTEwMl9wMGAgaW5zdGFudGlhdGlvbiBvciBkZWZpbml0aW9uIHdpdGhpbiB0aGF0IGRyaXZlci4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgc3lzdGVtYXRpY2FsbHkgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2FsbHMgdG8gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBUaGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uIGl0c2VsZiBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIERpZCB0aGV5IHVzZSBpdD8gSWYgc28sIHdoZXJlIGFuZCBob3c/IElzIHRoZXJlIGEgcG9pbnRlciB0byBpdD8gV2VyZSBhbnkgb2YgaXRzIHBhcmFtZXRlcnMgbW9kaWZpZWQ/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudHMsIG9yIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCB3b3VsZCBjYXVzZSBgdGphMTF4eF9jb25maWdfaW5pdGAgdG8gYmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgaW5pdGlhbGl6aW5nIG9yIGNvbmZpZ3VyaW5nIHRoZSBgdGphMTEwMl9wMGAgY29tcG9uZW50LiBJIHdpbGwgYmUgcXVpY2ssIHRoZSBmaWxlIHN0cnVjdHVyZSBvZiB0aGUgZHJpdmVyIHdpbGwgcHJvdmlkZSBjbHVlcywgYXMgd2lsbCBjb21tb24gcHJvZ3JhbW1pbmcgcGF0dGVybnMgdXNlZCBpbiB0aGUgZmllbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGphMTEwMl9wMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MTEtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2MTI6c3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MTMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NTYtXHRcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo4NTc6XHRcdC5wcm9iZVx0XHQ9IHRqYTExMDJfcDBfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NTgtXHRcdC5yZW1vdmVcdFx0PSB0amExMTAyX3AwX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zLCBkcml2ZXJzLCBhbmQgdGhlIFRKQTExMDI6CgoqKkRpdmluZyBpbnRvIHRoZSBUSkExMTAyIERyaXZlciBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiB0aGUgYHRqYTExMDJfcDBgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRqYTExeHhfZHJpdmVyYCBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBLbm93aW5nIHRoZSBjb21wbGV0ZSBzdHJ1Y3QgZGVmaW5pdGlvbiBpcyBwYXJhbW91bnQuIEl0JiMzOTtzIHRoZSBibHVlcHJpbnQsIHRoZSBmdW5kYW1lbnRhbCBkYXRhIGNvbnRhaW5lciBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWSAoUGh5c2ljYWwgTGF5ZXIgVHJhbnNjZWl2ZXIpIGNvbmZpZ3VyYXRpb24gb3IgY29udHJvbCBibG9jay4gSSBuZWVkIHRvIHNlZSAqZXZlcnl0aGluZyog4oCTIHRoZSBtZW1iZXIgdmFyaWFibGVzLCB0aGVpciBkYXRhIHR5cGVzLCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIGVhY2ggb3RoZXIsIGFuZCBhbnkgcmVsZXZhbnQgY29tbWVudHMgdGhhdCBtaWdodCBpbGx1bWluYXRlIHRoZWlyIHB1cnBvc2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlZ2lzdGVycywgaW50ZXJuYWwgc3RhdGVzLCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBvciBwZXJoYXBzIGNhbGxiYWNrIGZ1bmN0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBmcm9tIHRoZSBkZWZpbml0aW9uIHdpbGwgcHJvdmlkZSB0aGUgZnJhbWV3b3JrLiBUaGlzIHdpbGwgbGVhZCB0byBmdXJ0aGVyIHF1ZXN0aW9ucyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzLCBob3cgdGhlIGRyaXZlciBpbml0aWFsaXplcywgbWFuYWdlcywgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBUSkExMTAyIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NTpcdFx0XHQuZ2V0X3NxaV9tYXhcdD0gdGphMTF4eF9nZXRfc3FpX21heCxcbiA4NDY6XHRcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4gODQ3Olx0XHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIDg0ODpcdFx0XHQuc2V0X2xvb3BiYWNrICAgPSBnZW5waHlfbG9vcGJhY2ssXG4gODQ5Olx0XHRcdC8qIFN0YXRpc3RpY3MgKi9cbiA4NTA6XHRcdFx0LmdldF9zc2V0X2NvdW50ID0gdGphMTF4eF9nZXRfc3NldF9jb3VudCxcbiA4NTE6XHRcdFx0LmdldF9zdHJpbmdzXHQ9IHRqYTExeHhfZ2V0X3N0cmluZ3MsXG4gODUyOlx0XHRcdC5nZXRfc3RhdHNcdD0gdGphMTF4eF9nZXRfc3RhdHMsXG4gODUzOlx0XHR9LCB7XG4gODU0Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7TlhQIFRKQTExMDIgUG9ydCAwXCYjMzQ7LFxuIDg1NTpcdFx0XHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXG4gODU2Olx0XHRcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXG4gODU3Olx0XHRcdC5wcm9iZVx0XHQ9IHRqYTExMDJfcDBfcHJvYmUsXG4gODU4Olx0XHRcdC5yZW1vdmVcdFx0PSB0amExMTAyX3AwX3JlbW92ZSxcbiA4NTk6XHRcdFx0LnNvZnRfcmVzZXRcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxuIDg2MDpcdFx0XHQuY29uZmlnX2FuZWdcdD0gdGphMTF4eF9jb25maWdfYW5lZyxcbiA4NjE6XHRcdFx0LmNvbmZpZ19pbml0XHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXG4gODYyOlx0XHRcdC5yZWFkX3N0YXR1c1x0PSB0amExMXh4X3JlYWRfc3RhdHVzLFxuIDg2MzpcdFx0XHQuZ2V0X3NxaVx0PSB0amExMXh4X2dldF9zcWksXG4gODY0Olx0XHRcdC5nZXRfc3FpX21heFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDUxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGJlaW5nIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQgYSBtaW51dGUsIGlmIGBwaHlkZXYtJmd0O3ByaXZgIHdhc24mIzM5O3QgYmVpbmcgc2V0ICpiZWZvcmUqIHRoaXMgcGF0Y2gsIGhvdyB3YXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGV2ZW4gZnVuY3Rpb25pbmcgY29ycmVjdGx5PyYjMzQ7IFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBpc3N1ZTogYSBmdW5jdGlvbiBkZXBlbmRpbmcgb24gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvZGUgYmVmb3JlIHRoZSBwYXRjaCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgdGphMTEwMl9wMF9wcm9iZWAg4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyB3ZXJlIGhhbmRsZWQgKmJlZm9yZSogdGhpcyBjaGFuZ2UuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIHdhcyBiZWluZyBpbXBsaWNpdGx5IGFzc3VtZWQsIG9yIGEgZGlmZmVyZW50IHBhdGggd2FzIGJlaW5nIHRha2VuLiBJIG5lZWQgdG8gZGlzc2VjdCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxMjpcdHN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIDYxMzpcdHtcbiA2MTQ6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiA2MTU6XHRcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXY7XG4gNjE2Olx0XHRpbnQgcmV0O1xuIDYxNzpcdFxuIDYxODpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuIDYxOTpcdFx0aWYgKCFwcml2KVxuIDYyMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2MjE6XHRcbiA2MjI6XHRcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuIDYyMzpcdFx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuIDYyNDpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpO1xuIDYyNTpcdFxuIDYyNjpcdFx0cmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpO1xuIDYyNzpcdFx0aWYgKHJldClcbiA2Mjg6XHRcdFx0cmV0dXJuIHJldDtcbiA2Mjk6XHRcbiA2MzA6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2VwaHlfcmVnaXN0ZXJfd29yayk7XG4gNjMxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBgdGphMTF4eF9jb25maWdfaW5pdGAgQnVnIEZpeCoqCgpIb2xkIG9uLCBJIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGB0amExMTAyX3AwX3Byb2JlYCBhbGxvY2F0ZXMgdGhpcyBgcHJpdmAgc3RydWN0dXJlLCBhbmQgY3J1Y2lhbGx5LCBpdCBhc3NpZ25zIGBwcml2LSZndDtwaHlkZXYgPSBwaHlkZXZgLiAgTm93LCB0aGUgcGF0Y2ggdGhlbiBhc3NpZ25zIHRoZSAqcmV2ZXJzZSosIGBwaHlkZXYtJmd0O3ByaXYgPSBwcml2YC4gIEFoLCByaWdodC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoYXQgYXNzaWdubWVudCwgYHBoeWRldi0mZ3Q7cHJpdiA9IHByaXZgLCB3YXMgKm1pc3NpbmcqLiBTbywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGJlZW4gdHJ5aW5nIHRvIGFjY2VzcyBgcGh5ZGV2LSZndDtwcml2YCB3aXRob3V0IGl0IGV2ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoYXQgd291bGQgZGVmaW5pdGVseSBoYXZlIGxlZCB0byBhIGNyYXNoIGluIGB0amExMXh4X2NvbmZpZ19pbml0YCwgd291bGRuJiMzOTt0IGl0PyBPa2F5LCBsZXQgbWUgY29uZmlybSB0aGF0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGNvZGUgZm9yIGB0amExMXh4X2NvbmZpZ19pbml0YCB0byBjb25maXJtIHRoYXQgaXQgZG9lcywgaW4gZmFjdCwgdHJ5IHRvIHVzZSBgcGh5ZGV2LSZndDtwcml2YC4gTmVlZCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc291bmQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0c3RhdGljIGludCB0amExMXh4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gMzAxOlx0e1xuIDMwMjpcdFx0dTE2IHJlZ19tYXNrLCByZWdfdmFsO1xuIDMwMzpcdFx0aW50IHJldDtcbiAzMDQ6XHRcbiAzMDU6XHRcdHJldCA9IHRqYTExeHhfZW5hYmxlX3JlZ193cml0ZShwaHlkZXYpO1xuIDMwNjpcdFx0aWYgKHJldClcbiAzMDc6XHRcdFx0cmV0dXJuIHJldDtcbiAzMDg6XHRcbiAzMDk6XHRcdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuIDMxMDpcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwO1xuIDMxMTpcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuIDMxMjpcdFxuIDMxMzpcdFx0c3dpdGNoIChwaHlkZXYtXHUwMDNlcGh5X2lkIFx1MDAyNiBQSFlfSURfTUFTSykge1xuIDMxNDpcdFx0Y2FzZSBQSFlfSURfVEpBMTEwMDpcbiAzMTU6XHRcdFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9BVVRPX09QIHwgTUlJX0NGRzFfTEVEX01PREVfTUFTSyB8XG4gMzE2Olx0XHRcdFx0ICAgTUlJX0NGRzFfTEVEX0VOQUJMRTtcbiAzMTc6XHRcdFx0cmVnX3ZhbCA9IE1JSV9DRkcxX0FVVE9fT1AgfCBNSUlfQ0ZHMV9MRURfTU9ERV9MSU5LVVAgfFxuIDMxODpcdFx0XHRcdCAgTUlJX0NGRzFfTEVEX0VOQUJMRTtcbiAzMTk6XHRcbiAzMjA6XHRcdFx0cmVnX21hc2sgfD0gTUlJX0NGRzFfSU5URVJGQUNFX01PREVfTUFTSztcbiAzMjE6XHRcdFx0cmV0ID0gdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGUocGh5ZGV2KTtcbiAzMjI6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzMjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDMyNDpcdFxuIDMyNTpcdFx0XHRyZWdfdmFsIHw9IChyZXQgXHUwMDI2IDB4ZmZmZik7XG4gMzI2Olx0XHRcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQ0ZHMSwgcmVnX21hc2ssIHJlZ192YWwpO1xuIDMyNzpcdFx0XHRpZiAocmV0KVxuIDMyODpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzI5Olx0XHRcdGJyZWFrO1xuIDMzMDpcdFx0Y2FzZSBQSFlfSURfVEpBMTEwMlM6XG4gMzMxOlx0XHRjYXNlIFBIWV9JRF9USkExMTAxOlxuIDMzMjpcdFx0XHRyZWdfbWFzayA9IE1JSV9DRkcxX0lOVEVSRkFDRV9NT0RFX01BU0s7XG4gMzMzOlx0XHRcdHJldCA9IHRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlKHBoeWRldik7XG4gMzM0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzM1Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMzY6XHRcbiAzMzc6XHRcdFx0cmVnX3ZhbCA9IHJldCBcdTAwMjYgMHhmZmZmO1xuIDMzODpcdFx0XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0NGRzEsIHJlZ19tYXNrLCByZWdfdmFsKTtcbiAzMzk6XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgUEhZIEluaXRpYWxpemF0aW9uKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgdXNpbmcgYHBoeWRldi0mZ3Q7cGh5X2lkICZhbXA7IFBIWV9JRF9NQVNLYC4gUmlnaHQsIHJpZ2h0LiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgd2F5IHRvIGlkZW50aWZ5IHRoZSBQSFksIG1hc2tpbmcgb3V0IHNwZWNpZmljIGJpdHMgdG8gbmFycm93IGl0IGRvd24gdG8gYSByZWxldmFudCBkZXZpY2UgZmFtaWx5IG9yIHR5cGUuCgpCdXQsIGZvciB0aGUgYHRqYTExMDJfcDBgIGNvbmZpZ3VyYXRpb24uLi4gd2hhdCBleGFjdGx5ICppcyogdGhlIGBwaHlfaWRgIGZvciB0aGF0IHBhcnRpY3VsYXIgUEhZPyBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFsdWUsIG9yIGF0IGxlYXN0IHRoZSBleHBlY3RlZCBtYXNrZWQgdmFsdWUsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoYXQgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGNvZGUgcGF0aCBnZXRzIGV4ZWN1dGVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGludGVuZGVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgbW9kZWwgc3BlY2lmaWNhbGx5LiBUaGF0IGBwaHlfaWRgIGNoZWNrIGlzIGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byBnbyBsb29rIHRoYXQgdXAsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbG9naWMgaGVyZSBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgwMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDgwMjpcdFxuIDgwMzpcdFx0aWYgKCEocmV0IFx1MDAyNiBNSUlfRUNUUkxfQ0FCTEVfVEVTVCkpIHtcbiA4MDQ6XHRcdFx0KmZpbmlzaGVkID0gdHJ1ZTtcbiA4MDU6XHRcbiA4MDY6XHRcdFx0cmV0ID0gcGh5X3NldF9iaXRzKHBoeWRldiwgTUlJX0NPTU1DRkcsIE1JSV9DT01NQ0ZHX0FVVE9fT1ApO1xuIDgwNzpcdFx0XHRpZiAocmV0KVxuIDgwODpcdFx0XHRcdHJldHVybiByZXQ7XG4gODA5Olx0XG4gODEwOlx0XHRcdHJldHVybiB0amExMXh4X2NhYmxlX3Rlc3RfcmVwb3J0KHBoeWRldik7XG4gODExOlx0XHR9XG4gODEyOlx0XG4gODEzOlx0XHRyZXR1cm4gMDtcbiA4MTQ6XHR9XG4gODE1Olx0XG4gODE2Olx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XG4gODE3Olx0XHR7XG4gODE4Olx0XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfVEpBMTEwMCksXG4gODE5Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7TlhQIFRKQTExMDBcJiMzNDssXG4gODIwOlx0XHRcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcbiA4MjE6XHRcdFx0LnByb2JlXHRcdD0gdGphMTF4eF9wcm9iZSxcbiA4MjI6XHRcdFx0LnNvZnRfcmVzZXRcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxuIDgyMzpcdFx0XHQuY29uZmlnX2FuZWdcdD0gdGphMTF4eF9jb25maWdfYW5lZyxcbiA4MjQ6XHRcdFx0LmNvbmZpZ19pbml0XHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXG4gODI1Olx0XHRcdC5yZWFkX3N0YXR1c1x0PSB0amExMXh4X3JlYWRfc3RhdHVzLFxuIDgyNjpcdFx0XHQuZ2V0X3NxaVx0PSB0amExMXh4X2dldF9zcWksXG4gODI3Olx0XHRcdC5nZXRfc3FpX21heFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxuIDgyODpcdFx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbiA4Mjk6XHRcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4gODMwOlx0XHRcdC5zZXRfbG9vcGJhY2sgICA9IGdlbnBoeV9sb29wYmFjayxcbiA4MzE6XHRcdFx0LyogU3RhdGlzdGljcyAqL1xuIDgzMjpcdFx0XHQuZ2V0X3NzZXRfY291bnQgPSB0amExMXh4X2dldF9zc2V0X2NvdW50LFxuIDgzMzpcdFx0XHQuZ2V0X3N0cmluZ3NcdD0gdGphMTF4eF9nZXRfc3RyaW5ncyxcbiA4MzQ6XHRcdFx0LmdldF9zdGF0c1x0PSB0amExMXh4X2dldF9zdGF0cyxcbiA4MzU6XHRcdH0sIHtcbiA4MzY6XHRcdFx0UEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9USkExMTAxKSxcbiA4Mzc6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtOWFAgVEpBMTEwMVwmIzM0OyxcbiA4Mzg6XHRcdFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxuIDgzOTpcdFx0XHQucHJvYmVcdFx0PSB0amExMXh4X3Byb2JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzU3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgYHRqYTExeHhfZHJpdmVyYCoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiB3ZSBuZWVkIHRvIHNwZW5kIHNvbWUgcXVhbGl0eSB0aW1lIHdpdGggdGhlIGB0amExMXh4X2RyaXZlcmAuIEkga25vdyB0aGUgYmFzaWNzLCB0aGUgaGlnaC1sZXZlbCBhcmNoaXRlY3R1cmUsIG1heWJlIGV2ZW4gc29tZSBvZiB0aGUgY29tbW9uIHJlZ2lzdGVyIGxheW91dHMuIEJ1dCAmIzM0O3JlYWQgbW9yZSYjMzQ7IGltcGxpZXMgYSBzcGVjaWZpYyBuZWVkIGZvciBhIGRlZXBlciBkaXZlLiBBbSBJIHRyeWluZyB0byBkZWJ1ZyBhIHBhcnRpY3VsYXIgaXNzdWU/IEFtIEkgbG9va2luZyB0byBleHRlbmQgaXRzIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IGhhcmR3YXJlIHJldmlzaW9uIG9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbj8gT3IgbWF5YmUgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgYmVzdCBwcmFjdGljZXM/CgpUaGlzIGNvdWxkIG1lYW4gYSBmZXcgdGhpbmdzLiBQZXJoYXBzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGxpbmsgc3RhdHVzIGNoYW5nZXMuIE9yIEkgbWlnaHQgYmUgZm9jdXNpbmcgb24gdGhlIE1BQyBpbnRlcmZhY2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUEhZLiBXaGF0IGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdGltaW5nIGRlcGVuZGVuY2llcyBvciByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFuZCBsZXQmIzM5O3Mgbm90IGZvcmdldCBhYm91dCB0aGUgZXJyb3IgaGFuZGxpbmcg4oCTIGhvdyByb2J1c3QgaXMgaXQgaW4gdmFyaW91cyBmYXVsdCBzY2VuYXJpb3M/CgpJIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFdoYXQgb3RoZXIgZHJpdmVycyBvciBrZXJuZWwgY29tcG9uZW50cyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aD8gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMsIHNvIEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGFueSBhcmVhcyB3aGVyZSBjaGFuZ2VzIGNvdWxkIGludHJvZHVjZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4gJiMzNDtSZWFkIG1vcmUmIzM0OyBzaWduaWZpZXMgdGhhdCBJIGFtIG5vdCBzYXRpc2ZpZWQgd2l0aCBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcsIGFuZCBJIGhhdmUgYSBjbGVhciBvYmplY3RpdmUgdG8gZmlsbCB0aGUgZ2FwcyBpbiBteSBrbm93bGVkZ2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdFx0XHQuc29mdF9yZXNldFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXG4gODQxOlx0XHRcdC5jb25maWdfYW5lZ1x0PSB0amExMXh4X2NvbmZpZ19hbmVnLFxuIDg0MjpcdFx0XHQuY29uZmlnX2luaXRcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcbiA4NDM6XHRcdFx0LnJlYWRfc3RhdHVzXHQ9IHRqYTExeHhfcmVhZF9zdGF0dXMsXG4gODQ0Olx0XHRcdC5nZXRfc3FpXHQ9IHRqYTExeHhfZ2V0X3NxaSxcbiA4NDU6XHRcdFx0LmdldF9zcWlfbWF4XHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXG4gODQ2Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuIDg0NzpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiA4NDg6XHRcdFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxuIDg0OTpcdFx0XHQvKiBTdGF0aXN0aWNzICovXG4gODUwOlx0XHRcdC5nZXRfc3NldF9jb3VudCA9IHRqYTExeHhfZ2V0X3NzZXRfY291bnQsXG4gODUxOlx0XHRcdC5nZXRfc3RyaW5nc1x0PSB0amExMXh4X2dldF9zdHJpbmdzLFxuIDg1MjpcdFx0XHQuZ2V0X3N0YXRzXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxuIDg1MzpcdFx0fSwge1xuIDg1NDpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O05YUCBUSkExMTAyIFBvcnQgMFwmIzM0OyxcbiA4NTU6XHRcdFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxuIDg1NjpcdFx0XHQuZmxhZ3MgICAgICAgICAgPSBQSFlfUE9MTF9DQUJMRV9URVNULFxuIDg1NzpcdFx0XHQucHJvYmVcdFx0PSB0amExMTAyX3AwX3Byb2JlLFxuIDg1ODpcdFx0XHQucmVtb3ZlXHRcdD0gdGphMTEwMl9wMF9yZW1vdmUsXG4gODU5Olx0XHRcdC5zb2Z0X3Jlc2V0XHQ9IHRqYTExeHhfc29mdF9yZXNldCxcbiA4NjA6XHRcdFx0LmNvbmZpZ19hbmVnXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXG4gODYxOlx0XHRcdC5jb25maWdfaW5pdFx0PSB0amExMXh4X2NvbmZpZ19pbml0LFxuIDg2MjpcdFx0XHQucmVhZF9zdGF0dXNcdD0gdGphMTF4eF9yZWFkX3N0YXR1cyxcbiA4NjM6XHRcdFx0LmdldF9zcWlcdD0gdGphMTF4eF9nZXRfc3FpLFxuIDg2NDpcdFx0XHQuZ2V0X3NxaV9tYXhcdD0gdGphMTF4eF9nZXRfc3FpX21heCxcbiA4NjU6XHRcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2UsXG4gODY2Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuIDg2NzpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiA4Njg6XHRcdFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxuIDg2OTpcdFx0XHQvKiBTdGF0aXN0aWNzICovXG4gODcwOlx0XHRcdC5nZXRfc3NldF9jb3VudCA9IHRqYTExeHhfZ2V0X3NzZXRfY291bnQsXG4gODcxOlx0XHRcdC5nZXRfc3RyaW5nc1x0PSB0amExMXh4X2dldF9zdHJpbmdzLFxuIDg3MjpcdFx0XHQuZ2V0X3N0YXRzXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxuIDg3MzpcdFx0XHQuY29uZmlnX2ludHJcdD0gdGphMTF4eF9jb25maWdfaW50cixcbiA4NzQ6XHRcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSB0amExMXh4X2hhbmRsZV9pbnRlcnJ1cHQsXG4gODc1Olx0XHRcdC5jYWJsZV90ZXN0X3N0YXJ0ID0gdGphMTF4eF9jYWJsZV90ZXN0X3N0YXJ0LFxuIDg3NjpcdFx0XHQuY2FibGVfdGVzdF9nZXRfc3RhdHVzID0gdGphMTF4eF9jYWJsZV90ZXN0X2dldF9zdGF0dXMsXG4gODc3Olx0XHR9LCB7XG4gODc4Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7TlhQIFRKQTExMDIgUG9ydCAxXCYjMzQ7LFxuIDg3OTpcdFx0XHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDM3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYHRqYTExMDJfcDBgIGFuZCBgcGh5X2lkYCBBc3NvY2lhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGphMTEwMl9wMGAgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGBwaHlfaWRgLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlIGlzIGB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2VgLiBUaGUgaW1wbGljYXRpb24gaXMgcHJldHR5IGNsZWFyOiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjb3JyZWN0bHkgYXNzb2NpYXRpbmcgdGhhdCBzcGVjaWZpYyBkZXZpY2UgaW5zdGFuY2Ugd2l0aCB0aGUgcmlnaHQgcGh5c2ljYWwgbGF5ZXIgaWRlbnRpZmllci4gVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlYCBmdW5jdGlvbiB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBtYXRjaGluZyBpcyBwZXJmb3JtZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NjQyPXN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjYxLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NjYyOnN0YXRpYyBpbnQgdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02NjMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NjQtXHRcdC5nZXRfc3FpX21heFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6ODY1Olx0XHQubWF0Y2hfcGh5X2RldmljZSA9IHRqYTExMDJfcDBfbWF0Y2hfcGh5X2RldmljZSxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg2Ni1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjI1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGRlZmluaXRlbHkgY2VudGVyZWQgYXJvdW5kIG1hdGNoaW5nIGEgcGh5c2ljYWwgZGV2aWNlLCBhbmQgZnJvbSB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0IHNlZW1zIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBQSFksIHByb2JhYmx5IHJlbGF0aW5nIHRvIEV0aGVybmV0IG9yIGEgc2ltaWxhciBwaHlzaWNhbCBsYXllciBjb21tdW5pY2F0aW9uIHN0YW5kYXJkLiBUaGUgJiMzNDttYXRjaCYjMzQ7IHBhcnQgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MsIG1heWJlIHByb2JpbmcgdGhlIGhhcmR3YXJlLCByZWFkaW5nIHNvbWUgcmVnaXN0ZXJzLCBvciBjb21wYXJpbmcgZGV2aWNlIElEcyB0byBhIGtub3duIGxpc3QuIFRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIHNlZW1zIGNyaXRpY2FsOiBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgdGhlIHN5c3RlbSB0byB1bmRlcnN0YW5kICp3aGljaCogVEpBMTEwMiBQSFkgaXMgY29ubmVjdGVkLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBsaWtlbHkgc2VydmVzIGFzIGEgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiBzdGVwLCBsaW5raW5nIHRoZSBkZXZpY2UgZHJpdmVyIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZsb3c6IGhvdyBpdCBpZGVudGlmaWVzIHRoZSBkZXZpY2UsIHdoYXQgY3JpdGVyaWEgaXQgdXNlcyBmb3IgbWF0Y2hpbmcsIGFuZCB3aGF0IGhhcHBlbnMgaWYgYSBtYXRjaCAqaXNuJiMzOTt0KiBmb3VuZC4gRXJyb3IgaGFuZGxpbmcgaXMgcHJvYmFibHkgaW1wb3J0YW50IGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgZm91bmRhdGlvbmFsIHRvIGdldCB0aGUgaGFyZHdhcmUgdGFsa2luZyB0byB0aGUgcmlnaHQgc29mdHdhcmUgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCBjb25mbGljdHMsIGxpa2UgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgUEhZcyBvciBwb3RlbnRpYWxseSBtdWx0aXBsZSBkZXZpY2VzIHVzaW5nIHRoZSBzYW1lIHNpbGljb24uIEZpbmFsbHksIGtub3dpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGRldmljZSB0cmVlIGVudHJpZXMgY291bGQgYmUgdmFsdWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MjpcdHN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4gNjQzOlx0e1xuIDY0NDpcdFx0aW50IHJldDtcbiA2NDU6XHRcbiA2NDY6XHRcdGlmICgocGh5ZGV2LVx1MDAzZXBoeV9pZCBcdTAwMjYgUEhZX0lEX01BU0spICE9IFBIWV9JRF9USkExMTAyKVxuIDY0NzpcdFx0XHRyZXR1cm4gMDtcbiA2NDg6XHRcbiA2NDk6XHRcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1BIWVNJRDIpO1xuIDY1MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA2NTE6XHRcdFx0cmV0dXJuIHJldDtcbiA2NTI6XHRcbiA2NTM6XHRcdC8qIFRKQTExMDIgUG9ydCAxIGhhcyBwaHlpZCAwIGFuZCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRlbXBlcmF0dXJlXG4gNjU0Olx0XHQgKiBhbmQgdW5kZXJ2b2x0YWdlIGFsYXJtcy5cbiA2NTU6XHRcdCAqL1xuIDY1NjpcdFx0aWYgKHBvcnQwKVxuIDY1NzpcdFx0XHRyZXR1cm4gcmV0ID8gMSA6IDA7XG4gNjU4Olx0XG4gNjU5Olx0XHRyZXR1cm4gIXJldDtcbiA2NjA6XHR9XG4gNjYxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjUwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIHRoZSBQSFkgSWRlbnRpZmljYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBwaHlkZXZgIHN0cnVjdHVyZSwgYW5kIGl0IHNlZW1zIHRoZSByZXN1bHQgb2YgYHBoeWRldi0mZ3Q7cGh5X2lkICZhbXA7IFBIWV9JRF9NQVNLYCBpcyBldmFsdWF0aW5nIHRvIGBQSFlfSURfVEpBMTEwMmAuIFNvLCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBUSkExMTAyIFBIWS4gTm93LCBnaXZlbiB0aGF0IGlkZW50aWZpY2F0aW9uLCB0aGUgZm9jdXMgaGFzIHNoaWZ0ZWQgdG93YXJkcyB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uLiBJJiMzOTttIGluZmVycmluZyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGNvbmZpZ3VyZSBpdCBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHNwZWNpZmljIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoYXQgaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYXJlZnVsbHkgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZ2V0cyBzZXQgdXAgY29ycmVjdGx5IGFuZCB0aGUgZGV2aWNlIGlzIG9wZXJhdGluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIG5vdywgYW5kIG1ha2Ugc3VyZSB0aGlzIHNwZWNpZmljIFBIWSBpcyBiZWluZyBwcm9wZXJseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MTpcdFx0XHRmYWxsdGhyb3VnaDtcbiAzNDI6XHRcdGNhc2UgUEhZX0lEX1RKQTExMDI6XG4gMzQzOlx0XHRcdHJldCA9IHBoeV9zZXRfYml0cyhwaHlkZXYsIE1JSV9DT01NQ0ZHLCBNSUlfQ09NTUNGR19BVVRPX09QKTtcbiAzNDQ6XHRcdFx0aWYgKHJldClcbiAzNDU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0NjpcdFx0XHRicmVhaztcbiAzNDc6XHRcdGRlZmF1bHQ6XG4gMzQ4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0OTpcdFx0fVxuIDM1MDpcdFxuIDM1MTpcdFx0cmV0ID0gcGh5X2NsZWFyX2JpdHMocGh5ZGV2LCBNSUlfQ0ZHMSwgTUlJX0NGRzFfU0xFRVBfQ09ORklSTSk7XG4gMzUyOlx0XHRpZiAocmV0KVxuIDM1MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDM1NDpcdFxuIDM1NTpcdFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9DRkcyLCBNSUlfQ0ZHMl9TTEVFUF9SRVFVRVNUX1RPLFxuIDM1NjpcdFx0XHRcdCBNSUlfQ0ZHMl9TTEVFUF9SRVFVRVNUX1RPXzE2TVMpO1xuIDM1NzpcdFx0aWYgKHJldClcbiAzNTg6XHRcdFx0cmV0dXJuIHJldDtcbiAzNTk6XHRcbiAzNjA6XHRcdHJldCA9IHRqYTExeHhfd2FrZXVwKHBoeWRldik7XG4gMzYxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDM2MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDM2MzpcdFxuIDM2NDpcdFx0LyogQUNLIGludGVycnVwdHMgYnkgcmVhZGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovXG4gMzY1Olx0XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9JTlRTUkMpO1xuIDM2NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzNjc6XHRcdFx0cmV0dXJuIHJldDtcbiAzNjg6XHRcbiAzNjk6XHRcdHJldHVybiAwO1xuIDM3MDpcdH1cbiAzNzE6XHRcbiAzNzI6XHRzdGF0aWMgaW50IHRqYTExeHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAzNzM6XHR7XG4gMzc0Olx0XHRpbnQgcmV0O1xuIDM3NTpcdFxuIDM3NjpcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV047XG4gMzc3Olx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOU1VQUE9SVEVEO1xuIDM3ODpcdFxuIDM3OTpcdFx0cmV0ID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEpBMTEwMiBQSFkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiB3aXRoIHRoZSBgUEhZX0lEX1RKQTExMDJgIGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbiAqZG9lc24mIzM5O3QqIGNhbGwgYHRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlYC4gSW5zdGVhZCwgaXQganVzdCBzZXRzIHRoZSBgTUlJX0NPTU1DRkdgIHJlZ2lzdGVyIHdpdGggYE1JSV9DT01NQ0ZHX0FVVE9fT1BgLiAgSW50ZXJlc3RpbmcuIFNvLCB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGNvZGUgcGF0aCBhdm9pZHMgdXNpbmcgYHBoeWRldi0mZ3Q7cHJpdmAgZm9yIHRoaXMgc3BlY2lmaWMgUEhZLCB0aGUgYFRKQTExMDJgLiBUaGF04oCZcyBhIGtleSBkZXRhaWwgdG8gcmVtZW1iZXIuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogZG9lcyBgdGphMTF4eF9wYXJzZV9kdGAgZ2V0IGludm9sdmVkIGF0IGFsbCB3aXRoIHRoZSBgVEpBMTEwMmA/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGRldmljZSB0cmVlIHBhcnNpbmcgaXMgaW52b2tlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGphMTF4eF9wYXJzZV9kdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTUwNj1zdGF0aWMgaW50IHRqYTExeHhfaHdtb25fcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MTYtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1MTc6c3RhdGljIGludCB0amExMXh4X3BhcnNlX2R0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MTgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTUzMT1zdGF0aWMgaW50IHRqYTExeHhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01NDMtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1NDQ6XHRyZXQgPSB0amExMXh4X3BhcnNlX2R0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01NDUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgdGphMTEwMl9wMF9yZW1vdmVgIGFuZCBXb3J0aEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGFkZGluZyBhIGByZW1vdmVgIGNhbGxiYWNrLCBgdGphMTEwMl9wMF9yZW1vdmVgLCB0byB0aGUgYHRqYTExMDJfcDBgIGRyaXZlci4gSSByZWNhbGwgdGhhdCBgdGphMTF4eF9wYXJzZV9kdGAgaXMgY2FsbGVkIGZyb20gYHRqYTExeHhfcHJvYmVgLCBidXQgYHRqYTExMDJfcDBgIGFjdHVhbGx5IHVzZXMgYHRqYTExMDJfcDBfcHJvYmVgIGFuZCBub3QgYHRqYTExeHhfcHJvYmVgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIG1hZGUgbWUgdGhpbmsgYHBoeWRldi0mZ3Q7cHJpdmAgd291bGQgYmUgdXNlZCBpbiBtb3JlIHBsYWNlcy4gQXMgaXQgc3RhbmRzLCBpdCBhcHBlYXJzIHRoZSBvbmx5IHVzZSBvZiBgcGh5ZGV2LSZndDtwcml2YCBpcyBnb2luZyB0byBiZSB3aXRoaW4gYHRqYTExMDJfcDBfcmVtb3ZlYCEKClRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBhc3NpZ25zIGBwcml2YCB0byBgcGh5ZGV2LSZndDtwcml2YCB3aXRoaW4gYHRqYTExMDJfcDBfcHJvYmVgLCBhbmQgdGhlbiBhZGRzIHRoZSBgdGphMTEwMl9wMF9yZW1vdmVgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBjYW5jZWxzIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBhZGRpdGlvbi4KClRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHRyaWdnZXIgdGhlIFdvcnRoRnV6emluZyBjcml0ZXJpYT8gVGhlIHByb21wdCBtZW50aW9ucyBleGNsdWRpbmcgcGF0Y2hlcyB0aGF0IGFkZCBkcml2ZXIgYC5yZW1vdmVgIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuICpUaGlzIGlzIGtleS4qIGByZW1vdmVgIGlzIHRoZSBkZXZpY2UgcmVtb3ZhbCBjYWxsYmFjay4gTG9va2luZyBhdCBpdCwgdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgYW5kIHV0aWxpemVzIGEgZHJpdmVyIGAucmVtb3ZlYCBjYWxsYmFjay4gTm8gb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBwcmVzZW50LgoKU28sICp5ZXMqLCB0aGUgcGF0Y2ggKmRvZXMqIGZhbGwgc3F1YXJlbHkgdW5kZXIgdGhhdCBleGNsdXNpb24gY3JpdGVyaWEuIEl0JiMzOTtzIGFkZGluZyBhIHRlYXJkb3duIGNhbGxiYWNrLCBgdGphMTEwMl9wMF9yZW1vdmVgLCB0byBjYW5jZWwgYSB3b3JrcXVldWUuIEl0IGxvb2tzIGxpa2UgaXQgaXMgZXhhY3RseSB3aGF0IHRoZSBwcm9tcHQgc3BlY2lmaWVzLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHRqYTExMDJfcDBfcmVtb3ZlYCBpcyAqb25seSogY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCwgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSBJIGFtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggc2hvdWxkIHJlc3VsdCBpbiBhIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHZlcmRpY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RqYTExMDJfcDBfcmVtb3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NjEyPXN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNC1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjYzNTpzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjM2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz04MTY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU3LVx0XHQucHJvYmVcdFx0PSB0amExMTAyX3AwX3Byb2JlLFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6ODU4Olx0XHQucmVtb3ZlXHRcdD0gdGphMTEwMl9wMF9yZW1vdmUsXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NTktXHRcdC5zb2Z0X3Jlc2V0XHQ9IHRqYTExeHhfc29mdF9yZXNldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNDYKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgcmVhbGx5LiBUaGUgY29yZSBjaGFuZ2UgaXMgc29sZWx5IHRoZSBhc3NpZ25tZW50IG9mIGEgYC5yZW1vdmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdHVyZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSB0aGlzIGNhbGxiYWNrIGlzIGJlaW5nIGhvb2tlZCB1cC4gQW5kIHRoZSBhZGRlZCBgcGh5ZGV2LSZndDtwcml2ID0gcHJpdjtgIGxpbmUgaXMgbWVyZWx5IHRoZXJlIHRvIHByb3ZpZGUgYHRqYTExMDJfcDBfcmVtb3ZlYCB3aXRoIHRoZSBuZWNlc3NhcnkgY29udGV4dCBpdCByZXF1aXJlcy4gRXNzZW50aWFsbHksIHRoZSBwYXRjaCBib2lscyBkb3duIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBzaW5nbGUgYC5yZW1vdmVgIGNhbGxiYWNrLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhpcyBtZWV0cyB0aGUgZXhjbHVzaW9uIGNyaXRlcmlhIHBlcmZlY3RseS4gSSBhbSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFzc2Vzc21lbnQsIGFuZCBJIHdpbGwgYmUgc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkcml2ZXIgLnJlbW92ZSBjYWxsYmFjayAodGphMTEwMl9wMF9yZW1vdmUpIGFuZCBzZXRzIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzbyB0aGUgY2FsbGJhY2sgY2FuIGNhbmNlbCBhIHdvcmtxdWV1ZS4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBleGVjdXRlZCBkdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgdW5iaW5kIGFyZSBleGNsdWRlZCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkcml2ZXIgLnJlbW92ZSBjYWxsYmFjayAodGphMTEwMl9wMF9yZW1vdmUpIGFuZCBzZXRzIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzbyB0aGUgY2FsbGJhY2sgY2FuIGNhbmNlbCBhIHdvcmtxdWV1ZS4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBleGVjdXRlZCBkdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgdW5iaW5kIGFyZSBleGNsdWRlZCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MjkuNzkxOTU0MDM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1OTQ4NjUzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGRyaXZlciAucmVtb3ZlIGNhbGxiYWNrICh0amExMTAyX3AwX3JlbW92ZSkgYW5kIHNldHMgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIHNvIHRoZSBjYWxsYmFjayBjYW4gY2FuY2VsIGEgd29ya3F1ZXVlLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGV4ZWN1dGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciB1bmJpbmQgYXJlIGV4Y2x1ZGVkIGZyb20gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjI5Ljc5MTk1OTcwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5MTA2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGM1ZWQyOTJlMjRjMDI5ZTE1M2IwMDM3NmY4MTg4ZTU3NjgyOTczM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyBiL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXFxuaW5kZXggMDdlOTRhMjQ3OGFjMy4uNjgwNjJhNGM1MTkwYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXFxuQEAgLTYyMCw2ICs2MjAsNyBAQCBzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpO1xcbiBcXG4gXFx0cmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpO1xcbkBAIC02MzEsNiArNjMyLDEzIEBAIHN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGphMTEwMl9wMF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgdGphMTF4eF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmspO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRqYTExMDJfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBvcnQwKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTg0Nyw2ICs4NTUsNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcXG4gXFx0XFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxcbiBcXHRcXHQuZmxhZ3MgICAgICAgICAgPSBQSFlfUE9MTF9DQUJMRV9URVNULFxcbiBcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExMDJfcDBfcHJvYmUsXFxuK1xcdFxcdC5yZW1vdmVcXHRcXHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxcbiBcXHRcXHQuc29mdF9yZXNldFxcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxcbiBcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXFxuIFxcdFxcdC5jb25maWdfaW5pdFxcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzAuMTIxNjk3MDYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTkyNjUxMTIxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGRyaXZlciAucmVtb3ZlIGNhbGxiYWNrICh0amExMTAyX3AwX3JlbW92ZSkgYW5kIHNldHMgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIHNvIHRoZSBjYWxsYmFjayBjYW4gY2FuY2VsIGEgd29ya3F1ZXVlLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGV4ZWN1dGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciB1bmJpbmQgYXJlIGV4Y2x1ZGVkIGZyb20gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhjNWVkMjkyZTI0YzAyOWUxNTNiMDAzNzZmODE4OGU1NzY4Mjk3MzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jIGIvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcbmluZGV4IDA3ZTk0YTI0NzhhYzMuLjY4MDYyYTRjNTE5MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcbkBAIC02MjAsNiArNjIwLDcgQEAgc3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4gXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VwaHlfcmVnaXN0ZXJfd29yaywgdGphMTEwMl9wMV9yZWdpc3Rlcik7XG4gXG4gXHRyZXQgPSB0amExMXh4X2h3bW9uX3JlZ2lzdGVyKHBoeWRldiwgcHJpdik7XG5AQCAtNjMxLDYgKzYzMiwxMyBAQCBzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VwaHlfcmVnaXN0ZXJfd29yayk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4ge1xuIFx0aW50IHJldDtcbkBAIC04NDcsNiArODU1LDcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XG4gXHRcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcbiBcdFx0LmZsYWdzICAgICAgICAgID0gUEhZX1BPTExfQ0FCTEVfVEVTVCxcbiBcdFx0LnByb2JlXHRcdD0gdGphMTEwMl9wMF9wcm9iZSxcbitcdFx0LnJlbW92ZVx0XHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxuIFx0XHQuc29mdF9yZXNldFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXG4gXHRcdC5jb25maWdfYW5lZ1x0PSB0amExMXh4X2NvbmZpZ19hbmVnLFxuIFx0XHQuY29uZmlnX2luaXRcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjMwLjEyMTY5ODQxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODAzMTA4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhGdXp6aW5nIERldGVybWluYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIFwiV29ydGhGdXp6aW5nXCIgb3Igbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYGZhbHNlYCBpZiBpdCAqb25seSogbW9kaWZpZXMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcywgbGlrZSBgLnJlbW92ZWAsIHdoZW4gZGVhbGluZyB3aXRoIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC5cblxuUmlnaHQsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyBgdGphMTEwMl9wMF9wcm9iZWAgYnkgYWRkaW5nIGBwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCwgaXMgdGhpcyBqdXN0IGFib3V0IHRoYXQgYC5yZW1vdmVgIGNhbGxiYWNrP1wiIEJlY2F1c2UgdGhlIHBhdGNoICphbHNvKiBpbnRyb2R1Y2VzIGEgYHRqYTExMDJfcDBfcmVtb3ZlYCBmdW5jdGlvbiB0aGF0IGNhbGxzIGBjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmspO2AuIEFuZCwgaXQncyBhc3NpZ25pbmcgYC5yZW1vdmUgPSB0amExMTAyX3AwX3JlbW92ZWAgaW4gdGhlIGB0amExMXh4X2RyaXZlcmAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGB0amExMTAyX3AwX3JlbW92ZWAgd2lsbCB1c2UgYHBoeWRldi1cdTAwM2Vwcml2YC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoISBJcyBgcGh5ZGV2LVx1MDAzZXByaXZgIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZT8gR290dGEgZG91YmxlIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzQuODAyMDExMTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjE2MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWRldi1cXHUwMDNlcHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0yNzU9c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3Ni17XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6Mjc3OlxcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMjc4LVxcdGludCBtaWlfbW9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTUxNz1zdGF0aWMgaW50IHRqYTExeHhfcGFyc2VfZHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTUxOS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTIwOlxcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTIxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTMxPXN0YXRpYyBpbnQgdGphMTF4eF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQxLVxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1NDI6XFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01NDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz02MTI9c3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MjItXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjYyMzpcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYyNC1cXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXBoeV9yZWdpc3Rlcl93b3JrLCB0amExMTAyX3AxX3JlZ2lzdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTYzNT1zdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNi17XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NjM3OlxcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDozNC44NDMyMzEzMThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc0Mzg4NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGEgU2ltcGxlIFBIWSBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBpbiBgdGphMTEwMl9wMF9wcm9iZWAgaXMgc3RyYWlnaHRmb3J3YXJkOiBqdXN0IGFzc2lnbmluZyBgcHJpdmAgdG8gYHBoeWRldi1cdTAwM2Vwcml2YC4gU2VlbXMgaW5ub2N1b3VzIGVub3VnaC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGVyZSBlbHNlIGlzIGBwaHlkZXYtXHUwMDNlcHJpdmAgdXNlZD9cblxuUmlnaHQsIGRpZ2dpbmcgaW50byBpdCwgSSBzZWUgdGhhdCBib3RoIGB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZWAgYW5kIGB0amExMXh4X3BhcnNlX2R0YCByZWx5IG9uIHRoaXMgYHBoeWRldi1cdTAwM2Vwcml2YCBmaWVsZC4gVGhhdCdzIGEga2V5IGRldGFpbC4gTm93IEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBgdGphMTEwMl9wMF9wcm9iZWAgY2FsbC4gSWYgdGhleSBhcmUsIHRoaXMgc2ltcGxlIGFzc2lnbm1lbnQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIG9yIGF0IGxlYXN0IGJlIHZlcnkgaW1wb3J0YW50IHRvIHRoZSBzdGFiaWxpdHkgb2YgdGhlIGRldmljZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgZWl0aGVyIGB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZWAgb3IgYHRqYTExeHhfcGFyc2VfZHRgIGFyZSBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB0amExMTAyX3AwYCBkZXZpY2UuIFRoYXQncyB0aGUgbmV4dCBzdGVwIHRvIGNvbmZpcm0gdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzkuMTE3NjIyNDAxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDc3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTI0ND1zdGF0aWMgaW50IHRqYTExeHhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3NC1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzoyNzU6c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0zMDA9c3RhdGljIGludCB0amExMXh4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0zMjAtXFx0XFx0cmVnX21hc2sgfD0gTUlJX0NGRzFfSU5URVJGQUNFX01PREVfTUFTSztcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzozMjE6XFx0XFx0cmV0ID0gdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0zMjItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0zMzItXFx0XFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjMzMzpcXHRcXHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTMzNC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzkuMTU3MTA2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTU1MzEwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGUgYHRqYTExMDJfcDBgIGNvbXBvbmVudCB1dGlsaXplcyB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGUgYXJjaGl0ZWN0dXJlIGludGltYXRlbHkuIFRoZSBzdHJ1Y3R1cmUgc3VnZ2VzdHMgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBuZXR3b3JrIHRyYW5zY2VpdmVyLCBwZXJoYXBzIGFuIGF1dG9tb3RpdmUgRXRoZXJuZXQgUEhZLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24sIHdpdGggdGhlIGB0amFgIHByZWZpeCwgc3Ryb25nbHkgaGludHMgYXQgYSBjb25uZWN0aW9uIHRvIGEgcGFydGljdWxhciBtYW51ZmFjdHVyZXIgYW5kIHBhcnQgc2VyaWVzLlxuXG5NeSBhcHByb2FjaCB3b3VsZCBiZTogRmlyc3QsIEkgbmVlZCB0byBvcGVuIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgc3BlY2lmaWNhbGx5LCB0aGUgYHRqYTExeHhfZHJpdmVyYCBtb2R1bGUuIEknbGwgbmVlZCB0byBsb2NhdGUgYW5kIGV4YW1pbmUgdGhlIGB0amExMTAyX3AwYCBpbnN0YW50aWF0aW9uIG9yIGRlZmluaXRpb24gd2l0aGluIHRoYXQgZHJpdmVyLiBGcm9tIHRoZXJlLCBJJ2xsIHN5c3RlbWF0aWNhbGx5IHRyYWNlIHRoZSBjb250cm9sIGZsb3csIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNhbGxzIHRvIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbiBpdHNlbGYgaXMgd2hhdCBJJ20gbG9va2luZyBmb3IuIERpZCB0aGV5IHVzZSBpdD8gSWYgc28sIHdoZXJlIGFuZCBob3c/IElzIHRoZXJlIGEgcG9pbnRlciB0byBpdD8gV2VyZSBhbnkgb2YgaXRzIHBhcmFtZXRlcnMgbW9kaWZpZWQ/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLCBvciBhbnkgb3RoZXIgbWVjaGFuaXNtIHRoYXQgd291bGQgY2F1c2UgYHRqYTExeHhfY29uZmlnX2luaXRgIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIGluaXRpYWxpemluZyBvciBjb25maWd1cmluZyB0aGUgYHRqYTExMDJfcDBgIGNvbXBvbmVudC4gSSB3aWxsIGJlIHF1aWNrLCB0aGUgZmlsZSBzdHJ1Y3R1cmUgb2YgdGhlIGRyaXZlciB3aWxsIHByb3ZpZGUgY2x1ZXMsIGFzIHdpbGwgY29tbW9uIHByb2dyYW1taW5nIHBhdHRlcm5zIHVzZWQgaW4gdGhlIGZpZWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDMuMDUyNjM5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc2NzkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0amExMTAyX3AwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYxMS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2MTI6c3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg1Ni1cXHRcXHQuZmxhZ3MgICAgICAgICAgPSBQSFlfUE9MTF9DQUJMRV9URVNULFxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjg1NzpcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExMDJfcDBfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU4LVxcdFxcdC5yZW1vdmVcXHRcXHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0My4wOTU0MTI0MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU3MDAzMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBmYW1pbGlhciB3aXRoIGVtYmVkZGVkIHN5c3RlbXMsIGRyaXZlcnMsIGFuZCB0aGUgVEpBMTEwMjpcblxuKipEaXZpbmcgaW50byB0aGUgVEpBMTEwMiBEcml2ZXIgU3RydWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIHRoZSBgdGphMTEwMl9wMGAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGphMTF4eF9kcml2ZXJgIGNvbnRleHQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUuIEtub3dpbmcgdGhlIGNvbXBsZXRlIHN0cnVjdCBkZWZpbml0aW9uIGlzIHBhcmFtb3VudC4gSXQncyB0aGUgYmx1ZXByaW50LCB0aGUgZnVuZGFtZW50YWwgZGF0YSBjb250YWluZXIgZm9yIHRoaXMgcGFydGljdWxhciBQSFkgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVyKSBjb25maWd1cmF0aW9uIG9yIGNvbnRyb2wgYmxvY2suIEkgbmVlZCB0byBzZWUgKmV2ZXJ5dGhpbmcqIOKAkyB0aGUgbWVtYmVyIHZhcmlhYmxlcywgdGhlaXIgZGF0YSB0eXBlcywgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBlYWNoIG90aGVyLCBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzIHRoYXQgbWlnaHQgaWxsdW1pbmF0ZSB0aGVpciBwdXJwb3NlLiBBcmUgd2UgdGFsa2luZyBhYm91dCByZWdpc3RlcnMsIGludGVybmFsIHN0YXRlcywgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgb3IgcGVyaGFwcyBjYWxsYmFjayBmdW5jdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgZnJvbSB0aGUgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGZyYW1ld29yay4gVGhpcyB3aWxsIGxlYWQgdG8gZnVydGhlciBxdWVzdGlvbnMgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFjY2VzcywgaG93IHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMsIG1hbmFnZXMsIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgVEpBMTEwMiB0aHJvdWdoIHRoaXMgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDYuNTUyNDE4MzI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0NTpcXHRcXHRcXHQuZ2V0X3NxaV9tYXhcXHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXFxuIDg0NjpcXHRcXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuIDg0NzpcXHRcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiA4NDg6XFx0XFx0XFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxcbiA4NDk6XFx0XFx0XFx0LyogU3RhdGlzdGljcyAqL1xcbiA4NTA6XFx0XFx0XFx0LmdldF9zc2V0X2NvdW50ID0gdGphMTF4eF9nZXRfc3NldF9jb3VudCxcXG4gODUxOlxcdFxcdFxcdC5nZXRfc3RyaW5nc1xcdD0gdGphMTF4eF9nZXRfc3RyaW5ncyxcXG4gODUyOlxcdFxcdFxcdC5nZXRfc3RhdHNcXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxcbiA4NTM6XFx0XFx0fSwge1xcbiA4NTQ6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJOWFAgVEpBMTEwMiBQb3J0IDBcXFwiLFxcbiA4NTU6XFx0XFx0XFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxcbiA4NTY6XFx0XFx0XFx0LmZsYWdzICAgICAgICAgID0gUEhZX1BPTExfQ0FCTEVfVEVTVCxcXG4gODU3OlxcdFxcdFxcdC5wcm9iZVxcdFxcdD0gdGphMTEwMl9wMF9wcm9iZSxcXG4gODU4OlxcdFxcdFxcdC5yZW1vdmVcXHRcXHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxcbiA4NTk6XFx0XFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHRqYTExeHhfc29mdF9yZXNldCxcXG4gODYwOlxcdFxcdFxcdC5jb25maWdfYW5lZ1xcdD0gdGphMTF4eF9jb25maWdfYW5lZyxcXG4gODYxOlxcdFxcdFxcdC5jb25maWdfaW5pdFxcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcXG4gODYyOlxcdFxcdFxcdC5yZWFkX3N0YXR1c1xcdD0gdGphMTF4eF9yZWFkX3N0YXR1cyxcXG4gODYzOlxcdFxcdFxcdC5nZXRfc3FpXFx0PSB0amExMXh4X2dldF9zcWksXFxuIDg2NDpcXHRcXHRcXHQuZ2V0X3NxaV9tYXhcXHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjQ2LjU1MjUwNTkxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxNDQwNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGJlaW5nIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUsIGlmIGBwaHlkZXYtXHUwMDNlcHJpdmAgd2Fzbid0IGJlaW5nIHNldCAqYmVmb3JlKiB0aGlzIHBhdGNoLCBob3cgd2FzIGB0amExMXh4X2NvbmZpZ19pbml0YCBldmVuIGZ1bmN0aW9uaW5nIGNvcnJlY3RseT9cIiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgaXNzdWU6IGEgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvZGUgYmVmb3JlIHRoZSBwYXRjaCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQncyBkZWx2ZSBpbnRvIGB0amExMTAyX3AwX3Byb2JlYCDigJMgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIHdlcmUgaGFuZGxlZCAqYmVmb3JlKiB0aGlzIGNoYW5nZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgd2FzIGJlaW5nIGltcGxpY2l0bHkgYXNzdW1lZCwgb3IgYSBkaWZmZXJlbnQgcGF0aCB3YXMgYmVpbmcgdGFrZW4uIEkgbmVlZCB0byBkaXNzZWN0IHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuODIzOTQ4ODk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMjpcXHRzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gNjEzOlxcdHtcXG4gNjE0OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbiA2MTU6XFx0XFx0c3RydWN0IHRqYTExeHhfcHJpdiAqcHJpdjtcXG4gNjE2OlxcdFxcdGludCByZXQ7XFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4gNjE5OlxcdFxcdGlmICghcHJpdilcXG4gNjIwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuIDYyMzpcXHRcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbiA2MjQ6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlfcmVnaXN0ZXJfd29yaywgdGphMTEwMl9wMV9yZWdpc3Rlcik7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdHJldCA9IHRqYTExeHhfaHdtb25fcmVnaXN0ZXIocGh5ZGV2LCBwcml2KTtcXG4gNjI3OlxcdFxcdGlmIChyZXQpXFxuIDYyODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlfcmVnaXN0ZXJfd29yayk7XFxuIDYzMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuODI0MDI2ODg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTI5ODczMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBgdGphMTF4eF9jb25maWdfaW5pdGAgQnVnIEZpeCoqXG5cbkhvbGQgb24sIEkgc2VlIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBmdW5jdGlvbiBgdGphMTEwMl9wMF9wcm9iZWAgYWxsb2NhdGVzIHRoaXMgYHByaXZgIHN0cnVjdHVyZSwgYW5kIGNydWNpYWxseSwgaXQgYXNzaWducyBgcHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXZgLiAgTm93LCB0aGUgcGF0Y2ggdGhlbiBhc3NpZ25zIHRoZSAqcmV2ZXJzZSosIGBwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXZgLiAgQWgsIHJpZ2h0LiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhhdCBhc3NpZ25tZW50LCBgcGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2YCwgd2FzICptaXNzaW5nKi4gU28sIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGJlZW4gdHJ5aW5nIHRvIGFjY2VzcyBgcGh5ZGV2LVx1MDAzZXByaXZgIHdpdGhvdXQgaXQgZXZlciBiZWluZyBpbml0aWFsaXplZC4gVGhhdCB3b3VsZCBkZWZpbml0ZWx5IGhhdmUgbGVkIHRvIGEgY3Jhc2ggaW4gYHRqYTExeHhfY29uZmlnX2luaXRgLCB3b3VsZG4ndCBpdD8gT2theSwgbGV0IG1lIGNvbmZpcm0gdGhhdCBieSBxdWlja2x5IGNoZWNraW5nIHRoZSBjb2RlIGZvciBgdGphMTF4eF9jb25maWdfaW5pdGAgdG8gY29uZmlybSB0aGF0IGl0IGRvZXMsIGluIGZhY3QsIHRyeSB0byB1c2UgYHBoeWRldi1cdTAwM2Vwcml2YC4gTmVlZCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc291bmQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NTMuNTM3MDE2Njk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRzdGF0aWMgaW50IHRqYTExeHhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdHUxNiByZWdfbWFzaywgcmVnX3ZhbDtcXG4gMzAzOlxcdFxcdGludCByZXQ7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdHJldCA9IHRqYTExeHhfZW5hYmxlX3JlZ193cml0ZShwaHlkZXYpO1xcbiAzMDY6XFx0XFx0aWYgKHJldClcXG4gMzA3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHBoeWRldi1cXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcXG4gMzEwOlxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDA7XFxuIDMxMTpcXHRcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHRzd2l0Y2ggKHBoeWRldi1cXHUwMDNlcGh5X2lkIFxcdTAwMjYgUEhZX0lEX01BU0spIHtcXG4gMzE0OlxcdFxcdGNhc2UgUEhZX0lEX1RKQTExMDA6XFxuIDMxNTpcXHRcXHRcXHRyZWdfbWFzayA9IE1JSV9DRkcxX0FVVE9fT1AgfCBNSUlfQ0ZHMV9MRURfTU9ERV9NQVNLIHxcXG4gMzE2OlxcdFxcdFxcdFxcdCAgIE1JSV9DRkcxX0xFRF9FTkFCTEU7XFxuIDMxNzpcXHRcXHRcXHRyZWdfdmFsID0gTUlJX0NGRzFfQVVUT19PUCB8IE1JSV9DRkcxX0xFRF9NT0RFX0xJTktVUCB8XFxuIDMxODpcXHRcXHRcXHRcXHQgIE1JSV9DRkcxX0xFRF9FTkFCTEU7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdFxcdHJlZ19tYXNrIHw9IE1JSV9DRkcxX0lOVEVSRkFDRV9NT0RFX01BU0s7XFxuIDMyMTpcXHRcXHRcXHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xcbiAzMjI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDMyMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRcXHRyZWdfdmFsIHw9IChyZXQgXFx1MDAyNiAweGZmZmYpO1xcbiAzMjY6XFx0XFx0XFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9DRkcxLCByZWdfbWFzaywgcmVnX3ZhbCk7XFxuIDMyNzpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMjg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzI5OlxcdFxcdFxcdGJyZWFrO1xcbiAzMzA6XFx0XFx0Y2FzZSBQSFlfSURfVEpBMTEwMlM6XFxuIDMzMTpcXHRcXHRjYXNlIFBIWV9JRF9USkExMTAxOlxcbiAzMzI6XFx0XFx0XFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xcbiAzMzM6XFx0XFx0XFx0cmV0ID0gdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGUocGh5ZGV2KTtcXG4gMzM0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAzMzU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0XFx0XFx0cmVnX3ZhbCA9IHJldCBcXHUwMDI2IDB4ZmZmZjtcXG4gMzM4OlxcdFxcdFxcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQ0ZHMSwgcmVnX21hc2ssIHJlZ192YWwpO1xcbiAzMzk6XFx0XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NTMuNTM3MTA0NDU2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTkxMjkyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIFBIWSBJbml0aWFsaXphdGlvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGphMTF4eF9jb25maWdfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBiZSB1c2luZyBgcGh5ZGV2LVx1MDAzZXBoeV9pZCBcdTAwMjYgUEhZX0lEX01BU0tgLiBSaWdodCwgcmlnaHQuIFRoYXQncyBhIHN0YW5kYXJkIHdheSB0byBpZGVudGlmeSB0aGUgUEhZLCBtYXNraW5nIG91dCBzcGVjaWZpYyBiaXRzIHRvIG5hcnJvdyBpdCBkb3duIHRvIGEgcmVsZXZhbnQgZGV2aWNlIGZhbWlseSBvciB0eXBlLlxuXG5CdXQsIGZvciB0aGUgYHRqYTExMDJfcDBgIGNvbmZpZ3VyYXRpb24uLi4gd2hhdCBleGFjdGx5ICppcyogdGhlIGBwaHlfaWRgIGZvciB0aGF0IHBhcnRpY3VsYXIgUEhZPyBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFsdWUsIG9yIGF0IGxlYXN0IHRoZSBleHBlY3RlZCBtYXNrZWQgdmFsdWUsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoYXQgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGNvZGUgcGF0aCBnZXRzIGV4ZWN1dGVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGludGVuZGVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgbW9kZWwgc3BlY2lmaWNhbGx5LiBUaGF0IGBwaHlfaWRgIGNoZWNrIGlzIGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byBnbyBsb29rIHRoYXQgdXAsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbG9naWMgaGVyZSBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NTcuMTk2MjM2NTA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDgwMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MDI6XFx0XFxuIDgwMzpcXHRcXHRpZiAoIShyZXQgXFx1MDAyNiBNSUlfRUNUUkxfQ0FCTEVfVEVTVCkpIHtcXG4gODA0OlxcdFxcdFxcdCpmaW5pc2hlZCA9IHRydWU7XFxuIDgwNTpcXHRcXG4gODA2OlxcdFxcdFxcdHJldCA9IHBoeV9zZXRfYml0cyhwaHlkZXYsIE1JSV9DT01NQ0ZHLCBNSUlfQ09NTUNGR19BVVRPX09QKTtcXG4gODA3OlxcdFxcdFxcdGlmIChyZXQpXFxuIDgwODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MDk6XFx0XFxuIDgxMDpcXHRcXHRcXHRyZXR1cm4gdGphMTF4eF9jYWJsZV90ZXN0X3JlcG9ydChwaHlkZXYpO1xcbiA4MTE6XFx0XFx0fVxcbiA4MTI6XFx0XFxuIDgxMzpcXHRcXHRyZXR1cm4gMDtcXG4gODE0OlxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XFxuIDgxNzpcXHRcXHR7XFxuIDgxODpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1RKQTExMDApLFxcbiA4MTk6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJOWFAgVEpBMTEwMFxcXCIsXFxuIDgyMDpcXHRcXHRcXHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXFxuIDgyMTpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExeHhfcHJvYmUsXFxuIDgyMjpcXHRcXHRcXHQuc29mdF9yZXNldFxcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxcbiA4MjM6XFx0XFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB0amExMXh4X2NvbmZpZ19hbmVnLFxcbiA4MjQ6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0PSB0amExMXh4X2NvbmZpZ19pbml0LFxcbiA4MjU6XFx0XFx0XFx0LnJlYWRfc3RhdHVzXFx0PSB0amExMXh4X3JlYWRfc3RhdHVzLFxcbiA4MjY6XFx0XFx0XFx0LmdldF9zcWlcXHQ9IHRqYTExeHhfZ2V0X3NxaSxcXG4gODI3OlxcdFxcdFxcdC5nZXRfc3FpX21heFxcdD0gdGphMTF4eF9nZXRfc3FpX21heCxcXG4gODI4OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4gODI5OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuIDgzMDpcXHRcXHRcXHQuc2V0X2xvb3BiYWNrICAgPSBnZW5waHlfbG9vcGJhY2ssXFxuIDgzMTpcXHRcXHRcXHQvKiBTdGF0aXN0aWNzICovXFxuIDgzMjpcXHRcXHRcXHQuZ2V0X3NzZXRfY291bnQgPSB0amExMXh4X2dldF9zc2V0X2NvdW50LFxcbiA4MzM6XFx0XFx0XFx0LmdldF9zdHJpbmdzXFx0PSB0amExMXh4X2dldF9zdHJpbmdzLFxcbiA4MzQ6XFx0XFx0XFx0LmdldF9zdGF0c1xcdD0gdGphMTF4eF9nZXRfc3RhdHMsXFxuIDgzNTpcXHRcXHR9LCB7XFxuIDgzNjpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1RKQTExMDEpLFxcbiA4Mzc6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJOWFAgVEpBMTEwMVxcXCIsXFxuIDgzODpcXHRcXHRcXHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXFxuIDgzOTpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExeHhfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjU3LjE5NjUwOTQwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ5NTIzODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBgdGphMTF4eF9kcml2ZXJgKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogd2UgbmVlZCB0byBzcGVuZCBzb21lIHF1YWxpdHkgdGltZSB3aXRoIHRoZSBgdGphMTF4eF9kcml2ZXJgLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGhpZ2gtbGV2ZWwgYXJjaGl0ZWN0dXJlLCBtYXliZSBldmVuIHNvbWUgb2YgdGhlIGNvbW1vbiByZWdpc3RlciBsYXlvdXRzLiBCdXQgXCJyZWFkIG1vcmVcIiBpbXBsaWVzIGEgc3BlY2lmaWMgbmVlZCBmb3IgYSBkZWVwZXIgZGl2ZS4gQW0gSSB0cnlpbmcgdG8gZGVidWcgYSBwYXJ0aWN1bGFyIGlzc3VlPyBBbSBJIGxvb2tpbmcgdG8gZXh0ZW5kIGl0cyBmdW5jdGlvbmFsaXR5LCBwZXJoYXBzIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBoYXJkd2FyZSByZXZpc2lvbiBvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24/IE9yIG1heWJlIEknbSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgYmVzdCBwcmFjdGljZXM/XG5cblRoaXMgY291bGQgbWVhbiBhIGZldyB0aGluZ3MuIFBlcmhhcHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgbGluayBzdGF0dXMgY2hhbmdlcy4gT3IgSSBtaWdodCBiZSBmb2N1c2luZyBvbiB0aGUgTUFDIGludGVyZmFjZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQSFkuIFdoYXQgYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB0aW1pbmcgZGVwZW5kZW5jaWVzIG9yIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW5kIGxldCdzIG5vdCBmb3JnZXQgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgcm9idXN0IGlzIGl0IGluIHZhcmlvdXMgZmF1bHQgc2NlbmFyaW9zP1xuXG5JIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFdoYXQgb3RoZXIgZHJpdmVycyBvciBrZXJuZWwgY29tcG9uZW50cyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aD8gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMsIHNvIEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgYW55IGFyZWFzIHdoZXJlIGNoYW5nZXMgY291bGQgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLiBcIlJlYWQgbW9yZVwiIHNpZ25pZmllcyB0aGF0IEkgYW0gbm90IHNhdGlzZmllZCB3aXRoIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZywgYW5kIEkgaGF2ZSBhIGNsZWFyIG9iamVjdGl2ZSB0byBmaWxsIHRoZSBnYXBzIGluIG15IGtub3dsZWRnZS4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDAuOTQ2MDM1OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXFxuIDg0MTpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXFxuIDg0MjpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXFxuIDg0MzpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHRqYTExeHhfcmVhZF9zdGF0dXMsXFxuIDg0NDpcXHRcXHRcXHQuZ2V0X3NxaVxcdD0gdGphMTF4eF9nZXRfc3FpLFxcbiA4NDU6XFx0XFx0XFx0LmdldF9zcWlfbWF4XFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxcbiA4NDY6XFx0XFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbiA4NDc6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4gODQ4OlxcdFxcdFxcdC5zZXRfbG9vcGJhY2sgICA9IGdlbnBoeV9sb29wYmFjayxcXG4gODQ5OlxcdFxcdFxcdC8qIFN0YXRpc3RpY3MgKi9cXG4gODUwOlxcdFxcdFxcdC5nZXRfc3NldF9jb3VudCA9IHRqYTExeHhfZ2V0X3NzZXRfY291bnQsXFxuIDg1MTpcXHRcXHRcXHQuZ2V0X3N0cmluZ3NcXHQ9IHRqYTExeHhfZ2V0X3N0cmluZ3MsXFxuIDg1MjpcXHRcXHRcXHQuZ2V0X3N0YXRzXFx0PSB0amExMXh4X2dldF9zdGF0cyxcXG4gODUzOlxcdFxcdH0sIHtcXG4gODU0OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiTlhQIFRKQTExMDIgUG9ydCAwXFxcIixcXG4gODU1OlxcdFxcdFxcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcXG4gODU2OlxcdFxcdFxcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXFxuIDg1NzpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExMDJfcDBfcHJvYmUsXFxuIDg1ODpcXHRcXHRcXHQucmVtb3ZlXFx0XFx0PSB0amExMTAyX3AwX3JlbW92ZSxcXG4gODU5OlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXFxuIDg2MDpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXFxuIDg2MTpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXFxuIDg2MjpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHRqYTExeHhfcmVhZF9zdGF0dXMsXFxuIDg2MzpcXHRcXHRcXHQuZ2V0X3NxaVxcdD0gdGphMTF4eF9nZXRfc3FpLFxcbiA4NjQ6XFx0XFx0XFx0LmdldF9zcWlfbWF4XFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxcbiA4NjU6XFx0XFx0XFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2UsXFxuIDg2NjpcXHRcXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuIDg2NzpcXHRcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiA4Njg6XFx0XFx0XFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxcbiA4Njk6XFx0XFx0XFx0LyogU3RhdGlzdGljcyAqL1xcbiA4NzA6XFx0XFx0XFx0LmdldF9zc2V0X2NvdW50ID0gdGphMTF4eF9nZXRfc3NldF9jb3VudCxcXG4gODcxOlxcdFxcdFxcdC5nZXRfc3RyaW5nc1xcdD0gdGphMTF4eF9nZXRfc3RyaW5ncyxcXG4gODcyOlxcdFxcdFxcdC5nZXRfc3RhdHNcXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxcbiA4NzM6XFx0XFx0XFx0LmNvbmZpZ19pbnRyXFx0PSB0amExMXh4X2NvbmZpZ19pbnRyLFxcbiA4NzQ6XFx0XFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSB0amExMXh4X2hhbmRsZV9pbnRlcnJ1cHQsXFxuIDg3NTpcXHRcXHRcXHQuY2FibGVfdGVzdF9zdGFydCA9IHRqYTExeHhfY2FibGVfdGVzdF9zdGFydCxcXG4gODc2OlxcdFxcdFxcdC5jYWJsZV90ZXN0X2dldF9zdGF0dXMgPSB0amExMXh4X2NhYmxlX3Rlc3RfZ2V0X3N0YXR1cyxcXG4gODc3OlxcdFxcdH0sIHtcXG4gODc4OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiTlhQIFRKQTExMDIgUG9ydCAxXFxcIixcXG4gODc5OlxcdFxcdFxcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDAuOTQ2MTI0MDcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjAxNDUwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIGB0amExMTAyX3AwYCBhbmQgYHBoeV9pZGAgQXNzb2NpYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0amExMTAyX3AwYCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYHBoeV9pZGAuIFRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUgaXMgYHRqYTExMDJfcDBfbWF0Y2hfcGh5X2RldmljZWAuIFRoZSBpbXBsaWNhdGlvbiBpcyBwcmV0dHkgY2xlYXI6IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNvcnJlY3RseSBhc3NvY2lhdGluZyB0aGF0IHNwZWNpZmljIGRldmljZSBpbnN0YW5jZSB3aXRoIHRoZSByaWdodCBwaHlzaWNhbCBsYXllciBpZGVudGlmaWVyLiBUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2VgIGZ1bmN0aW9uIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIG1hdGNoaW5nIGlzIHBlcmZvcm1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAzNywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDQuMjY2MjcxMzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUyMzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NjQyPXN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02NjEtXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NjYyOnN0YXRpYyBpbnQgdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg2NC1cXHRcXHQuZ2V0X3NxaV9tYXhcXHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6ODY1OlxcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlLFxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg2Ni1cXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjA0LjMwNTc5OTExOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI5ODg2ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgZGVmaW5pdGVseSBjZW50ZXJlZCBhcm91bmQgbWF0Y2hpbmcgYSBwaHlzaWNhbCBkZXZpY2UsIGFuZCBmcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgc2VlbXMgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgUEhZLCBwcm9iYWJseSByZWxhdGluZyB0byBFdGhlcm5ldCBvciBhIHNpbWlsYXIgcGh5c2ljYWwgbGF5ZXIgY29tbXVuaWNhdGlvbiBzdGFuZGFyZC4gVGhlIFwibWF0Y2hcIiBwYXJ0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBpZGVudGlmaWNhdGlvbiBwcm9jZXNzLCBtYXliZSBwcm9iaW5nIHRoZSBoYXJkd2FyZSwgcmVhZGluZyBzb21lIHJlZ2lzdGVycywgb3IgY29tcGFyaW5nIGRldmljZSBJRHMgdG8gYSBrbm93biBsaXN0LiBUaGUgZnVuY3Rpb24ncyByb2xlIHNlZW1zIGNyaXRpY2FsOiBpdCdzIHRoZSBnYXRld2F5IGZvciB0aGUgc3lzdGVtIHRvIHVuZGVyc3RhbmQgKndoaWNoKiBUSkExMTAyIFBIWSBpcyBjb25uZWN0ZWQuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGxpa2VseSBzZXJ2ZXMgYXMgYSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIHN0ZXAsIGxpbmtpbmcgdGhlIGRldmljZSBkcml2ZXIgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgZmxvdzogaG93IGl0IGlkZW50aWZpZXMgdGhlIGRldmljZSwgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIGZvciBtYXRjaGluZywgYW5kIHdoYXQgaGFwcGVucyBpZiBhIG1hdGNoICppc24ndCogZm91bmQuIEVycm9yIGhhbmRsaW5nIGlzIHByb2JhYmx5IGltcG9ydGFudCBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIGZvdW5kYXRpb25hbCB0byBnZXQgdGhlIGhhcmR3YXJlIHRhbGtpbmcgdG8gdGhlIHJpZ2h0IHNvZnR3YXJlIGRyaXZlci4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCBjb25mbGljdHMsIGxpa2UgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgUEhZcyBvciBwb3RlbnRpYWxseSBtdWx0aXBsZSBkZXZpY2VzIHVzaW5nIHRoZSBzYW1lIHNpbGljb24uIEZpbmFsbHksIGtub3dpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGRldmljZSB0cmVlIGVudHJpZXMgY291bGQgYmUgdmFsdWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDcuOTM1Njg4NDgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MjpcXHRzdGF0aWMgaW50IHRqYTExMDJfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBvcnQwKVxcbiA2NDM6XFx0e1xcbiA2NDQ6XFx0XFx0aW50IHJldDtcXG4gNjQ1OlxcdFxcbiA2NDY6XFx0XFx0aWYgKChwaHlkZXYtXFx1MDAzZXBoeV9pZCBcXHUwMDI2IFBIWV9JRF9NQVNLKSAhPSBQSFlfSURfVEpBMTEwMilcXG4gNjQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9QSFlTSUQyKTtcXG4gNjUwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA2NTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjUyOlxcdFxcbiA2NTM6XFx0XFx0LyogVEpBMTEwMiBQb3J0IDEgaGFzIHBoeWlkIDAgYW5kIGRvZXNuJ3Qgc3VwcG9ydCB0ZW1wZXJhdHVyZVxcbiA2NTQ6XFx0XFx0ICogYW5kIHVuZGVydm9sdGFnZSBhbGFybXMuXFxuIDY1NTpcXHRcXHQgKi9cXG4gNjU2OlxcdFxcdGlmIChwb3J0MClcXG4gNjU3OlxcdFxcdFxcdHJldHVybiByZXQgPyAxIDogMDtcXG4gNjU4OlxcdFxcbiA2NTk6XFx0XFx0cmV0dXJuICFyZXQ7XFxuIDY2MDpcXHR9XFxuIDY2MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDcuOTM1Nzg1MjYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzI2OTczODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyB0aGUgUEhZIElkZW50aWZpY2F0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHBoeWRldmAgc3RydWN0dXJlLCBhbmQgaXQgc2VlbXMgdGhlIHJlc3VsdCBvZiBgcGh5ZGV2LVx1MDAzZXBoeV9pZCBcdTAwMjYgUEhZX0lEX01BU0tgIGlzIGV2YWx1YXRpbmcgdG8gYFBIWV9JRF9USkExMTAyYC4gU28sIHRoYXQgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGEgVEpBMTEwMiBQSFkuIE5vdywgZ2l2ZW4gdGhhdCBpZGVudGlmaWNhdGlvbiwgdGhlIGZvY3VzIGhhcyBzaGlmdGVkIHRvd2FyZHMgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbi4gSSdtIGluZmVycmluZyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGNvbmZpZ3VyZSBpdCBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHNwZWNpZmljIGRldmljZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBpbml0aWFsaXphdGlvbiByb3V0aW5lIGNhcmVmdWxseSB0byBlbnN1cmUgZXZlcnl0aGluZyBnZXRzIHNldCB1cCBjb3JyZWN0bHkgYW5kIHRoZSBkZXZpY2UgaXMgb3BlcmF0aW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24gbm93LCBhbmQgbWFrZSBzdXJlIHRoaXMgc3BlY2lmaWMgUEhZIGlzIGJlaW5nIHByb3Blcmx5IGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjUwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToxMi4xMDg0ODYwODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQwOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MTpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMzQyOlxcdFxcdGNhc2UgUEhZX0lEX1RKQTExMDI6XFxuIDM0MzpcXHRcXHRcXHRyZXQgPSBwaHlfc2V0X2JpdHMocGh5ZGV2LCBNSUlfQ09NTUNGRywgTUlJX0NPTU1DRkdfQVVUT19PUCk7XFxuIDM0NDpcXHRcXHRcXHRpZiAocmV0KVxcbiAzNDU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQ2OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDc6XFx0XFx0ZGVmYXVsdDpcXG4gMzQ4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNDk6XFx0XFx0fVxcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRyZXQgPSBwaHlfY2xlYXJfYml0cyhwaHlkZXYsIE1JSV9DRkcxLCBNSUlfQ0ZHMV9TTEVFUF9DT05GSVJNKTtcXG4gMzUyOlxcdFxcdGlmIChyZXQpXFxuIDM1MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0NGRzIsIE1JSV9DRkcyX1NMRUVQX1JFUVVFU1RfVE8sXFxuIDM1NjpcXHRcXHRcXHRcXHQgTUlJX0NGRzJfU0xFRVBfUkVRVUVTVF9UT18xNk1TKTtcXG4gMzU3OlxcdFxcdGlmIChyZXQpXFxuIDM1ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRyZXQgPSB0amExMXh4X3dha2V1cChwaHlkZXYpO1xcbiAzNjE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDM2MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHQvKiBBQ0sgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi9cXG4gMzY1OlxcdFxcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0lOVFNSQyk7XFxuIDM2NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzY3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdHJldHVybiAwO1xcbiAzNzA6XFx0fVxcbiAzNzE6XFx0XFxuIDM3MjpcXHRzdGF0aWMgaW50IHRqYTExeHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzczOlxcdHtcXG4gMzc0OlxcdFxcdGludCByZXQ7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcXG4gMzc3OlxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOU1VQUE9SVEVEO1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRyZXQgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MTIuMTA4NTc2MjM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjgxODg2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSkExMTAyIFBIWSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4uLiB3aXRoIHRoZSBgUEhZX0lEX1RKQTExMDJgIGNvbmZpZ3VyYXRpb24sIGl0J3MgY2xlYXIgdGhhdCB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uICpkb2Vzbid0KiBjYWxsIGB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZWAuIEluc3RlYWQsIGl0IGp1c3Qgc2V0cyB0aGUgYE1JSV9DT01NQ0ZHYCByZWdpc3RlciB3aXRoIGBNSUlfQ09NTUNGR19BVVRPX09QYC4gIEludGVyZXN0aW5nLiBTbywgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBjb2RlIHBhdGggYXZvaWRzIHVzaW5nIGBwaHlkZXYtXHUwMDNlcHJpdmAgZm9yIHRoaXMgc3BlY2lmaWMgUEhZLCB0aGUgYFRKQTExMDJgLiBUaGF04oCZcyBhIGtleSBkZXRhaWwgdG8gcmVtZW1iZXIuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogZG9lcyBgdGphMTF4eF9wYXJzZV9kdGAgZ2V0IGludm9sdmVkIGF0IGFsbCB3aXRoIHRoZSBgVEpBMTEwMmA/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGRldmljZSB0cmVlIHBhcnNpbmcgaXMgaW52b2tlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToxNy41MzY3NjgzNDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzg5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRqYTExeHhfcGFyc2VfZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTA2PXN0YXRpYyBpbnQgdGphMTF4eF9od21vbl9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTE2LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjUxNzpzdGF0aWMgaW50IHRqYTExeHhfcGFyc2VfZHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTMxPXN0YXRpYyBpbnQgdGphMTF4eF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQzLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU0NDpcXHRyZXQgPSB0amExMXh4X3BhcnNlX2R0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQ1LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjE3LjU3ODE2MjQ3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzcwODIzNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGB0amExMTAyX3AwX3JlbW92ZWAgYW5kIFdvcnRoRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWRkaW5nIGEgYHJlbW92ZWAgY2FsbGJhY2ssIGB0amExMTAyX3AwX3JlbW92ZWAsIHRvIHRoZSBgdGphMTEwMl9wMGAgZHJpdmVyLiBJIHJlY2FsbCB0aGF0IGB0amExMXh4X3BhcnNlX2R0YCBpcyBjYWxsZWQgZnJvbSBgdGphMTF4eF9wcm9iZWAsIGJ1dCBgdGphMTEwMl9wMGAgYWN0dWFsbHkgdXNlcyBgdGphMTEwMl9wMF9wcm9iZWAgYW5kIG5vdCBgdGphMTF4eF9wcm9iZWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgbWFkZSBtZSB0aGluayBgcGh5ZGV2LVx1MDAzZXByaXZgIHdvdWxkIGJlIHVzZWQgaW4gbW9yZSBwbGFjZXMuIEFzIGl0IHN0YW5kcywgaXQgYXBwZWFycyB0aGUgb25seSB1c2Ugb2YgYHBoeWRldi1cdTAwM2Vwcml2YCBpcyBnb2luZyB0byBiZSB3aXRoaW4gYHRqYTExMDJfcDBfcmVtb3ZlYCFcblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IGFzc2lnbnMgYHByaXZgIHRvIGBwaHlkZXYtXHUwMDNlcHJpdmAgd2l0aGluIGB0amExMTAyX3AwX3Byb2JlYCwgYW5kIHRoZW4gYWRkcyB0aGUgYHRqYTExMDJfcDBfcmVtb3ZlYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FuY2VscyBhIHdvcmtxdWV1ZS4gVGhpcyBpcyBhIHZlcnkgY2xlYW4gYWRkaXRpb24uXG5cblRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHRyaWdnZXIgdGhlIFdvcnRoRnV6emluZyBjcml0ZXJpYT8gVGhlIHByb21wdCBtZW50aW9ucyBleGNsdWRpbmcgcGF0Y2hlcyB0aGF0IGFkZCBkcml2ZXIgYC5yZW1vdmVgIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuICpUaGlzIGlzIGtleS4qIGByZW1vdmVgIGlzIHRoZSBkZXZpY2UgcmVtb3ZhbCBjYWxsYmFjay4gTG9va2luZyBhdCBpdCwgdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgYW5kIHV0aWxpemVzIGEgZHJpdmVyIGAucmVtb3ZlYCBjYWxsYmFjay4gTm8gb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBwcmVzZW50LlxuXG5TbywgKnllcyosIHRoZSBwYXRjaCAqZG9lcyogZmFsbCBzcXVhcmVseSB1bmRlciB0aGF0IGV4Y2x1c2lvbiBjcml0ZXJpYS4gSXQncyBhZGRpbmcgYSB0ZWFyZG93biBjYWxsYmFjaywgYHRqYTExMDJfcDBfcmVtb3ZlYCwgdG8gY2FuY2VsIGEgd29ya3F1ZXVlLiBJdCBsb29rcyBsaWtlIGl0IGlzIGV4YWN0bHkgd2hhdCB0aGUgcHJvbXB0IHNwZWNpZmllcy5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHRqYTExMDJfcDBfcmVtb3ZlYCBpcyAqb25seSogY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCwgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSBJIGFtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBzaG91bGQgcmVzdWx0IGluIGEgYFdvcnRoRnV6emluZz1mYWxzZWAgdmVyZGljdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MjUuMzQ4OTg4NTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTE3NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRqYTExMDJfcDBfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTYxMj1zdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNC1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2MzU6c3RhdGljIHZvaWQgdGphMTEwMl9wMF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MzYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9ODE2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU3LVxcdFxcdC5wcm9iZVxcdFxcdD0gdGphMTEwMl9wMF9wcm9iZSxcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo4NTg6XFx0XFx0LnJlbW92ZVxcdFxcdD0gdGphMTEwMl9wMF9yZW1vdmUsXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU5LVxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjI1LjM4OTUxMTg2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3MjY2ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCByZWFsbHkuIFRoZSBjb3JlIGNoYW5nZSBpcyBzb2xlbHkgdGhlIGFzc2lnbm1lbnQgb2YgYSBgLnJlbW92ZWAgY2FsbGJhY2sgd2l0aGluIHRoZSBgcGh5X2RyaXZlcmAgc3RydWN0dXJlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIHBsYWNlIHRoaXMgY2FsbGJhY2sgaXMgYmVpbmcgaG9va2VkIHVwLiBBbmQgdGhlIGFkZGVkIGBwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7YCBsaW5lIGlzIG1lcmVseSB0aGVyZSB0byBwcm92aWRlIGB0amExMTAyX3AwX3JlbW92ZWAgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgaXQgcmVxdWlyZXMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYm9pbHMgZG93biB0byB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgc2luZ2xlIGAucmVtb3ZlYCBjYWxsYmFjay4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIHRoaXMgbWVldHMgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSBwZXJmZWN0bHkuIEkgYW0gc2F0aXNmaWVkIHdpdGggdGhpcyBhc3Nlc3NtZW50LCBhbmQgSSB3aWxsIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ2LCJPdXRwdXRUb2tlbnMiOjg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MjkuMzg2NzgxOTU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZHJpdmVyIC5yZW1vdmUgY2FsbGJhY2sgKHRqYTExMDJfcDBfcmVtb3ZlKSBhbmQgc2V0cyB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgc28gdGhlIGNhbGxiYWNrIGNhbiBjYW5jZWwgYSB3b3JrcXVldWUuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgZXhlY3V0ZWQgZHVyaW5nIGRldmljZSByZW1vdmFsIG9yIHVuYmluZCBhcmUgZXhjbHVkZWQgZnJvbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZHJpdmVyIC5yZW1vdmUgY2FsbGJhY2sgKHRqYTExMDJfcDBfcmVtb3ZlKSBhbmQgc2V0cyB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgc28gdGhlIGNhbGxiYWNrIGNhbiBjYW5jZWwgYSB3b3JrcXVldWUuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgZXhlY3V0ZWQgZHVyaW5nIGRldmljZSByZW1vdmFsIG9yIHVuYmluZCBhcmUgZXhjbHVkZWQgZnJvbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsw87c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 00:24:39 +0000 UTC FinishedAt: 2026-07-31 01:15:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIGRyaXZlciAucmVtb3ZlIGNhbGxiYWNrICh0amExMTAyX3AwX3JlbW92ZSkgYW5kIHNldHMgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIHNvIHRoZSBjYWxsYmFjayBjYW4gY2FuY2VsIGEgd29ya3F1ZXVlLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGV4ZWN1dGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciB1bmJpbmQgYXJlIGV4Y2x1ZGVkIGZyb20gZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YzVlZDI5MmUyNGMwMjllMTUzYjAwMzc2ZjgxODhlNTc2ODI5NzMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTQ6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xuaW5kZXggMDdlOTRhMjQ3OGFjMy4uNjgwNjJhNGM1MTkwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xuQEAgLTYyMCw2ICYjNDM7NjIwLDcgQEAgc3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpO1xuIFxuIFx0cmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpO1xuQEAgLTYzMSw2ICYjNDM7NjMyLDEzIEBAIHN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRqYTExeHhfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4ge1xuIFx0aW50IHJldDtcbkBAIC04NDcsNiAmIzQzOzg1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xuIFx0XHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXG4gXHRcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXG4gXHRcdC5wcm9iZVx0XHQ9IHRqYTExMDJfcDBfcHJvYmUsXG4mIzQzO1x0XHQucmVtb3ZlXHRcdD0gdGphMTEwMl9wMF9yZW1vdmUsXG4gXHRcdC5zb2Z0X3Jlc2V0XHQ9IHRqYTExeHhfc29mdF9yZXNldCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXG4gXHRcdC5jb25maWdfaW5pdFx0PSB0amExMXh4X2NvbmZpZ19pbml0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkcml2ZXIgLnJlbW92ZSBjYWxsYmFjayAodGphMTEwMl9wMF9yZW1vdmUpIGFuZCBzZXRzIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzbyB0aGUgY2FsbGJhY2sgY2FuIGNhbmNlbCBhIHdvcmtxdWV1ZS4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBleGVjdXRlZCBkdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgdW5iaW5kIGFyZSBleGNsdWRlZCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM1ZWQyOTJlMjRjMDI5ZTE1M2IwMDM3NmY4MTg4ZTU3NjgyOTczMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDAxOjE0OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYwppbmRleCAwN2U5NGEyNDc4YWMzLi42ODA2MmE0YzUxOTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYwpAQCAtNjIwLDYgJiM0Mzs2MjAsNyBAQCBzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2LSZndDtwaHlkZXYgPSBwaHlkZXY7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiAJSU5JVF9XT1JLKCZhbXA7cHJpdi0mZ3Q7cGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpOwogCiAJcmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpOwpAQCAtNjMxLDYgJiM0Mzs2MzIsMTMgQEAgc3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHRqYTExeHhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3BoeV9yZWdpc3Rlcl93b3JrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRqYTExMDJfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBvcnQwKQogewogCWludCByZXQ7CkBAIC04NDcsNiAmIzQzOzg1NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0gewogCQkuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsCiAJCS5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsCiAJCS5wcm9iZQkJPSB0amExMTAyX3AwX3Byb2JlLAomIzQzOwkJLnJlbW92ZQkJPSB0amExMTAyX3AwX3JlbW92ZSwKIAkJLnNvZnRfcmVzZXQJPSB0amExMXh4X3NvZnRfcmVzZXQsCiAJCS5jb25maWdfYW5lZwk9IHRqYTExeHhfY29uZmlnX2FuZWcsCiAJCS5jb25maWdfaW5pdAk9IHRqYTExeHhfY29uZmlnX2luaXQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhGdXp6aW5nIERldGVybWluYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgb3Igbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYGZhbHNlYCBpZiBpdCAqb25seSogbW9kaWZpZXMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcywgbGlrZSBgLnJlbW92ZWAsIHdoZW4gZGVhbGluZyB3aXRoIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC4KClJpZ2h0LCBzbyB0aGUgcGF0Y2ggbW9kaWZpZXMgYHRqYTExMDJfcDBfcHJvYmVgIGJ5IGFkZGluZyBgcGh5ZGV2LSZndDtwcml2ID0gcHJpdjtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGlzIGp1c3QgYWJvdXQgdGhhdCBgLnJlbW92ZWAgY2FsbGJhY2s/JiMzNDsgQmVjYXVzZSB0aGUgcGF0Y2ggKmFsc28qIGludHJvZHVjZXMgYSBgdGphMTEwMl9wMF9yZW1vdmVgIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYGNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtwaHlfcmVnaXN0ZXJfd29yayk7YC4gQW5kLCBpdCYjMzk7cyBhc3NpZ25pbmcgYC5yZW1vdmUgPSB0amExMTAyX3AwX3JlbW92ZWAgaW4gdGhlIGB0amExMXh4X2RyaXZlcmAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGB0amExMTAyX3AwX3JlbW92ZWAgd2lsbCB1c2UgYHBoeWRldi0mZ3Q7cHJpdmAuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCEgSXMgYHBoeWRldi0mZ3Q7cHJpdmAgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlPyBHb3R0YSBkb3VibGUgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5ZGV2LVx1MDAzZXByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0yNzU9c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMjc2LXtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjI3NzpcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3OC1cdGludCBtaWlfbW9kZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz01MTc9c3RhdGljIGludCB0amExMXh4X3BhcnNlX2R0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTE5LVx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1MjA6XHRzdHJ1Y3QgdGphMTF4eF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MjEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTMxPXN0YXRpYyBpbnQgdGphMTF4eF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU0MS1cdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTQyOlx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTYxMj1zdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MjItXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjYyMzpcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYyNC1cdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXBoeV9yZWdpc3Rlcl93b3JrLCB0amExMTAyX3AxX3JlZ2lzdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz02MzU9c3RhdGljIHZvaWQgdGphMTEwMl9wMF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNi17XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2Mzc6XHRzdHJ1Y3QgdGphMTF4eF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2NwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIFNpbXBsZSBQSFkgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIGluIGB0amExMTAyX3AwX3Byb2JlYCBpcyBzdHJhaWdodGZvcndhcmQ6IGp1c3QgYXNzaWduaW5nIGBwcml2YCB0byBgcGh5ZGV2LSZndDtwcml2YC4gU2VlbXMgaW5ub2N1b3VzIGVub3VnaC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGVyZSBlbHNlIGlzIGBwaHlkZXYtJmd0O3ByaXZgIHVzZWQ/CgpSaWdodCwgZGlnZ2luZyBpbnRvIGl0LCBJIHNlZSB0aGF0IGJvdGggYHRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlYCBhbmQgYHRqYTExeHhfcGFyc2VfZHRgIHJlbHkgb24gdGhpcyBgcGh5ZGV2LSZndDtwcml2YCBmaWVsZC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYHRqYTExMDJfcDBfcHJvYmVgIGNhbGwuIElmIHRoZXkgYXJlLCB0aGlzIHNpbXBsZSBhc3NpZ25tZW50IGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLCBvciBhdCBsZWFzdCBiZSB2ZXJ5IGltcG9ydGFudCB0byB0aGUgc3RhYmlsaXR5IG9mIHRoZSBkZXZpY2UuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGVpdGhlciBgdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGVgIG9yIGB0amExMXh4X3BhcnNlX2R0YCBhcmUgaW52b2tlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgdGphMTEwMl9wMGAgZGV2aWNlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAgdG8gY29uZmlybSB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTI0ND1zdGF0aWMgaW50IHRqYTExeHhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0yNzQtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzoyNzU6c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMjc2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0zMDA9c3RhdGljIGludCB0amExMXh4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMzIwLVx0XHRyZWdfbWFzayB8PSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6MzIxOlx0XHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMzIyLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTMzMi1cdFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6MzMzOlx0XHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMzM0LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTIKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGB0amExMTAyX3AwYCBjb21wb25lbnQgdXRpbGl6ZXMgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGtub3cgdGhlIGFyY2hpdGVjdHVyZSBpbnRpbWF0ZWx5LiBUaGUgc3RydWN0dXJlIHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIG5ldHdvcmsgdHJhbnNjZWl2ZXIsIHBlcmhhcHMgYW4gYXV0b21vdGl2ZSBFdGhlcm5ldCBQSFkuIFRoZSBuYW1pbmcgY29udmVudGlvbiwgd2l0aCB0aGUgYHRqYWAgcHJlZml4LCBzdHJvbmdseSBoaW50cyBhdCBhIGNvbm5lY3Rpb24gdG8gYSBwYXJ0aWN1bGFyIG1hbnVmYWN0dXJlciBhbmQgcGFydCBzZXJpZXMuCgpNeSBhcHByb2FjaCB3b3VsZCBiZTogRmlyc3QsIEkgbmVlZCB0byBvcGVuIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgc3BlY2lmaWNhbGx5LCB0aGUgYHRqYTExeHhfZHJpdmVyYCBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIGFuZCBleGFtaW5lIHRoZSBgdGphMTEwMl9wMGAgaW5zdGFudGlhdGlvbiBvciBkZWZpbml0aW9uIHdpdGhpbiB0aGF0IGRyaXZlci4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgc3lzdGVtYXRpY2FsbHkgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2FsbHMgdG8gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBUaGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uIGl0c2VsZiBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIERpZCB0aGV5IHVzZSBpdD8gSWYgc28sIHdoZXJlIGFuZCBob3c/IElzIHRoZXJlIGEgcG9pbnRlciB0byBpdD8gV2VyZSBhbnkgb2YgaXRzIHBhcmFtZXRlcnMgbW9kaWZpZWQ/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMsIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudHMsIG9yIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCB3b3VsZCBjYXVzZSBgdGphMTF4eF9jb25maWdfaW5pdGAgdG8gYmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgaW5pdGlhbGl6aW5nIG9yIGNvbmZpZ3VyaW5nIHRoZSBgdGphMTEwMl9wMGAgY29tcG9uZW50LiBJIHdpbGwgYmUgcXVpY2ssIHRoZSBmaWxlIHN0cnVjdHVyZSBvZiB0aGUgZHJpdmVyIHdpbGwgcHJvdmlkZSBjbHVlcywgYXMgd2lsbCBjb21tb24gcHJvZ3JhbW1pbmcgcGF0dGVybnMgdXNlZCBpbiB0aGUgZmllbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGphMTEwMl9wMF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MTEtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2MTI6c3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MTMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NTYtXHRcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo4NTc6XHRcdC5wcm9iZVx0XHQ9IHRqYTExMDJfcDBfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NTgtXHRcdC5yZW1vdmVcdFx0PSB0amExMTAyX3AwX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zLCBkcml2ZXJzLCBhbmQgdGhlIFRKQTExMDI6CgoqKkRpdmluZyBpbnRvIHRoZSBUSkExMTAyIERyaXZlciBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiB0aGUgYHRqYTExMDJfcDBgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRqYTExeHhfZHJpdmVyYCBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBLbm93aW5nIHRoZSBjb21wbGV0ZSBzdHJ1Y3QgZGVmaW5pdGlvbiBpcyBwYXJhbW91bnQuIEl0JiMzOTtzIHRoZSBibHVlcHJpbnQsIHRoZSBmdW5kYW1lbnRhbCBkYXRhIGNvbnRhaW5lciBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWSAoUGh5c2ljYWwgTGF5ZXIgVHJhbnNjZWl2ZXIpIGNvbmZpZ3VyYXRpb24gb3IgY29udHJvbCBibG9jay4gSSBuZWVkIHRvIHNlZSAqZXZlcnl0aGluZyog4oCTIHRoZSBtZW1iZXIgdmFyaWFibGVzLCB0aGVpciBkYXRhIHR5cGVzLCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIGVhY2ggb3RoZXIsIGFuZCBhbnkgcmVsZXZhbnQgY29tbWVudHMgdGhhdCBtaWdodCBpbGx1bWluYXRlIHRoZWlyIHB1cnBvc2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlZ2lzdGVycywgaW50ZXJuYWwgc3RhdGVzLCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBvciBwZXJoYXBzIGNhbGxiYWNrIGZ1bmN0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBmcm9tIHRoZSBkZWZpbml0aW9uIHdpbGwgcHJvdmlkZSB0aGUgZnJhbWV3b3JrLiBUaGlzIHdpbGwgbGVhZCB0byBmdXJ0aGVyIHF1ZXN0aW9ucyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzLCBob3cgdGhlIGRyaXZlciBpbml0aWFsaXplcywgbWFuYWdlcywgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBUSkExMTAyIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0NTpcdFx0XHQuZ2V0X3NxaV9tYXhcdD0gdGphMTF4eF9nZXRfc3FpX21heCxcbiA4NDY6XHRcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4gODQ3Olx0XHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuIDg0ODpcdFx0XHQuc2V0X2xvb3BiYWNrICAgPSBnZW5waHlfbG9vcGJhY2ssXG4gODQ5Olx0XHRcdC8qIFN0YXRpc3RpY3MgKi9cbiA4NTA6XHRcdFx0LmdldF9zc2V0X2NvdW50ID0gdGphMTF4eF9nZXRfc3NldF9jb3VudCxcbiA4NTE6XHRcdFx0LmdldF9zdHJpbmdzXHQ9IHRqYTExeHhfZ2V0X3N0cmluZ3MsXG4gODUyOlx0XHRcdC5nZXRfc3RhdHNcdD0gdGphMTF4eF9nZXRfc3RhdHMsXG4gODUzOlx0XHR9LCB7XG4gODU0Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7TlhQIFRKQTExMDIgUG9ydCAwXCYjMzQ7LFxuIDg1NTpcdFx0XHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXG4gODU2Olx0XHRcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXG4gODU3Olx0XHRcdC5wcm9iZVx0XHQ9IHRqYTExMDJfcDBfcHJvYmUsXG4gODU4Olx0XHRcdC5yZW1vdmVcdFx0PSB0amExMTAyX3AwX3JlbW92ZSxcbiA4NTk6XHRcdFx0LnNvZnRfcmVzZXRcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxuIDg2MDpcdFx0XHQuY29uZmlnX2FuZWdcdD0gdGphMTF4eF9jb25maWdfYW5lZyxcbiA4NjE6XHRcdFx0LmNvbmZpZ19pbml0XHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXG4gODYyOlx0XHRcdC5yZWFkX3N0YXR1c1x0PSB0amExMXh4X3JlYWRfc3RhdHVzLFxuIDg2MzpcdFx0XHQuZ2V0X3NxaVx0PSB0amExMXh4X2dldF9zcWksXG4gODY0Olx0XHRcdC5nZXRfc3FpX21heFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDUxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGJlaW5nIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQgYSBtaW51dGUsIGlmIGBwaHlkZXYtJmd0O3ByaXZgIHdhc24mIzM5O3QgYmVpbmcgc2V0ICpiZWZvcmUqIHRoaXMgcGF0Y2gsIGhvdyB3YXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGV2ZW4gZnVuY3Rpb25pbmcgY29ycmVjdGx5PyYjMzQ7IFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBpc3N1ZTogYSBmdW5jdGlvbiBkZXBlbmRpbmcgb24gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvZGUgYmVmb3JlIHRoZSBwYXRjaCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgdGphMTEwMl9wMF9wcm9iZWAg4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyB3ZXJlIGhhbmRsZWQgKmJlZm9yZSogdGhpcyBjaGFuZ2UuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIHdhcyBiZWluZyBpbXBsaWNpdGx5IGFzc3VtZWQsIG9yIGEgZGlmZmVyZW50IHBhdGggd2FzIGJlaW5nIHRha2VuLiBJIG5lZWQgdG8gZGlzc2VjdCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxMjpcdHN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIDYxMzpcdHtcbiA2MTQ6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiA2MTU6XHRcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXY7XG4gNjE2Olx0XHRpbnQgcmV0O1xuIDYxNzpcdFxuIDYxODpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuIDYxOTpcdFx0aWYgKCFwcml2KVxuIDYyMDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2MjE6XHRcbiA2MjI6XHRcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuIDYyMzpcdFx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuIDYyNDpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpO1xuIDYyNTpcdFxuIDYyNjpcdFx0cmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpO1xuIDYyNzpcdFx0aWYgKHJldClcbiA2Mjg6XHRcdFx0cmV0dXJuIHJldDtcbiA2Mjk6XHRcbiA2MzA6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2VwaHlfcmVnaXN0ZXJfd29yayk7XG4gNjMxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBgdGphMTF4eF9jb25maWdfaW5pdGAgQnVnIEZpeCoqCgpIb2xkIG9uLCBJIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGB0amExMTAyX3AwX3Byb2JlYCBhbGxvY2F0ZXMgdGhpcyBgcHJpdmAgc3RydWN0dXJlLCBhbmQgY3J1Y2lhbGx5LCBpdCBhc3NpZ25zIGBwcml2LSZndDtwaHlkZXYgPSBwaHlkZXZgLiAgTm93LCB0aGUgcGF0Y2ggdGhlbiBhc3NpZ25zIHRoZSAqcmV2ZXJzZSosIGBwaHlkZXYtJmd0O3ByaXYgPSBwcml2YC4gIEFoLCByaWdodC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoYXQgYXNzaWdubWVudCwgYHBoeWRldi0mZ3Q7cHJpdiA9IHByaXZgLCB3YXMgKm1pc3NpbmcqLiBTbywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGJlZW4gdHJ5aW5nIHRvIGFjY2VzcyBgcGh5ZGV2LSZndDtwcml2YCB3aXRob3V0IGl0IGV2ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoYXQgd291bGQgZGVmaW5pdGVseSBoYXZlIGxlZCB0byBhIGNyYXNoIGluIGB0amExMXh4X2NvbmZpZ19pbml0YCwgd291bGRuJiMzOTt0IGl0PyBPa2F5LCBsZXQgbWUgY29uZmlybSB0aGF0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGNvZGUgZm9yIGB0amExMXh4X2NvbmZpZ19pbml0YCB0byBjb25maXJtIHRoYXQgaXQgZG9lcywgaW4gZmFjdCwgdHJ5IHRvIHVzZSBgcGh5ZGV2LSZndDtwcml2YC4gTmVlZCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc291bmQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0c3RhdGljIGludCB0amExMXh4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gMzAxOlx0e1xuIDMwMjpcdFx0dTE2IHJlZ19tYXNrLCByZWdfdmFsO1xuIDMwMzpcdFx0aW50IHJldDtcbiAzMDQ6XHRcbiAzMDU6XHRcdHJldCA9IHRqYTExeHhfZW5hYmxlX3JlZ193cml0ZShwaHlkZXYpO1xuIDMwNjpcdFx0aWYgKHJldClcbiAzMDc6XHRcdFx0cmV0dXJuIHJldDtcbiAzMDg6XHRcbiAzMDk6XHRcdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuIDMxMDpcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwO1xuIDMxMTpcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuIDMxMjpcdFxuIDMxMzpcdFx0c3dpdGNoIChwaHlkZXYtXHUwMDNlcGh5X2lkIFx1MDAyNiBQSFlfSURfTUFTSykge1xuIDMxNDpcdFx0Y2FzZSBQSFlfSURfVEpBMTEwMDpcbiAzMTU6XHRcdFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9BVVRPX09QIHwgTUlJX0NGRzFfTEVEX01PREVfTUFTSyB8XG4gMzE2Olx0XHRcdFx0ICAgTUlJX0NGRzFfTEVEX0VOQUJMRTtcbiAzMTc6XHRcdFx0cmVnX3ZhbCA9IE1JSV9DRkcxX0FVVE9fT1AgfCBNSUlfQ0ZHMV9MRURfTU9ERV9MSU5LVVAgfFxuIDMxODpcdFx0XHRcdCAgTUlJX0NGRzFfTEVEX0VOQUJMRTtcbiAzMTk6XHRcbiAzMjA6XHRcdFx0cmVnX21hc2sgfD0gTUlJX0NGRzFfSU5URVJGQUNFX01PREVfTUFTSztcbiAzMjE6XHRcdFx0cmV0ID0gdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGUocGh5ZGV2KTtcbiAzMjI6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzMjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDMyNDpcdFxuIDMyNTpcdFx0XHRyZWdfdmFsIHw9IChyZXQgXHUwMDI2IDB4ZmZmZik7XG4gMzI2Olx0XHRcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQ0ZHMSwgcmVnX21hc2ssIHJlZ192YWwpO1xuIDMyNzpcdFx0XHRpZiAocmV0KVxuIDMyODpcdFx0XHRcdHJldHVybiByZXQ7XG4gMzI5Olx0XHRcdGJyZWFrO1xuIDMzMDpcdFx0Y2FzZSBQSFlfSURfVEpBMTEwMlM6XG4gMzMxOlx0XHRjYXNlIFBIWV9JRF9USkExMTAxOlxuIDMzMjpcdFx0XHRyZWdfbWFzayA9IE1JSV9DRkcxX0lOVEVSRkFDRV9NT0RFX01BU0s7XG4gMzMzOlx0XHRcdHJldCA9IHRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlKHBoeWRldik7XG4gMzM0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzM1Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAzMzY6XHRcbiAzMzc6XHRcdFx0cmVnX3ZhbCA9IHJldCBcdTAwMjYgMHhmZmZmO1xuIDMzODpcdFx0XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0NGRzEsIHJlZ19tYXNrLCByZWdfdmFsKTtcbiAzMzk6XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczNgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgUEhZIEluaXRpYWxpemF0aW9uKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgdXNpbmcgYHBoeWRldi0mZ3Q7cGh5X2lkICZhbXA7IFBIWV9JRF9NQVNLYC4gUmlnaHQsIHJpZ2h0LiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgd2F5IHRvIGlkZW50aWZ5IHRoZSBQSFksIG1hc2tpbmcgb3V0IHNwZWNpZmljIGJpdHMgdG8gbmFycm93IGl0IGRvd24gdG8gYSByZWxldmFudCBkZXZpY2UgZmFtaWx5IG9yIHR5cGUuCgpCdXQsIGZvciB0aGUgYHRqYTExMDJfcDBgIGNvbmZpZ3VyYXRpb24uLi4gd2hhdCBleGFjdGx5ICppcyogdGhlIGBwaHlfaWRgIGZvciB0aGF0IHBhcnRpY3VsYXIgUEhZPyBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFsdWUsIG9yIGF0IGxlYXN0IHRoZSBleHBlY3RlZCBtYXNrZWQgdmFsdWUsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoYXQgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGNvZGUgcGF0aCBnZXRzIGV4ZWN1dGVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGludGVuZGVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgbW9kZWwgc3BlY2lmaWNhbGx5LiBUaGF0IGBwaHlfaWRgIGNoZWNrIGlzIGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byBnbyBsb29rIHRoYXQgdXAsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbG9naWMgaGVyZSBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDgwMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDgwMjpcdFxuIDgwMzpcdFx0aWYgKCEocmV0IFx1MDAyNiBNSUlfRUNUUkxfQ0FCTEVfVEVTVCkpIHtcbiA4MDQ6XHRcdFx0KmZpbmlzaGVkID0gdHJ1ZTtcbiA4MDU6XHRcbiA4MDY6XHRcdFx0cmV0ID0gcGh5X3NldF9iaXRzKHBoeWRldiwgTUlJX0NPTU1DRkcsIE1JSV9DT01NQ0ZHX0FVVE9fT1ApO1xuIDgwNzpcdFx0XHRpZiAocmV0KVxuIDgwODpcdFx0XHRcdHJldHVybiByZXQ7XG4gODA5Olx0XG4gODEwOlx0XHRcdHJldHVybiB0amExMXh4X2NhYmxlX3Rlc3RfcmVwb3J0KHBoeWRldik7XG4gODExOlx0XHR9XG4gODEyOlx0XG4gODEzOlx0XHRyZXR1cm4gMDtcbiA4MTQ6XHR9XG4gODE1Olx0XG4gODE2Olx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XG4gODE3Olx0XHR7XG4gODE4Olx0XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfVEpBMTEwMCksXG4gODE5Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7TlhQIFRKQTExMDBcJiMzNDssXG4gODIwOlx0XHRcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcbiA4MjE6XHRcdFx0LnByb2JlXHRcdD0gdGphMTF4eF9wcm9iZSxcbiA4MjI6XHRcdFx0LnNvZnRfcmVzZXRcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxuIDgyMzpcdFx0XHQuY29uZmlnX2FuZWdcdD0gdGphMTF4eF9jb25maWdfYW5lZyxcbiA4MjQ6XHRcdFx0LmNvbmZpZ19pbml0XHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXG4gODI1Olx0XHRcdC5yZWFkX3N0YXR1c1x0PSB0amExMXh4X3JlYWRfc3RhdHVzLFxuIDgyNjpcdFx0XHQuZ2V0X3NxaVx0PSB0amExMXh4X2dldF9zcWksXG4gODI3Olx0XHRcdC5nZXRfc3FpX21heFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxuIDgyODpcdFx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbiA4Mjk6XHRcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4gODMwOlx0XHRcdC5zZXRfbG9vcGJhY2sgICA9IGdlbnBoeV9sb29wYmFjayxcbiA4MzE6XHRcdFx0LyogU3RhdGlzdGljcyAqL1xuIDgzMjpcdFx0XHQuZ2V0X3NzZXRfY291bnQgPSB0amExMXh4X2dldF9zc2V0X2NvdW50LFxuIDgzMzpcdFx0XHQuZ2V0X3N0cmluZ3NcdD0gdGphMTF4eF9nZXRfc3RyaW5ncyxcbiA4MzQ6XHRcdFx0LmdldF9zdGF0c1x0PSB0amExMXh4X2dldF9zdGF0cyxcbiA4MzU6XHRcdH0sIHtcbiA4MzY6XHRcdFx0UEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9USkExMTAxKSxcbiA4Mzc6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtOWFAgVEpBMTEwMVwmIzM0OyxcbiA4Mzg6XHRcdFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxuIDgzOTpcdFx0XHQucHJvYmVcdFx0PSB0amExMXh4X3Byb2JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzU3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgYHRqYTExeHhfZHJpdmVyYCoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiB3ZSBuZWVkIHRvIHNwZW5kIHNvbWUgcXVhbGl0eSB0aW1lIHdpdGggdGhlIGB0amExMXh4X2RyaXZlcmAuIEkga25vdyB0aGUgYmFzaWNzLCB0aGUgaGlnaC1sZXZlbCBhcmNoaXRlY3R1cmUsIG1heWJlIGV2ZW4gc29tZSBvZiB0aGUgY29tbW9uIHJlZ2lzdGVyIGxheW91dHMuIEJ1dCAmIzM0O3JlYWQgbW9yZSYjMzQ7IGltcGxpZXMgYSBzcGVjaWZpYyBuZWVkIGZvciBhIGRlZXBlciBkaXZlLiBBbSBJIHRyeWluZyB0byBkZWJ1ZyBhIHBhcnRpY3VsYXIgaXNzdWU/IEFtIEkgbG9va2luZyB0byBleHRlbmQgaXRzIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IGhhcmR3YXJlIHJldmlzaW9uIG9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbj8gT3IgbWF5YmUgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgYmVzdCBwcmFjdGljZXM/CgpUaGlzIGNvdWxkIG1lYW4gYSBmZXcgdGhpbmdzLiBQZXJoYXBzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmRzIHRvIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGxpbmsgc3RhdHVzIGNoYW5nZXMuIE9yIEkgbWlnaHQgYmUgZm9jdXNpbmcgb24gdGhlIE1BQyBpbnRlcmZhY2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUEhZLiBXaGF0IGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdGltaW5nIGRlcGVuZGVuY2llcyBvciByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFuZCBsZXQmIzM5O3Mgbm90IGZvcmdldCBhYm91dCB0aGUgZXJyb3IgaGFuZGxpbmcg4oCTIGhvdyByb2J1c3QgaXMgaXQgaW4gdmFyaW91cyBmYXVsdCBzY2VuYXJpb3M/CgpJIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFdoYXQgb3RoZXIgZHJpdmVycyBvciBrZXJuZWwgY29tcG9uZW50cyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aD8gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMsIHNvIEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGFueSBhcmVhcyB3aGVyZSBjaGFuZ2VzIGNvdWxkIGludHJvZHVjZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4gJiMzNDtSZWFkIG1vcmUmIzM0OyBzaWduaWZpZXMgdGhhdCBJIGFtIG5vdCBzYXRpc2ZpZWQgd2l0aCBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcsIGFuZCBJIGhhdmUgYSBjbGVhciBvYmplY3RpdmUgdG8gZmlsbCB0aGUgZ2FwcyBpbiBteSBrbm93bGVkZ2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdFx0XHQuc29mdF9yZXNldFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXG4gODQxOlx0XHRcdC5jb25maWdfYW5lZ1x0PSB0amExMXh4X2NvbmZpZ19hbmVnLFxuIDg0MjpcdFx0XHQuY29uZmlnX2luaXRcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcbiA4NDM6XHRcdFx0LnJlYWRfc3RhdHVzXHQ9IHRqYTExeHhfcmVhZF9zdGF0dXMsXG4gODQ0Olx0XHRcdC5nZXRfc3FpXHQ9IHRqYTExeHhfZ2V0X3NxaSxcbiA4NDU6XHRcdFx0LmdldF9zcWlfbWF4XHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXG4gODQ2Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuIDg0NzpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiA4NDg6XHRcdFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxuIDg0OTpcdFx0XHQvKiBTdGF0aXN0aWNzICovXG4gODUwOlx0XHRcdC5nZXRfc3NldF9jb3VudCA9IHRqYTExeHhfZ2V0X3NzZXRfY291bnQsXG4gODUxOlx0XHRcdC5nZXRfc3RyaW5nc1x0PSB0amExMXh4X2dldF9zdHJpbmdzLFxuIDg1MjpcdFx0XHQuZ2V0X3N0YXRzXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxuIDg1MzpcdFx0fSwge1xuIDg1NDpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O05YUCBUSkExMTAyIFBvcnQgMFwmIzM0OyxcbiA4NTU6XHRcdFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxuIDg1NjpcdFx0XHQuZmxhZ3MgICAgICAgICAgPSBQSFlfUE9MTF9DQUJMRV9URVNULFxuIDg1NzpcdFx0XHQucHJvYmVcdFx0PSB0amExMTAyX3AwX3Byb2JlLFxuIDg1ODpcdFx0XHQucmVtb3ZlXHRcdD0gdGphMTEwMl9wMF9yZW1vdmUsXG4gODU5Olx0XHRcdC5zb2Z0X3Jlc2V0XHQ9IHRqYTExeHhfc29mdF9yZXNldCxcbiA4NjA6XHRcdFx0LmNvbmZpZ19hbmVnXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXG4gODYxOlx0XHRcdC5jb25maWdfaW5pdFx0PSB0amExMXh4X2NvbmZpZ19pbml0LFxuIDg2MjpcdFx0XHQucmVhZF9zdGF0dXNcdD0gdGphMTF4eF9yZWFkX3N0YXR1cyxcbiA4NjM6XHRcdFx0LmdldF9zcWlcdD0gdGphMTF4eF9nZXRfc3FpLFxuIDg2NDpcdFx0XHQuZ2V0X3NxaV9tYXhcdD0gdGphMTF4eF9nZXRfc3FpX21heCxcbiA4NjU6XHRcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2UsXG4gODY2Olx0XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuIDg2NzpcdFx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiA4Njg6XHRcdFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxuIDg2OTpcdFx0XHQvKiBTdGF0aXN0aWNzICovXG4gODcwOlx0XHRcdC5nZXRfc3NldF9jb3VudCA9IHRqYTExeHhfZ2V0X3NzZXRfY291bnQsXG4gODcxOlx0XHRcdC5nZXRfc3RyaW5nc1x0PSB0amExMXh4X2dldF9zdHJpbmdzLFxuIDg3MjpcdFx0XHQuZ2V0X3N0YXRzXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxuIDg3MzpcdFx0XHQuY29uZmlnX2ludHJcdD0gdGphMTF4eF9jb25maWdfaW50cixcbiA4NzQ6XHRcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSB0amExMXh4X2hhbmRsZV9pbnRlcnJ1cHQsXG4gODc1Olx0XHRcdC5jYWJsZV90ZXN0X3N0YXJ0ID0gdGphMTF4eF9jYWJsZV90ZXN0X3N0YXJ0LFxuIDg3NjpcdFx0XHQuY2FibGVfdGVzdF9nZXRfc3RhdHVzID0gdGphMTF4eF9jYWJsZV90ZXN0X2dldF9zdGF0dXMsXG4gODc3Olx0XHR9LCB7XG4gODc4Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7TlhQIFRKQTExMDIgUG9ydCAxXCYjMzQ7LFxuIDg3OTpcdFx0XHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDM3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYHRqYTExMDJfcDBgIGFuZCBgcGh5X2lkYCBBc3NvY2lhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGphMTEwMl9wMGAgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGBwaHlfaWRgLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlIGlzIGB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2VgLiBUaGUgaW1wbGljYXRpb24gaXMgcHJldHR5IGNsZWFyOiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjb3JyZWN0bHkgYXNzb2NpYXRpbmcgdGhhdCBzcGVjaWZpYyBkZXZpY2UgaW5zdGFuY2Ugd2l0aCB0aGUgcmlnaHQgcGh5c2ljYWwgbGF5ZXIgaWRlbnRpZmllci4gVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlYCBmdW5jdGlvbiB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBtYXRjaGluZyBpcyBwZXJmb3JtZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NjQyPXN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjYxLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NjYyOnN0YXRpYyBpbnQgdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02NjMte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NjQtXHRcdC5nZXRfc3FpX21heFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6ODY1Olx0XHQubWF0Y2hfcGh5X2RldmljZSA9IHRqYTExMDJfcDBfbWF0Y2hfcGh5X2RldmljZSxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg2Ni1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjI1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIGRlZmluaXRlbHkgY2VudGVyZWQgYXJvdW5kIG1hdGNoaW5nIGEgcGh5c2ljYWwgZGV2aWNlLCBhbmQgZnJvbSB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGl0IHNlZW1zIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBQSFksIHByb2JhYmx5IHJlbGF0aW5nIHRvIEV0aGVybmV0IG9yIGEgc2ltaWxhciBwaHlzaWNhbCBsYXllciBjb21tdW5pY2F0aW9uIHN0YW5kYXJkLiBUaGUgJiMzNDttYXRjaCYjMzQ7IHBhcnQgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MsIG1heWJlIHByb2JpbmcgdGhlIGhhcmR3YXJlLCByZWFkaW5nIHNvbWUgcmVnaXN0ZXJzLCBvciBjb21wYXJpbmcgZGV2aWNlIElEcyB0byBhIGtub3duIGxpc3QuIFRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIHNlZW1zIGNyaXRpY2FsOiBpdCYjMzk7cyB0aGUgZ2F0ZXdheSBmb3IgdGhlIHN5c3RlbSB0byB1bmRlcnN0YW5kICp3aGljaCogVEpBMTEwMiBQSFkgaXMgY29ubmVjdGVkLiBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBsaWtlbHkgc2VydmVzIGFzIGEgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiBzdGVwLCBsaW5raW5nIHRoZSBkZXZpY2UgZHJpdmVyIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZsb3c6IGhvdyBpdCBpZGVudGlmaWVzIHRoZSBkZXZpY2UsIHdoYXQgY3JpdGVyaWEgaXQgdXNlcyBmb3IgbWF0Y2hpbmcsIGFuZCB3aGF0IGhhcHBlbnMgaWYgYSBtYXRjaCAqaXNuJiMzOTt0KiBmb3VuZC4gRXJyb3IgaGFuZGxpbmcgaXMgcHJvYmFibHkgaW1wb3J0YW50IGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgZm91bmRhdGlvbmFsIHRvIGdldCB0aGUgaGFyZHdhcmUgdGFsa2luZyB0byB0aGUgcmlnaHQgc29mdHdhcmUgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCBjb25mbGljdHMsIGxpa2UgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgUEhZcyBvciBwb3RlbnRpYWxseSBtdWx0aXBsZSBkZXZpY2VzIHVzaW5nIHRoZSBzYW1lIHNpbGljb24uIEZpbmFsbHksIGtub3dpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGRldmljZSB0cmVlIGVudHJpZXMgY291bGQgYmUgdmFsdWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MjpcdHN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4gNjQzOlx0e1xuIDY0NDpcdFx0aW50IHJldDtcbiA2NDU6XHRcbiA2NDY6XHRcdGlmICgocGh5ZGV2LVx1MDAzZXBoeV9pZCBcdTAwMjYgUEhZX0lEX01BU0spICE9IFBIWV9JRF9USkExMTAyKVxuIDY0NzpcdFx0XHRyZXR1cm4gMDtcbiA2NDg6XHRcbiA2NDk6XHRcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX1BIWVNJRDIpO1xuIDY1MDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA2NTE6XHRcdFx0cmV0dXJuIHJldDtcbiA2NTI6XHRcbiA2NTM6XHRcdC8qIFRKQTExMDIgUG9ydCAxIGhhcyBwaHlpZCAwIGFuZCBkb2VzbiYjMzk7dCBzdXBwb3J0IHRlbXBlcmF0dXJlXG4gNjU0Olx0XHQgKiBhbmQgdW5kZXJ2b2x0YWdlIGFsYXJtcy5cbiA2NTU6XHRcdCAqL1xuIDY1NjpcdFx0aWYgKHBvcnQwKVxuIDY1NzpcdFx0XHRyZXR1cm4gcmV0ID8gMSA6IDA7XG4gNjU4Olx0XG4gNjU5Olx0XHRyZXR1cm4gIXJldDtcbiA2NjA6XHR9XG4gNjYxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjUwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnkgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIHRoZSBQSFkgSWRlbnRpZmljYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBwaHlkZXZgIHN0cnVjdHVyZSwgYW5kIGl0IHNlZW1zIHRoZSByZXN1bHQgb2YgYHBoeWRldi0mZ3Q7cGh5X2lkICZhbXA7IFBIWV9JRF9NQVNLYCBpcyBldmFsdWF0aW5nIHRvIGBQSFlfSURfVEpBMTEwMmAuIFNvLCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBUSkExMTAyIFBIWS4gTm93LCBnaXZlbiB0aGF0IGlkZW50aWZpY2F0aW9uLCB0aGUgZm9jdXMgaGFzIHNoaWZ0ZWQgdG93YXJkcyB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uLiBJJiMzOTttIGluZmVycmluZyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGNvbmZpZ3VyZSBpdCBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHNwZWNpZmljIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoYXQgaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYXJlZnVsbHkgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZ2V0cyBzZXQgdXAgY29ycmVjdGx5IGFuZCB0aGUgZGV2aWNlIGlzIG9wZXJhdGluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIG5vdywgYW5kIG1ha2Ugc3VyZSB0aGlzIHNwZWNpZmljIFBIWSBpcyBiZWluZyBwcm9wZXJseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MTpcdFx0XHRmYWxsdGhyb3VnaDtcbiAzNDI6XHRcdGNhc2UgUEhZX0lEX1RKQTExMDI6XG4gMzQzOlx0XHRcdHJldCA9IHBoeV9zZXRfYml0cyhwaHlkZXYsIE1JSV9DT01NQ0ZHLCBNSUlfQ09NTUNGR19BVVRPX09QKTtcbiAzNDQ6XHRcdFx0aWYgKHJldClcbiAzNDU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0NjpcdFx0XHRicmVhaztcbiAzNDc6XHRcdGRlZmF1bHQ6XG4gMzQ4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0OTpcdFx0fVxuIDM1MDpcdFxuIDM1MTpcdFx0cmV0ID0gcGh5X2NsZWFyX2JpdHMocGh5ZGV2LCBNSUlfQ0ZHMSwgTUlJX0NGRzFfU0xFRVBfQ09ORklSTSk7XG4gMzUyOlx0XHRpZiAocmV0KVxuIDM1MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDM1NDpcdFxuIDM1NTpcdFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9DRkcyLCBNSUlfQ0ZHMl9TTEVFUF9SRVFVRVNUX1RPLFxuIDM1NjpcdFx0XHRcdCBNSUlfQ0ZHMl9TTEVFUF9SRVFVRVNUX1RPXzE2TVMpO1xuIDM1NzpcdFx0aWYgKHJldClcbiAzNTg6XHRcdFx0cmV0dXJuIHJldDtcbiAzNTk6XHRcbiAzNjA6XHRcdHJldCA9IHRqYTExeHhfd2FrZXVwKHBoeWRldik7XG4gMzYxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDM2MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDM2MzpcdFxuIDM2NDpcdFx0LyogQUNLIGludGVycnVwdHMgYnkgcmVhZGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovXG4gMzY1Olx0XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9JTlRTUkMpO1xuIDM2NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzNjc6XHRcdFx0cmV0dXJuIHJldDtcbiAzNjg6XHRcbiAzNjk6XHRcdHJldHVybiAwO1xuIDM3MDpcdH1cbiAzNzE6XHRcbiAzNzI6XHRzdGF0aWMgaW50IHRqYTExeHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAzNzM6XHR7XG4gMzc0Olx0XHRpbnQgcmV0O1xuIDM3NTpcdFxuIDM3NjpcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOS05PV047XG4gMzc3Olx0XHRwaHlkZXYtXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOU1VQUE9SVEVEO1xuIDM3ODpcdFxuIDM3OTpcdFx0cmV0ID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTIyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEpBMTEwMiBQSFkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiB3aXRoIHRoZSBgUEhZX0lEX1RKQTExMDJgIGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbiAqZG9lc24mIzM5O3QqIGNhbGwgYHRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlYC4gSW5zdGVhZCwgaXQganVzdCBzZXRzIHRoZSBgTUlJX0NPTU1DRkdgIHJlZ2lzdGVyIHdpdGggYE1JSV9DT01NQ0ZHX0FVVE9fT1BgLiAgSW50ZXJlc3RpbmcuIFNvLCB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGNvZGUgcGF0aCBhdm9pZHMgdXNpbmcgYHBoeWRldi0mZ3Q7cHJpdmAgZm9yIHRoaXMgc3BlY2lmaWMgUEhZLCB0aGUgYFRKQTExMDJgLiBUaGF04oCZcyBhIGtleSBkZXRhaWwgdG8gcmVtZW1iZXIuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogZG9lcyBgdGphMTF4eF9wYXJzZV9kdGAgZ2V0IGludm9sdmVkIGF0IGFsbCB3aXRoIHRoZSBgVEpBMTEwMmA/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGRldmljZSB0cmVlIHBhcnNpbmcgaXMgaW52b2tlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGphMTF4eF9wYXJzZV9kdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTUwNj1zdGF0aWMgaW50IHRqYTExeHhfaHdtb25fcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MTYtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1MTc6c3RhdGljIGludCB0amExMXh4X3BhcnNlX2R0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MTgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTUzMT1zdGF0aWMgaW50IHRqYTExeHhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01NDMtXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1NDQ6XHRyZXQgPSB0amExMXh4X3BhcnNlX2R0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01NDUtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgdGphMTEwMl9wMF9yZW1vdmVgIGFuZCBXb3J0aEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGFkZGluZyBhIGByZW1vdmVgIGNhbGxiYWNrLCBgdGphMTEwMl9wMF9yZW1vdmVgLCB0byB0aGUgYHRqYTExMDJfcDBgIGRyaXZlci4gSSByZWNhbGwgdGhhdCBgdGphMTF4eF9wYXJzZV9kdGAgaXMgY2FsbGVkIGZyb20gYHRqYTExeHhfcHJvYmVgLCBidXQgYHRqYTExMDJfcDBgIGFjdHVhbGx5IHVzZXMgYHRqYTExMDJfcDBfcHJvYmVgIGFuZCBub3QgYHRqYTExeHhfcHJvYmVgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBjb2RlIG1hZGUgbWUgdGhpbmsgYHBoeWRldi0mZ3Q7cHJpdmAgd291bGQgYmUgdXNlZCBpbiBtb3JlIHBsYWNlcy4gQXMgaXQgc3RhbmRzLCBpdCBhcHBlYXJzIHRoZSBvbmx5IHVzZSBvZiBgcGh5ZGV2LSZndDtwcml2YCBpcyBnb2luZyB0byBiZSB3aXRoaW4gYHRqYTExMDJfcDBfcmVtb3ZlYCEKClRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBhc3NpZ25zIGBwcml2YCB0byBgcGh5ZGV2LSZndDtwcml2YCB3aXRoaW4gYHRqYTExMDJfcDBfcHJvYmVgLCBhbmQgdGhlbiBhZGRzIHRoZSBgdGphMTEwMl9wMF9yZW1vdmVgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBjYW5jZWxzIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBhZGRpdGlvbi4KClRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHRyaWdnZXIgdGhlIFdvcnRoRnV6emluZyBjcml0ZXJpYT8gVGhlIHByb21wdCBtZW50aW9ucyBleGNsdWRpbmcgcGF0Y2hlcyB0aGF0IGFkZCBkcml2ZXIgYC5yZW1vdmVgIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuICpUaGlzIGlzIGtleS4qIGByZW1vdmVgIGlzIHRoZSBkZXZpY2UgcmVtb3ZhbCBjYWxsYmFjay4gTG9va2luZyBhdCBpdCwgdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgYW5kIHV0aWxpemVzIGEgZHJpdmVyIGAucmVtb3ZlYCBjYWxsYmFjay4gTm8gb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBwcmVzZW50LgoKU28sICp5ZXMqLCB0aGUgcGF0Y2ggKmRvZXMqIGZhbGwgc3F1YXJlbHkgdW5kZXIgdGhhdCBleGNsdXNpb24gY3JpdGVyaWEuIEl0JiMzOTtzIGFkZGluZyBhIHRlYXJkb3duIGNhbGxiYWNrLCBgdGphMTEwMl9wMF9yZW1vdmVgLCB0byBjYW5jZWwgYSB3b3JrcXVldWUuIEl0IGxvb2tzIGxpa2UgaXQgaXMgZXhhY3RseSB3aGF0IHRoZSBwcm9tcHQgc3BlY2lmaWVzLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHRqYTExMDJfcDBfcmVtb3ZlYCBpcyAqb25seSogY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCwgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSBJIGFtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggc2hvdWxkIHJlc3VsdCBpbiBhIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHZlcmRpY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RqYTExMDJfcDBfcmVtb3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NjEyPXN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNC1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjYzNTpzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjM2LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz04MTY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU3LVx0XHQucHJvYmVcdFx0PSB0amExMTAyX3AwX3Byb2JlLFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6ODU4Olx0XHQucmVtb3ZlXHRcdD0gdGphMTEwMl9wMF9yZW1vdmUsXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy04NTktXHRcdC5zb2Z0X3Jlc2V0XHQ9IHRqYTExeHhfc29mdF9yZXNldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNDYKCQkJCQkJCW91dHB1dDogODUKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgcmVhbGx5LiBUaGUgY29yZSBjaGFuZ2UgaXMgc29sZWx5IHRoZSBhc3NpZ25tZW50IG9mIGEgYC5yZW1vdmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdHVyZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBwbGFjZSB0aGlzIGNhbGxiYWNrIGlzIGJlaW5nIGhvb2tlZCB1cC4gQW5kIHRoZSBhZGRlZCBgcGh5ZGV2LSZndDtwcml2ID0gcHJpdjtgIGxpbmUgaXMgbWVyZWx5IHRoZXJlIHRvIHByb3ZpZGUgYHRqYTExMDJfcDBfcmVtb3ZlYCB3aXRoIHRoZSBuZWNlc3NhcnkgY29udGV4dCBpdCByZXF1aXJlcy4gRXNzZW50aWFsbHksIHRoZSBwYXRjaCBib2lscyBkb3duIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBzaW5nbGUgYC5yZW1vdmVgIGNhbGxiYWNrLiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhpcyBtZWV0cyB0aGUgZXhjbHVzaW9uIGNyaXRlcmlhIHBlcmZlY3RseS4gSSBhbSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFzc2Vzc21lbnQsIGFuZCBJIHdpbGwgYmUgc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkcml2ZXIgLnJlbW92ZSBjYWxsYmFjayAodGphMTEwMl9wMF9yZW1vdmUpIGFuZCBzZXRzIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzbyB0aGUgY2FsbGJhY2sgY2FuIGNhbmNlbCBhIHdvcmtxdWV1ZS4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBleGVjdXRlZCBkdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgdW5iaW5kIGFyZSBleGNsdWRlZCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBkcml2ZXIgLnJlbW92ZSBjYWxsYmFjayAodGphMTEwMl9wMF9yZW1vdmUpIGFuZCBzZXRzIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciBzbyB0aGUgY2FsbGJhY2sgY2FuIGNhbmNlbCBhIHdvcmtxdWV1ZS4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBleGVjdXRlZCBkdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgdW5iaW5kIGFyZSBleGNsdWRlZCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MjkuNzkxOTU0MDM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1OTQ4NjUzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGRyaXZlciAucmVtb3ZlIGNhbGxiYWNrICh0amExMTAyX3AwX3JlbW92ZSkgYW5kIHNldHMgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIHNvIHRoZSBjYWxsYmFjayBjYW4gY2FuY2VsIGEgd29ya3F1ZXVlLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGV4ZWN1dGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciB1bmJpbmQgYXJlIGV4Y2x1ZGVkIGZyb20gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjI5Ljc5MTk1OTcwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5MTA2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGM1ZWQyOTJlMjRjMDI5ZTE1M2IwMDM3NmY4MTg4ZTU3NjgyOTczM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYyBiL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXFxuaW5kZXggMDdlOTRhMjQ3OGFjMy4uNjgwNjJhNGM1MTkwYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXFxuQEAgLTYyMCw2ICs2MjAsNyBAQCBzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdHBoeWRldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmssIHRqYTExMDJfcDFfcmVnaXN0ZXIpO1xcbiBcXG4gXFx0cmV0ID0gdGphMTF4eF9od21vbl9yZWdpc3RlcihwaHlkZXYsIHByaXYpO1xcbkBAIC02MzEsNiArNjMyLDEzIEBAIHN0YXRpYyBpbnQgdGphMTEwMl9wMF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGphMTEwMl9wMF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgdGphMTF4eF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmspO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRqYTExMDJfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBvcnQwKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTg0Nyw2ICs4NTUsNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcXG4gXFx0XFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxcbiBcXHRcXHQuZmxhZ3MgICAgICAgICAgPSBQSFlfUE9MTF9DQUJMRV9URVNULFxcbiBcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExMDJfcDBfcHJvYmUsXFxuK1xcdFxcdC5yZW1vdmVcXHRcXHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxcbiBcXHRcXHQuc29mdF9yZXNldFxcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxcbiBcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXFxuIFxcdFxcdC5jb25maWdfaW5pdFxcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzAuMTIxNjk3MDYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTkyNjUxMTIxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIGRyaXZlciAucmVtb3ZlIGNhbGxiYWNrICh0amExMTAyX3AwX3JlbW92ZSkgYW5kIHNldHMgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIHNvIHRoZSBjYWxsYmFjayBjYW4gY2FuY2VsIGEgd29ya3F1ZXVlLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGV4ZWN1dGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciB1bmJpbmQgYXJlIGV4Y2x1ZGVkIGZyb20gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhjNWVkMjkyZTI0YzAyOWUxNTNiMDAzNzZmODE4OGU1NzY4Mjk3MzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxNDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jIGIvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcbmluZGV4IDA3ZTk0YTI0NzhhYzMuLjY4MDYyYTRjNTE5MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcbkBAIC02MjAsNiArNjIwLDcgQEAgc3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4gXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VwaHlfcmVnaXN0ZXJfd29yaywgdGphMTEwMl9wMV9yZWdpc3Rlcik7XG4gXG4gXHRyZXQgPSB0amExMXh4X2h3bW9uX3JlZ2lzdGVyKHBoeWRldiwgcHJpdik7XG5AQCAtNjMxLDYgKzYzMiwxMyBAQCBzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VwaHlfcmVnaXN0ZXJfd29yayk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXG4ge1xuIFx0aW50IHJldDtcbkBAIC04NDcsNiArODU1LDcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XG4gXHRcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcbiBcdFx0LmZsYWdzICAgICAgICAgID0gUEhZX1BPTExfQ0FCTEVfVEVTVCxcbiBcdFx0LnByb2JlXHRcdD0gdGphMTEwMl9wMF9wcm9iZSxcbitcdFx0LnJlbW92ZVx0XHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxuIFx0XHQuc29mdF9yZXNldFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXG4gXHRcdC5jb25maWdfYW5lZ1x0PSB0amExMXh4X2NvbmZpZ19hbmVnLFxuIFx0XHQuY29uZmlnX2luaXRcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjMwLjEyMTY5ODQxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODAzMTA4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhGdXp6aW5nIERldGVybWluYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIFwiV29ydGhGdXp6aW5nXCIgb3Igbm90LiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYGZhbHNlYCBpZiBpdCAqb25seSogbW9kaWZpZXMgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcywgbGlrZSBgLnJlbW92ZWAsIHdoZW4gZGVhbGluZyB3aXRoIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC5cblxuUmlnaHQsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyBgdGphMTEwMl9wMF9wcm9iZWAgYnkgYWRkaW5nIGBwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCwgaXMgdGhpcyBqdXN0IGFib3V0IHRoYXQgYC5yZW1vdmVgIGNhbGxiYWNrP1wiIEJlY2F1c2UgdGhlIHBhdGNoICphbHNvKiBpbnRyb2R1Y2VzIGEgYHRqYTExMDJfcDBfcmVtb3ZlYCBmdW5jdGlvbiB0aGF0IGNhbGxzIGBjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcGh5X3JlZ2lzdGVyX3dvcmspO2AuIEFuZCwgaXQncyBhc3NpZ25pbmcgYC5yZW1vdmUgPSB0amExMTAyX3AwX3JlbW92ZWAgaW4gdGhlIGB0amExMXh4X2RyaXZlcmAgc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGB0amExMTAyX3AwX3JlbW92ZWAgd2lsbCB1c2UgYHBoeWRldi1cdTAwM2Vwcml2YC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoISBJcyBgcGh5ZGV2LVx1MDAzZXByaXZgIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZT8gR290dGEgZG91YmxlIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzQuODAyMDExMTA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjE2MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWRldi1cXHUwMDNlcHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0yNzU9c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3Ni17XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6Mjc3OlxcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtMjc4LVxcdGludCBtaWlfbW9kZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTUxNz1zdGF0aWMgaW50IHRqYTExeHhfcGFyc2VfZHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTUxOS1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTIwOlxcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTIxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTMxPXN0YXRpYyBpbnQgdGphMTF4eF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQxLVxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1NDI6XFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01NDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz02MTI9c3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MjItXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjYyMzpcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYyNC1cXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXBoeV9yZWdpc3Rlcl93b3JrLCB0amExMTAyX3AxX3JlZ2lzdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTYzNT1zdGF0aWMgdm9pZCB0amExMTAyX3AwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNi17XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NjM3OlxcdHN0cnVjdCB0amExMXh4X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDozNC44NDMyMzEzMThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc0Mzg4NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGEgU2ltcGxlIFBIWSBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBpbiBgdGphMTEwMl9wMF9wcm9iZWAgaXMgc3RyYWlnaHRmb3J3YXJkOiBqdXN0IGFzc2lnbmluZyBgcHJpdmAgdG8gYHBoeWRldi1cdTAwM2Vwcml2YC4gU2VlbXMgaW5ub2N1b3VzIGVub3VnaC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGVyZSBlbHNlIGlzIGBwaHlkZXYtXHUwMDNlcHJpdmAgdXNlZD9cblxuUmlnaHQsIGRpZ2dpbmcgaW50byBpdCwgSSBzZWUgdGhhdCBib3RoIGB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZWAgYW5kIGB0amExMXh4X3BhcnNlX2R0YCByZWx5IG9uIHRoaXMgYHBoeWRldi1cdTAwM2Vwcml2YCBmaWVsZC4gVGhhdCdzIGEga2V5IGRldGFpbC4gTm93IEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBgdGphMTEwMl9wMF9wcm9iZWAgY2FsbC4gSWYgdGhleSBhcmUsIHRoaXMgc2ltcGxlIGFzc2lnbm1lbnQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIG9yIGF0IGxlYXN0IGJlIHZlcnkgaW1wb3J0YW50IHRvIHRoZSBzdGFiaWxpdHkgb2YgdGhlIGRldmljZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgZWl0aGVyIGB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZWAgb3IgYHRqYTExeHhfcGFyc2VfZHRgIGFyZSBpbnZva2VkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB0amExMTAyX3AwYCBkZXZpY2UuIFRoYXQncyB0aGUgbmV4dCBzdGVwIHRvIGNvbmZpcm0gdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjcsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzkuMTE3NjIyNDAxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDc3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRqYTExeHhfZ2V0X2ludGVyZmFjZV9tb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTI0ND1zdGF0aWMgaW50IHRqYTExeHhfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3NC1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzoyNzU6c3RhdGljIGludCB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTI3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYz0zMDA9c3RhdGljIGludCB0amExMXh4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0zMjAtXFx0XFx0cmVnX21hc2sgfD0gTUlJX0NGRzFfSU5URVJGQUNFX01PREVfTUFTSztcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzozMjE6XFx0XFx0cmV0ID0gdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0zMjItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy0zMzItXFx0XFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjMzMzpcXHRcXHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTMzNC1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MzkuMTU3MTA2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTU1MzEwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGUgYHRqYTExMDJfcDBgIGNvbXBvbmVudCB1dGlsaXplcyB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uLiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGUgYXJjaGl0ZWN0dXJlIGludGltYXRlbHkuIFRoZSBzdHJ1Y3R1cmUgc3VnZ2VzdHMgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBuZXR3b3JrIHRyYW5zY2VpdmVyLCBwZXJoYXBzIGFuIGF1dG9tb3RpdmUgRXRoZXJuZXQgUEhZLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24sIHdpdGggdGhlIGB0amFgIHByZWZpeCwgc3Ryb25nbHkgaGludHMgYXQgYSBjb25uZWN0aW9uIHRvIGEgcGFydGljdWxhciBtYW51ZmFjdHVyZXIgYW5kIHBhcnQgc2VyaWVzLlxuXG5NeSBhcHByb2FjaCB3b3VsZCBiZTogRmlyc3QsIEkgbmVlZCB0byBvcGVuIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBmaWxlcywgc3BlY2lmaWNhbGx5LCB0aGUgYHRqYTExeHhfZHJpdmVyYCBtb2R1bGUuIEknbGwgbmVlZCB0byBsb2NhdGUgYW5kIGV4YW1pbmUgdGhlIGB0amExMTAyX3AwYCBpbnN0YW50aWF0aW9uIG9yIGRlZmluaXRpb24gd2l0aGluIHRoYXQgZHJpdmVyLiBGcm9tIHRoZXJlLCBJJ2xsIHN5c3RlbWF0aWNhbGx5IHRyYWNlIHRoZSBjb250cm9sIGZsb3csIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNhbGxzIHRvIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbiBpdHNlbGYgaXMgd2hhdCBJJ20gbG9va2luZyBmb3IuIERpZCB0aGV5IHVzZSBpdD8gSWYgc28sIHdoZXJlIGFuZCBob3c/IElzIHRoZXJlIGEgcG9pbnRlciB0byBpdD8gV2VyZSBhbnkgb2YgaXRzIHBhcmFtZXRlcnMgbW9kaWZpZWQ/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLCBvciBhbnkgb3RoZXIgbWVjaGFuaXNtIHRoYXQgd291bGQgY2F1c2UgYHRqYTExeHhfY29uZmlnX2luaXRgIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIGluaXRpYWxpemluZyBvciBjb25maWd1cmluZyB0aGUgYHRqYTExMDJfcDBgIGNvbXBvbmVudC4gSSB3aWxsIGJlIHF1aWNrLCB0aGUgZmlsZSBzdHJ1Y3R1cmUgb2YgdGhlIGRyaXZlciB3aWxsIHByb3ZpZGUgY2x1ZXMsIGFzIHdpbGwgY29tbW9uIHByb2dyYW1taW5nIHBhdHRlcm5zIHVzZWQgaW4gdGhlIGZpZWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDMuMDUyNjM5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc2NzkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0amExMTAyX3AwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYxMS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2MTI6c3RhdGljIGludCB0amExMTAyX3AwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg1Ni1cXHRcXHQuZmxhZ3MgICAgICAgICAgPSBQSFlfUE9MTF9DQUJMRV9URVNULFxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjg1NzpcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExMDJfcDBfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU4LVxcdFxcdC5yZW1vdmVcXHRcXHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0My4wOTU0MTI0MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU3MDAzMDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBmYW1pbGlhciB3aXRoIGVtYmVkZGVkIHN5c3RlbXMsIGRyaXZlcnMsIGFuZCB0aGUgVEpBMTEwMjpcblxuKipEaXZpbmcgaW50byB0aGUgVEpBMTEwMiBEcml2ZXIgU3RydWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBmb2N1cyBoZXJlIGlzIG9uIHRoZSBgdGphMTEwMl9wMGAgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGphMTF4eF9kcml2ZXJgIGNvbnRleHQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUuIEtub3dpbmcgdGhlIGNvbXBsZXRlIHN0cnVjdCBkZWZpbml0aW9uIGlzIHBhcmFtb3VudC4gSXQncyB0aGUgYmx1ZXByaW50LCB0aGUgZnVuZGFtZW50YWwgZGF0YSBjb250YWluZXIgZm9yIHRoaXMgcGFydGljdWxhciBQSFkgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVyKSBjb25maWd1cmF0aW9uIG9yIGNvbnRyb2wgYmxvY2suIEkgbmVlZCB0byBzZWUgKmV2ZXJ5dGhpbmcqIOKAkyB0aGUgbWVtYmVyIHZhcmlhYmxlcywgdGhlaXIgZGF0YSB0eXBlcywgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBlYWNoIG90aGVyLCBhbmQgYW55IHJlbGV2YW50IGNvbW1lbnRzIHRoYXQgbWlnaHQgaWxsdW1pbmF0ZSB0aGVpciBwdXJwb3NlLiBBcmUgd2UgdGFsa2luZyBhYm91dCByZWdpc3RlcnMsIGludGVybmFsIHN0YXRlcywgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgb3IgcGVyaGFwcyBjYWxsYmFjayBmdW5jdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgZnJvbSB0aGUgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGZyYW1ld29yay4gVGhpcyB3aWxsIGxlYWQgdG8gZnVydGhlciBxdWVzdGlvbnMgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGFjY2VzcywgaG93IHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMsIG1hbmFnZXMsIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgVEpBMTEwMiB0aHJvdWdoIHRoaXMgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjg0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDYuNTUyNDE4MzI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0NTpcXHRcXHRcXHQuZ2V0X3NxaV9tYXhcXHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXFxuIDg0NjpcXHRcXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuIDg0NzpcXHRcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiA4NDg6XFx0XFx0XFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxcbiA4NDk6XFx0XFx0XFx0LyogU3RhdGlzdGljcyAqL1xcbiA4NTA6XFx0XFx0XFx0LmdldF9zc2V0X2NvdW50ID0gdGphMTF4eF9nZXRfc3NldF9jb3VudCxcXG4gODUxOlxcdFxcdFxcdC5nZXRfc3RyaW5nc1xcdD0gdGphMTF4eF9nZXRfc3RyaW5ncyxcXG4gODUyOlxcdFxcdFxcdC5nZXRfc3RhdHNcXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxcbiA4NTM6XFx0XFx0fSwge1xcbiA4NTQ6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJOWFAgVEpBMTEwMiBQb3J0IDBcXFwiLFxcbiA4NTU6XFx0XFx0XFx0LmZlYXR1cmVzICAgICAgID0gUEhZX0JBU0lDX1QxX0ZFQVRVUkVTLFxcbiA4NTY6XFx0XFx0XFx0LmZsYWdzICAgICAgICAgID0gUEhZX1BPTExfQ0FCTEVfVEVTVCxcXG4gODU3OlxcdFxcdFxcdC5wcm9iZVxcdFxcdD0gdGphMTEwMl9wMF9wcm9iZSxcXG4gODU4OlxcdFxcdFxcdC5yZW1vdmVcXHRcXHQ9IHRqYTExMDJfcDBfcmVtb3ZlLFxcbiA4NTk6XFx0XFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHRqYTExeHhfc29mdF9yZXNldCxcXG4gODYwOlxcdFxcdFxcdC5jb25maWdfYW5lZ1xcdD0gdGphMTF4eF9jb25maWdfYW5lZyxcXG4gODYxOlxcdFxcdFxcdC5jb25maWdfaW5pdFxcdD0gdGphMTF4eF9jb25maWdfaW5pdCxcXG4gODYyOlxcdFxcdFxcdC5yZWFkX3N0YXR1c1xcdD0gdGphMTF4eF9yZWFkX3N0YXR1cyxcXG4gODYzOlxcdFxcdFxcdC5nZXRfc3FpXFx0PSB0amExMXh4X2dldF9zcWksXFxuIDg2NDpcXHRcXHRcXHQuZ2V0X3NxaV9tYXhcXHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjQ2LjU1MjUwNTkxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxNDQwNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGJlaW5nIHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUsIGlmIGBwaHlkZXYtXHUwMDNlcHJpdmAgd2Fzbid0IGJlaW5nIHNldCAqYmVmb3JlKiB0aGlzIHBhdGNoLCBob3cgd2FzIGB0amExMXh4X2NvbmZpZ19pbml0YCBldmVuIGZ1bmN0aW9uaW5nIGNvcnJlY3RseT9cIiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgaXNzdWU6IGEgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvZGUgYmVmb3JlIHRoZSBwYXRjaCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQncyBkZWx2ZSBpbnRvIGB0amExMTAyX3AwX3Byb2JlYCDigJMgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIHdlcmUgaGFuZGxlZCAqYmVmb3JlKiB0aGlzIGNoYW5nZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgd2FzIGJlaW5nIGltcGxpY2l0bHkgYXNzdW1lZCwgb3IgYSBkaWZmZXJlbnQgcGF0aCB3YXMgYmVpbmcgdGFrZW4uIEkgbmVlZCB0byBkaXNzZWN0IHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuODIzOTQ4ODk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMjpcXHRzdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gNjEzOlxcdHtcXG4gNjE0OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbiA2MTU6XFx0XFx0c3RydWN0IHRqYTExeHhfcHJpdiAqcHJpdjtcXG4gNjE2OlxcdFxcdGludCByZXQ7XFxuIDYxNzpcXHRcXG4gNjE4OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4gNjE5OlxcdFxcdGlmICghcHJpdilcXG4gNjIwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuIDYyMzpcXHRcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbiA2MjQ6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlfcmVnaXN0ZXJfd29yaywgdGphMTEwMl9wMV9yZWdpc3Rlcik7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdHJldCA9IHRqYTExeHhfaHdtb25fcmVnaXN0ZXIocGh5ZGV2LCBwcml2KTtcXG4gNjI3OlxcdFxcdGlmIChyZXQpXFxuIDYyODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2Mjk6XFx0XFxuIDYzMDpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZwcml2LVxcdTAwM2VwaHlfcmVnaXN0ZXJfd29yayk7XFxuIDYzMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuODI0MDI2ODg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTI5ODczMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBgdGphMTF4eF9jb25maWdfaW5pdGAgQnVnIEZpeCoqXG5cbkhvbGQgb24sIEkgc2VlIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBmdW5jdGlvbiBgdGphMTEwMl9wMF9wcm9iZWAgYWxsb2NhdGVzIHRoaXMgYHByaXZgIHN0cnVjdHVyZSwgYW5kIGNydWNpYWxseSwgaXQgYXNzaWducyBgcHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXZgLiAgTm93LCB0aGUgcGF0Y2ggdGhlbiBhc3NpZ25zIHRoZSAqcmV2ZXJzZSosIGBwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXZgLiAgQWgsIHJpZ2h0LiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhhdCBhc3NpZ25tZW50LCBgcGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2YCwgd2FzICptaXNzaW5nKi4gU28sIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGJlZW4gdHJ5aW5nIHRvIGFjY2VzcyBgcGh5ZGV2LVx1MDAzZXByaXZgIHdpdGhvdXQgaXQgZXZlciBiZWluZyBpbml0aWFsaXplZC4gVGhhdCB3b3VsZCBkZWZpbml0ZWx5IGhhdmUgbGVkIHRvIGEgY3Jhc2ggaW4gYHRqYTExeHhfY29uZmlnX2luaXRgLCB3b3VsZG4ndCBpdD8gT2theSwgbGV0IG1lIGNvbmZpcm0gdGhhdCBieSBxdWlja2x5IGNoZWNraW5nIHRoZSBjb2RlIGZvciBgdGphMTF4eF9jb25maWdfaW5pdGAgdG8gY29uZmlybSB0aGF0IGl0IGRvZXMsIGluIGZhY3QsIHRyeSB0byB1c2UgYHBoeWRldi1cdTAwM2Vwcml2YC4gTmVlZCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc291bmQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NTMuNTM3MDE2Njk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRzdGF0aWMgaW50IHRqYTExeHhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdHUxNiByZWdfbWFzaywgcmVnX3ZhbDtcXG4gMzAzOlxcdFxcdGludCByZXQ7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdHJldCA9IHRqYTExeHhfZW5hYmxlX3JlZ193cml0ZShwaHlkZXYpO1xcbiAzMDY6XFx0XFx0aWYgKHJldClcXG4gMzA3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHBoeWRldi1cXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcXG4gMzEwOlxcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDA7XFxuIDMxMTpcXHRcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbiAzMTI6XFx0XFxuIDMxMzpcXHRcXHRzd2l0Y2ggKHBoeWRldi1cXHUwMDNlcGh5X2lkIFxcdTAwMjYgUEhZX0lEX01BU0spIHtcXG4gMzE0OlxcdFxcdGNhc2UgUEhZX0lEX1RKQTExMDA6XFxuIDMxNTpcXHRcXHRcXHRyZWdfbWFzayA9IE1JSV9DRkcxX0FVVE9fT1AgfCBNSUlfQ0ZHMV9MRURfTU9ERV9NQVNLIHxcXG4gMzE2OlxcdFxcdFxcdFxcdCAgIE1JSV9DRkcxX0xFRF9FTkFCTEU7XFxuIDMxNzpcXHRcXHRcXHRyZWdfdmFsID0gTUlJX0NGRzFfQVVUT19PUCB8IE1JSV9DRkcxX0xFRF9NT0RFX0xJTktVUCB8XFxuIDMxODpcXHRcXHRcXHRcXHQgIE1JSV9DRkcxX0xFRF9FTkFCTEU7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdFxcdHJlZ19tYXNrIHw9IE1JSV9DRkcxX0lOVEVSRkFDRV9NT0RFX01BU0s7XFxuIDMyMTpcXHRcXHRcXHRyZXQgPSB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZShwaHlkZXYpO1xcbiAzMjI6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDMyMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRcXHRyZWdfdmFsIHw9IChyZXQgXFx1MDAyNiAweGZmZmYpO1xcbiAzMjY6XFx0XFx0XFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9DRkcxLCByZWdfbWFzaywgcmVnX3ZhbCk7XFxuIDMyNzpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMjg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzI5OlxcdFxcdFxcdGJyZWFrO1xcbiAzMzA6XFx0XFx0Y2FzZSBQSFlfSURfVEpBMTEwMlM6XFxuIDMzMTpcXHRcXHRjYXNlIFBIWV9JRF9USkExMTAxOlxcbiAzMzI6XFx0XFx0XFx0cmVnX21hc2sgPSBNSUlfQ0ZHMV9JTlRFUkZBQ0VfTU9ERV9NQVNLO1xcbiAzMzM6XFx0XFx0XFx0cmV0ID0gdGphMTF4eF9nZXRfaW50ZXJmYWNlX21vZGUocGh5ZGV2KTtcXG4gMzM0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAzMzU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0XFx0XFx0cmVnX3ZhbCA9IHJldCBcXHUwMDI2IDB4ZmZmZjtcXG4gMzM4OlxcdFxcdFxcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQ0ZHMSwgcmVnX21hc2ssIHJlZ192YWwpO1xcbiAzMzk6XFx0XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NTMuNTM3MTA0NDU2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTkxMjkyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIFBIWSBJbml0aWFsaXphdGlvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGphMTF4eF9jb25maWdfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBiZSB1c2luZyBgcGh5ZGV2LVx1MDAzZXBoeV9pZCBcdTAwMjYgUEhZX0lEX01BU0tgLiBSaWdodCwgcmlnaHQuIFRoYXQncyBhIHN0YW5kYXJkIHdheSB0byBpZGVudGlmeSB0aGUgUEhZLCBtYXNraW5nIG91dCBzcGVjaWZpYyBiaXRzIHRvIG5hcnJvdyBpdCBkb3duIHRvIGEgcmVsZXZhbnQgZGV2aWNlIGZhbWlseSBvciB0eXBlLlxuXG5CdXQsIGZvciB0aGUgYHRqYTExMDJfcDBgIGNvbmZpZ3VyYXRpb24uLi4gd2hhdCBleGFjdGx5ICppcyogdGhlIGBwaHlfaWRgIGZvciB0aGF0IHBhcnRpY3VsYXIgUEhZPyBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmFsdWUsIG9yIGF0IGxlYXN0IHRoZSBleHBlY3RlZCBtYXNrZWQgdmFsdWUsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoYXQgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGNvZGUgcGF0aCBnZXRzIGV4ZWN1dGVkLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGludGVuZGVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgbW9kZWwgc3BlY2lmaWNhbGx5LiBUaGF0IGBwaHlfaWRgIGNoZWNrIGlzIGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byBnbyBsb29rIHRoYXQgdXAsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbG9naWMgaGVyZSBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NTcuMTk2MjM2NTA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDgwMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MDI6XFx0XFxuIDgwMzpcXHRcXHRpZiAoIShyZXQgXFx1MDAyNiBNSUlfRUNUUkxfQ0FCTEVfVEVTVCkpIHtcXG4gODA0OlxcdFxcdFxcdCpmaW5pc2hlZCA9IHRydWU7XFxuIDgwNTpcXHRcXG4gODA2OlxcdFxcdFxcdHJldCA9IHBoeV9zZXRfYml0cyhwaHlkZXYsIE1JSV9DT01NQ0ZHLCBNSUlfQ09NTUNGR19BVVRPX09QKTtcXG4gODA3OlxcdFxcdFxcdGlmIChyZXQpXFxuIDgwODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MDk6XFx0XFxuIDgxMDpcXHRcXHRcXHRyZXR1cm4gdGphMTF4eF9jYWJsZV90ZXN0X3JlcG9ydChwaHlkZXYpO1xcbiA4MTE6XFx0XFx0fVxcbiA4MTI6XFx0XFxuIDgxMzpcXHRcXHRyZXR1cm4gMDtcXG4gODE0OlxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRqYTExeHhfZHJpdmVyW10gPSB7XFxuIDgxNzpcXHRcXHR7XFxuIDgxODpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1RKQTExMDApLFxcbiA4MTk6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJOWFAgVEpBMTEwMFxcXCIsXFxuIDgyMDpcXHRcXHRcXHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXFxuIDgyMTpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExeHhfcHJvYmUsXFxuIDgyMjpcXHRcXHRcXHQuc29mdF9yZXNldFxcdD0gdGphMTF4eF9zb2Z0X3Jlc2V0LFxcbiA4MjM6XFx0XFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB0amExMXh4X2NvbmZpZ19hbmVnLFxcbiA4MjQ6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0PSB0amExMXh4X2NvbmZpZ19pbml0LFxcbiA4MjU6XFx0XFx0XFx0LnJlYWRfc3RhdHVzXFx0PSB0amExMXh4X3JlYWRfc3RhdHVzLFxcbiA4MjY6XFx0XFx0XFx0LmdldF9zcWlcXHQ9IHRqYTExeHhfZ2V0X3NxaSxcXG4gODI3OlxcdFxcdFxcdC5nZXRfc3FpX21heFxcdD0gdGphMTF4eF9nZXRfc3FpX21heCxcXG4gODI4OlxcdFxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4gODI5OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuIDgzMDpcXHRcXHRcXHQuc2V0X2xvb3BiYWNrICAgPSBnZW5waHlfbG9vcGJhY2ssXFxuIDgzMTpcXHRcXHRcXHQvKiBTdGF0aXN0aWNzICovXFxuIDgzMjpcXHRcXHRcXHQuZ2V0X3NzZXRfY291bnQgPSB0amExMXh4X2dldF9zc2V0X2NvdW50LFxcbiA4MzM6XFx0XFx0XFx0LmdldF9zdHJpbmdzXFx0PSB0amExMXh4X2dldF9zdHJpbmdzLFxcbiA4MzQ6XFx0XFx0XFx0LmdldF9zdGF0c1xcdD0gdGphMTF4eF9nZXRfc3RhdHMsXFxuIDgzNTpcXHRcXHR9LCB7XFxuIDgzNjpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1RKQTExMDEpLFxcbiA4Mzc6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJOWFAgVEpBMTEwMVxcXCIsXFxuIDgzODpcXHRcXHRcXHQuZmVhdHVyZXMgICAgICAgPSBQSFlfQkFTSUNfVDFfRkVBVFVSRVMsXFxuIDgzOTpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExeHhfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjU3LjE5NjUwOTQwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ5NTIzODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBgdGphMTF4eF9kcml2ZXJgKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogd2UgbmVlZCB0byBzcGVuZCBzb21lIHF1YWxpdHkgdGltZSB3aXRoIHRoZSBgdGphMTF4eF9kcml2ZXJgLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGhpZ2gtbGV2ZWwgYXJjaGl0ZWN0dXJlLCBtYXliZSBldmVuIHNvbWUgb2YgdGhlIGNvbW1vbiByZWdpc3RlciBsYXlvdXRzLiBCdXQgXCJyZWFkIG1vcmVcIiBpbXBsaWVzIGEgc3BlY2lmaWMgbmVlZCBmb3IgYSBkZWVwZXIgZGl2ZS4gQW0gSSB0cnlpbmcgdG8gZGVidWcgYSBwYXJ0aWN1bGFyIGlzc3VlPyBBbSBJIGxvb2tpbmcgdG8gZXh0ZW5kIGl0cyBmdW5jdGlvbmFsaXR5LCBwZXJoYXBzIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBoYXJkd2FyZSByZXZpc2lvbiBvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24/IE9yIG1heWJlIEknbSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgYmVzdCBwcmFjdGljZXM/XG5cblRoaXMgY291bGQgbWVhbiBhIGZldyB0aGluZ3MuIFBlcmhhcHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgbGluayBzdGF0dXMgY2hhbmdlcy4gT3IgSSBtaWdodCBiZSBmb2N1c2luZyBvbiB0aGUgTUFDIGludGVyZmFjZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQSFkuIFdoYXQgYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB0aW1pbmcgZGVwZW5kZW5jaWVzIG9yIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW5kIGxldCdzIG5vdCBmb3JnZXQgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgcm9idXN0IGlzIGl0IGluIHZhcmlvdXMgZmF1bHQgc2NlbmFyaW9zP1xuXG5JIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFdoYXQgb3RoZXIgZHJpdmVycyBvciBrZXJuZWwgY29tcG9uZW50cyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aD8gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMsIHNvIEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgYW55IGFyZWFzIHdoZXJlIGNoYW5nZXMgY291bGQgaW50cm9kdWNlIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLiBcIlJlYWQgbW9yZVwiIHNpZ25pZmllcyB0aGF0IEkgYW0gbm90IHNhdGlzZmllZCB3aXRoIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZywgYW5kIEkgaGF2ZSBhIGNsZWFyIG9iamVjdGl2ZSB0byBmaWxsIHRoZSBnYXBzIGluIG15IGtub3dsZWRnZS4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDAuOTQ2MDM1OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXFxuIDg0MTpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXFxuIDg0MjpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXFxuIDg0MzpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHRqYTExeHhfcmVhZF9zdGF0dXMsXFxuIDg0NDpcXHRcXHRcXHQuZ2V0X3NxaVxcdD0gdGphMTF4eF9nZXRfc3FpLFxcbiA4NDU6XFx0XFx0XFx0LmdldF9zcWlfbWF4XFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxcbiA4NDY6XFx0XFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbiA4NDc6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4gODQ4OlxcdFxcdFxcdC5zZXRfbG9vcGJhY2sgICA9IGdlbnBoeV9sb29wYmFjayxcXG4gODQ5OlxcdFxcdFxcdC8qIFN0YXRpc3RpY3MgKi9cXG4gODUwOlxcdFxcdFxcdC5nZXRfc3NldF9jb3VudCA9IHRqYTExeHhfZ2V0X3NzZXRfY291bnQsXFxuIDg1MTpcXHRcXHRcXHQuZ2V0X3N0cmluZ3NcXHQ9IHRqYTExeHhfZ2V0X3N0cmluZ3MsXFxuIDg1MjpcXHRcXHRcXHQuZ2V0X3N0YXRzXFx0PSB0amExMXh4X2dldF9zdGF0cyxcXG4gODUzOlxcdFxcdH0sIHtcXG4gODU0OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiTlhQIFRKQTExMDIgUG9ydCAwXFxcIixcXG4gODU1OlxcdFxcdFxcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcXG4gODU2OlxcdFxcdFxcdC5mbGFncyAgICAgICAgICA9IFBIWV9QT0xMX0NBQkxFX1RFU1QsXFxuIDg1NzpcXHRcXHRcXHQucHJvYmVcXHRcXHQ9IHRqYTExMDJfcDBfcHJvYmUsXFxuIDg1ODpcXHRcXHRcXHQucmVtb3ZlXFx0XFx0PSB0amExMTAyX3AwX3JlbW92ZSxcXG4gODU5OlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXFxuIDg2MDpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHRqYTExeHhfY29uZmlnX2FuZWcsXFxuIDg2MTpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHRqYTExeHhfY29uZmlnX2luaXQsXFxuIDg2MjpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHRqYTExeHhfcmVhZF9zdGF0dXMsXFxuIDg2MzpcXHRcXHRcXHQuZ2V0X3NxaVxcdD0gdGphMTF4eF9nZXRfc3FpLFxcbiA4NjQ6XFx0XFx0XFx0LmdldF9zcWlfbWF4XFx0PSB0amExMXh4X2dldF9zcWlfbWF4LFxcbiA4NjU6XFx0XFx0XFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2UsXFxuIDg2NjpcXHRcXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuIDg2NzpcXHRcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbiA4Njg6XFx0XFx0XFx0LnNldF9sb29wYmFjayAgID0gZ2VucGh5X2xvb3BiYWNrLFxcbiA4Njk6XFx0XFx0XFx0LyogU3RhdGlzdGljcyAqL1xcbiA4NzA6XFx0XFx0XFx0LmdldF9zc2V0X2NvdW50ID0gdGphMTF4eF9nZXRfc3NldF9jb3VudCxcXG4gODcxOlxcdFxcdFxcdC5nZXRfc3RyaW5nc1xcdD0gdGphMTF4eF9nZXRfc3RyaW5ncyxcXG4gODcyOlxcdFxcdFxcdC5nZXRfc3RhdHNcXHQ9IHRqYTExeHhfZ2V0X3N0YXRzLFxcbiA4NzM6XFx0XFx0XFx0LmNvbmZpZ19pbnRyXFx0PSB0amExMXh4X2NvbmZpZ19pbnRyLFxcbiA4NzQ6XFx0XFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSB0amExMXh4X2hhbmRsZV9pbnRlcnJ1cHQsXFxuIDg3NTpcXHRcXHRcXHQuY2FibGVfdGVzdF9zdGFydCA9IHRqYTExeHhfY2FibGVfdGVzdF9zdGFydCxcXG4gODc2OlxcdFxcdFxcdC5jYWJsZV90ZXN0X2dldF9zdGF0dXMgPSB0amExMXh4X2NhYmxlX3Rlc3RfZ2V0X3N0YXR1cyxcXG4gODc3OlxcdFxcdH0sIHtcXG4gODc4OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiTlhQIFRKQTExMDIgUG9ydCAxXFxcIixcXG4gODc5OlxcdFxcdFxcdC5mZWF0dXJlcyAgICAgICA9IFBIWV9CQVNJQ19UMV9GRUFUVVJFUyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDAuOTQ2MTI0MDcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjAxNDUwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIGB0amExMTAyX3AwYCBhbmQgYHBoeV9pZGAgQXNzb2NpYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0amExMTAyX3AwYCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYHBoeV9pZGAuIFRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUgaXMgYHRqYTExMDJfcDBfbWF0Y2hfcGh5X2RldmljZWAuIFRoZSBpbXBsaWNhdGlvbiBpcyBwcmV0dHkgY2xlYXI6IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNvcnJlY3RseSBhc3NvY2lhdGluZyB0aGF0IHNwZWNpZmljIGRldmljZSBpbnN0YW5jZSB3aXRoIHRoZSByaWdodCBwaHlzaWNhbCBsYXllciBpZGVudGlmaWVyLiBUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGB0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2VgIGZ1bmN0aW9uIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIG1hdGNoaW5nIGlzIHBlcmZvcm1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAzNywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDQuMjY2MjcxMzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUyMzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0amExMTAyX3AwX21hdGNoX3BoeV9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NjQyPXN0YXRpYyBpbnQgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgcG9ydDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02NjEtXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NjYyOnN0YXRpYyBpbnQgdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNjYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTgxNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGphMTF4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg2NC1cXHRcXHQuZ2V0X3NxaV9tYXhcXHQ9IHRqYTExeHhfZ2V0X3NxaV9tYXgsXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6ODY1OlxcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gdGphMTEwMl9wMF9tYXRjaF9waHlfZGV2aWNlLFxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTg2Ni1cXHRcXHQuc3VzcGVuZFxcdD0gZ2VucGh5X3N1c3BlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjA0LjMwNTc5OTExOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI5ODg2ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgdGphMTEwMl9tYXRjaF9waHlfZGV2aWNlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgZGVmaW5pdGVseSBjZW50ZXJlZCBhcm91bmQgbWF0Y2hpbmcgYSBwaHlzaWNhbCBkZXZpY2UsIGFuZCBmcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQgc2VlbXMgdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgUEhZLCBwcm9iYWJseSByZWxhdGluZyB0byBFdGhlcm5ldCBvciBhIHNpbWlsYXIgcGh5c2ljYWwgbGF5ZXIgY29tbXVuaWNhdGlvbiBzdGFuZGFyZC4gVGhlIFwibWF0Y2hcIiBwYXJ0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBpZGVudGlmaWNhdGlvbiBwcm9jZXNzLCBtYXliZSBwcm9iaW5nIHRoZSBoYXJkd2FyZSwgcmVhZGluZyBzb21lIHJlZ2lzdGVycywgb3IgY29tcGFyaW5nIGRldmljZSBJRHMgdG8gYSBrbm93biBsaXN0LiBUaGUgZnVuY3Rpb24ncyByb2xlIHNlZW1zIGNyaXRpY2FsOiBpdCdzIHRoZSBnYXRld2F5IGZvciB0aGUgc3lzdGVtIHRvIHVuZGVyc3RhbmQgKndoaWNoKiBUSkExMTAyIFBIWSBpcyBjb25uZWN0ZWQuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIGxpa2VseSBzZXJ2ZXMgYXMgYSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIHN0ZXAsIGxpbmtpbmcgdGhlIGRldmljZSBkcml2ZXIgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgZmxvdzogaG93IGl0IGlkZW50aWZpZXMgdGhlIGRldmljZSwgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIGZvciBtYXRjaGluZywgYW5kIHdoYXQgaGFwcGVucyBpZiBhIG1hdGNoICppc24ndCogZm91bmQuIEVycm9yIGhhbmRsaW5nIGlzIHByb2JhYmx5IGltcG9ydGFudCBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIGZvdW5kYXRpb25hbCB0byBnZXQgdGhlIGhhcmR3YXJlIHRhbGtpbmcgdG8gdGhlIHJpZ2h0IHNvZnR3YXJlIGRyaXZlci4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCBjb25mbGljdHMsIGxpa2UgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgUEhZcyBvciBwb3RlbnRpYWxseSBtdWx0aXBsZSBkZXZpY2VzIHVzaW5nIHRoZSBzYW1lIHNpbGljb24uIEZpbmFsbHksIGtub3dpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGRldmljZSB0cmVlIGVudHJpZXMgY291bGQgYmUgdmFsdWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjI1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDcuOTM1Njg4NDgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MjpcXHRzdGF0aWMgaW50IHRqYTExMDJfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHBvcnQwKVxcbiA2NDM6XFx0e1xcbiA2NDQ6XFx0XFx0aW50IHJldDtcXG4gNjQ1OlxcdFxcbiA2NDY6XFx0XFx0aWYgKChwaHlkZXYtXFx1MDAzZXBoeV9pZCBcXHUwMDI2IFBIWV9JRF9NQVNLKSAhPSBQSFlfSURfVEpBMTEwMilcXG4gNjQ3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9QSFlTSUQyKTtcXG4gNjUwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA2NTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjUyOlxcdFxcbiA2NTM6XFx0XFx0LyogVEpBMTEwMiBQb3J0IDEgaGFzIHBoeWlkIDAgYW5kIGRvZXNuJ3Qgc3VwcG9ydCB0ZW1wZXJhdHVyZVxcbiA2NTQ6XFx0XFx0ICogYW5kIHVuZGVydm9sdGFnZSBhbGFybXMuXFxuIDY1NTpcXHRcXHQgKi9cXG4gNjU2OlxcdFxcdGlmIChwb3J0MClcXG4gNjU3OlxcdFxcdFxcdHJldHVybiByZXQgPyAxIDogMDtcXG4gNjU4OlxcdFxcbiA2NTk6XFx0XFx0cmV0dXJuICFyZXQ7XFxuIDY2MDpcXHR9XFxuIDY2MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MDcuOTM1Nzg1MjYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzI2OTczODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeSBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyB0aGUgUEhZIElkZW50aWZpY2F0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHBoeWRldmAgc3RydWN0dXJlLCBhbmQgaXQgc2VlbXMgdGhlIHJlc3VsdCBvZiBgcGh5ZGV2LVx1MDAzZXBoeV9pZCBcdTAwMjYgUEhZX0lEX01BU0tgIGlzIGV2YWx1YXRpbmcgdG8gYFBIWV9JRF9USkExMTAyYC4gU28sIHRoYXQgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGEgVEpBMTEwMiBQSFkuIE5vdywgZ2l2ZW4gdGhhdCBpZGVudGlmaWNhdGlvbiwgdGhlIGZvY3VzIGhhcyBzaGlmdGVkIHRvd2FyZHMgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBmdW5jdGlvbi4gSSdtIGluZmVycmluZyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGNvbmZpZ3VyZSBpdCBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHNwZWNpZmljIGRldmljZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBpbml0aWFsaXphdGlvbiByb3V0aW5lIGNhcmVmdWxseSB0byBlbnN1cmUgZXZlcnl0aGluZyBnZXRzIHNldCB1cCBjb3JyZWN0bHkgYW5kIHRoZSBkZXZpY2UgaXMgb3BlcmF0aW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgd2l0aGluIHRoYXQgZnVuY3Rpb24gbm93LCBhbmQgbWFrZSBzdXJlIHRoaXMgc3BlY2lmaWMgUEhZIGlzIGJlaW5nIHByb3Blcmx5IGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjUwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToxMi4xMDg0ODYwODZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQwOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM0MTpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMzQyOlxcdFxcdGNhc2UgUEhZX0lEX1RKQTExMDI6XFxuIDM0MzpcXHRcXHRcXHRyZXQgPSBwaHlfc2V0X2JpdHMocGh5ZGV2LCBNSUlfQ09NTUNGRywgTUlJX0NPTU1DRkdfQVVUT19PUCk7XFxuIDM0NDpcXHRcXHRcXHRpZiAocmV0KVxcbiAzNDU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQ2OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDc6XFx0XFx0ZGVmYXVsdDpcXG4gMzQ4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNDk6XFx0XFx0fVxcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRyZXQgPSBwaHlfY2xlYXJfYml0cyhwaHlkZXYsIE1JSV9DRkcxLCBNSUlfQ0ZHMV9TTEVFUF9DT05GSVJNKTtcXG4gMzUyOlxcdFxcdGlmIChyZXQpXFxuIDM1MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0NGRzIsIE1JSV9DRkcyX1NMRUVQX1JFUVVFU1RfVE8sXFxuIDM1NjpcXHRcXHRcXHRcXHQgTUlJX0NGRzJfU0xFRVBfUkVRVUVTVF9UT18xNk1TKTtcXG4gMzU3OlxcdFxcdGlmIChyZXQpXFxuIDM1ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRyZXQgPSB0amExMXh4X3dha2V1cChwaHlkZXYpO1xcbiAzNjE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDM2MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHQvKiBBQ0sgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi9cXG4gMzY1OlxcdFxcdHJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0lOVFNSQyk7XFxuIDM2NjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzY3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdHJldHVybiAwO1xcbiAzNzA6XFx0fVxcbiAzNzE6XFx0XFxuIDM3MjpcXHRzdGF0aWMgaW50IHRqYTExeHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gMzczOlxcdHtcXG4gMzc0OlxcdFxcdGludCByZXQ7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX2dldCA9IE1BU1RFUl9TTEFWRV9DRkdfVU5LTk9XTjtcXG4gMzc3OlxcdFxcdHBoeWRldi1cXHUwMDNlbWFzdGVyX3NsYXZlX3N0YXRlID0gTUFTVEVSX1NMQVZFX1NUQVRFX1VOU1VQUE9SVEVEO1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRyZXQgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MTIuMTA4NTc2MjM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjgxODg2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSkExMTAyIFBIWSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4uLiB3aXRoIHRoZSBgUEhZX0lEX1RKQTExMDJgIGNvbmZpZ3VyYXRpb24sIGl0J3MgY2xlYXIgdGhhdCB0aGUgYHRqYTExeHhfY29uZmlnX2luaXRgIGZ1bmN0aW9uICpkb2Vzbid0KiBjYWxsIGB0amExMXh4X2dldF9pbnRlcmZhY2VfbW9kZWAuIEluc3RlYWQsIGl0IGp1c3Qgc2V0cyB0aGUgYE1JSV9DT01NQ0ZHYCByZWdpc3RlciB3aXRoIGBNSUlfQ09NTUNGR19BVVRPX09QYC4gIEludGVyZXN0aW5nLiBTbywgdGhlIGB0amExMXh4X2NvbmZpZ19pbml0YCBjb2RlIHBhdGggYXZvaWRzIHVzaW5nIGBwaHlkZXYtXHUwMDNlcHJpdmAgZm9yIHRoaXMgc3BlY2lmaWMgUEhZLCB0aGUgYFRKQTExMDJgLiBUaGF04oCZcyBhIGtleSBkZXRhaWwgdG8gcmVtZW1iZXIuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogZG9lcyBgdGphMTF4eF9wYXJzZV9kdGAgZ2V0IGludm9sdmVkIGF0IGFsbCB3aXRoIHRoZSBgVEpBMTEwMmA/IEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGRldmljZSB0cmVlIHBhcnNpbmcgaXMgaW52b2tlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIFBIWS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNToxNy41MzY3NjgzNDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzg5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRqYTExeHhfcGFyc2VfZHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTA2PXN0YXRpYyBpbnQgdGphMTF4eF9od21vbl9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTE2LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjUxNzpzdGF0aWMgaW50IHRqYTExeHhfcGFyc2VfZHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01MTgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTMxPXN0YXRpYyBpbnQgdGphMTF4eF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQzLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU0NDpcXHRyZXQgPSB0amExMXh4X3BhcnNlX2R0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTQ1LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjE3LjU3ODE2MjQ3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzcwODIzNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGB0amExMTAyX3AwX3JlbW92ZWAgYW5kIFdvcnRoRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWRkaW5nIGEgYHJlbW92ZWAgY2FsbGJhY2ssIGB0amExMTAyX3AwX3JlbW92ZWAsIHRvIHRoZSBgdGphMTEwMl9wMGAgZHJpdmVyLiBJIHJlY2FsbCB0aGF0IGB0amExMXh4X3BhcnNlX2R0YCBpcyBjYWxsZWQgZnJvbSBgdGphMTF4eF9wcm9iZWAsIGJ1dCBgdGphMTEwMl9wMGAgYWN0dWFsbHkgdXNlcyBgdGphMTEwMl9wMF9wcm9iZWAgYW5kIG5vdCBgdGphMTF4eF9wcm9iZWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIG9yaWdpbmFsIGNvZGUgbWFkZSBtZSB0aGluayBgcGh5ZGV2LVx1MDAzZXByaXZgIHdvdWxkIGJlIHVzZWQgaW4gbW9yZSBwbGFjZXMuIEFzIGl0IHN0YW5kcywgaXQgYXBwZWFycyB0aGUgb25seSB1c2Ugb2YgYHBoeWRldi1cdTAwM2Vwcml2YCBpcyBnb2luZyB0byBiZSB3aXRoaW4gYHRqYTExMDJfcDBfcmVtb3ZlYCFcblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IGFzc2lnbnMgYHByaXZgIHRvIGBwaHlkZXYtXHUwMDNlcHJpdmAgd2l0aGluIGB0amExMTAyX3AwX3Byb2JlYCwgYW5kIHRoZW4gYWRkcyB0aGUgYHRqYTExMDJfcDBfcmVtb3ZlYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FuY2VscyBhIHdvcmtxdWV1ZS4gVGhpcyBpcyBhIHZlcnkgY2xlYW4gYWRkaXRpb24uXG5cblRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHRyaWdnZXIgdGhlIFdvcnRoRnV6emluZyBjcml0ZXJpYT8gVGhlIHByb21wdCBtZW50aW9ucyBleGNsdWRpbmcgcGF0Y2hlcyB0aGF0IGFkZCBkcml2ZXIgYC5yZW1vdmVgIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuICpUaGlzIGlzIGtleS4qIGByZW1vdmVgIGlzIHRoZSBkZXZpY2UgcmVtb3ZhbCBjYWxsYmFjay4gTG9va2luZyBhdCBpdCwgdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgYW5kIHV0aWxpemVzIGEgZHJpdmVyIGAucmVtb3ZlYCBjYWxsYmFjay4gTm8gb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBwcmVzZW50LlxuXG5TbywgKnllcyosIHRoZSBwYXRjaCAqZG9lcyogZmFsbCBzcXVhcmVseSB1bmRlciB0aGF0IGV4Y2x1c2lvbiBjcml0ZXJpYS4gSXQncyBhZGRpbmcgYSB0ZWFyZG93biBjYWxsYmFjaywgYHRqYTExMDJfcDBfcmVtb3ZlYCwgdG8gY2FuY2VsIGEgd29ya3F1ZXVlLiBJdCBsb29rcyBsaWtlIGl0IGlzIGV4YWN0bHkgd2hhdCB0aGUgcHJvbXB0IHNwZWNpZmllcy5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHRqYTExMDJfcDBfcmVtb3ZlYCBpcyAqb25seSogY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCwgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSBJIGFtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBzaG91bGQgcmVzdWx0IGluIGEgYFdvcnRoRnV6emluZz1mYWxzZWAgdmVyZGljdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MjUuMzQ4OTg4NTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTE3NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRqYTExMDJfcDBfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTYxMj1zdGF0aWMgaW50IHRqYTExMDJfcDBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTYzNC1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo2MzU6c3RhdGljIHZvaWQgdGphMTEwMl9wMF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy02MzYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9ODE2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU3LVxcdFxcdC5wcm9iZVxcdFxcdD0gdGphMTEwMl9wMF9wcm9iZSxcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo4NTg6XFx0XFx0LnJlbW92ZVxcdFxcdD0gdGphMTEwMl9wMF9yZW1vdmUsXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtODU5LVxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB0amExMXh4X3NvZnRfcmVzZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjI1LjM4OTUxMTg2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3MjY2ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCByZWFsbHkuIFRoZSBjb3JlIGNoYW5nZSBpcyBzb2xlbHkgdGhlIGFzc2lnbm1lbnQgb2YgYSBgLnJlbW92ZWAgY2FsbGJhY2sgd2l0aGluIHRoZSBgcGh5X2RyaXZlcmAgc3RydWN0dXJlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIHBsYWNlIHRoaXMgY2FsbGJhY2sgaXMgYmVpbmcgaG9va2VkIHVwLiBBbmQgdGhlIGFkZGVkIGBwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7YCBsaW5lIGlzIG1lcmVseSB0aGVyZSB0byBwcm92aWRlIGB0amExMTAyX3AwX3JlbW92ZWAgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgaXQgcmVxdWlyZXMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYm9pbHMgZG93biB0byB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgc2luZ2xlIGAucmVtb3ZlYCBjYWxsYmFjay4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIHRoaXMgbWVldHMgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSBwZXJmZWN0bHkuIEkgYW0gc2F0aXNmaWVkIHdpdGggdGhpcyBhc3Nlc3NtZW50LCBhbmQgSSB3aWxsIGJlIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ2LCJPdXRwdXRUb2tlbnMiOjg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTU6MjkuMzg2NzgxOTU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZHJpdmVyIC5yZW1vdmUgY2FsbGJhY2sgKHRqYTExMDJfcDBfcmVtb3ZlKSBhbmQgc2V0cyB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgc28gdGhlIGNhbGxiYWNrIGNhbiBjYW5jZWwgYSB3b3JrcXVldWUuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgZXhlY3V0ZWQgZHVyaW5nIGRldmljZSByZW1vdmFsIG9yIHVuYmluZCBhcmUgZXhjbHVkZWQgZnJvbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgZHJpdmVyIC5yZW1vdmUgY2FsbGJhY2sgKHRqYTExMDJfcDBfcmVtb3ZlKSBhbmQgc2V0cyB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgc28gdGhlIGNhbGxiYWNrIGNhbiBjYW5jZWwgYSB3b3JrcXVldWUuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgZXhlY3V0ZWQgZHVyaW5nIGRldmljZSByZW1vdmFsIG9yIHVuYmluZCBhcmUgZXhjbHVkZWQgZnJvbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsw87c[1] Phase: Running StartedAt: 2026-07-31 01:15:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw87c[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 01:15:40 +0000 UTC FinishedAt: 2026-07-31 01:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}