Name: series-workflowbqwzn Phase: Failed StartedAt: 2026-08-08 02:03:47 +0000 UTC FinishedAt: 2026-08-08 02:51:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqwzn[0] Phase: Succeeded StartedAt: 2026-08-08 02:03:47 +0000 UTC FinishedAt: 2026-08-08 02:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqwzn[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 02:03:47 +0000 UTC FinishedAt: 2026-08-08 02:50:55 +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+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlLiBUaGlzIGludGVyZmFjZSBtb2RlIGlzIG9ubHkgdXNlZCBieSB0aGUgUXVhbGNvbW0gUUNBODA3eCBwaHlzaWNhbCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIHZpcnR1YWxpemVkIG5ldHdvcmsgZHJpdmVycy4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YTk0YjJlMWE0ZTQ4MzU5MzhkMDVmMDA1NjMxZmE2OWY3NzQ2NjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwMjo0OTo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuaW5kZXggMThkMmVhZDk3YWE1NC4uOTgzYTFhM2NlZTM3NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xMDQwLDYgJiM0MzsxMDQwLDcgQEAgc3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiB7XG4gXHRzd2l0Y2ggKGludGVyZmFjZSkge1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmE5NGIyZTFhNGU0ODM1OTM4ZDA1ZjAwNTYzMWZhNjlmNzc0NjYzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMDI6NDk6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwppbmRleCAxOGQyZWFkOTdhYTU0Li45ODNhMWEzY2VlMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKQEAgLTEwNDAsNiAmIzQzOzEwNDAsNyBAQCBzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQogewogCXN3aXRjaCAoaW50ZXJmYWNlKSB7CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSToKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSToKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgYSBQSFkgSW50ZXJmYWNlIE1vZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQsIGFuZCBpdCBzZWVtcyB0byBoYXZlIHRvdWNoZWQgdGhlIGBwaHlsaW5rLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbmV0L3BoeS9gIGRpcmVjdG9yeS4gVGhlIG1vZGlmaWNhdGlvbiBpcyBhZGRpbmcgc3VwcG9ydCBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIHdpdGhpbiB0aGUgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQgbWVhbnMgc29tZW9uZSYjMzk7cyBpbnRyb2R1Y2luZyBvciBlbmFibGluZyBzdXBwb3J0IGZvciBhIHNwZWNpZmljIFBIWSBpbnRlcmZhY2UgbW9kZSwgUFNHTUlJLCB3aXRoaW4gdGhlIHBoeWxpbmsgZnJhbWV3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbmV3IG1vZGUgaXMgYmVpbmcgaGFuZGxlZC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHdlIGFyZSBzdXBwb3J0aW5nIHNvbWUgbmV3IGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZ2V0X2luYmFuZF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzM9ZW51bSBpbmJhbmRfdHlwZSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDM5OnN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA5OTpcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVx0aWYgKHR5cGUgPT0gSU5CQU5EX05PTkUpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3Olx0aW5iYW5kX3R5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBQSFlMaW5rIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSByZWxhdGl2ZWx5IG1pbm9yIG9uZSwgZm9jdXNpbmcgb24gYSBtb2RpZmljYXRpb24gdG8gdGhlIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdXBkYXRpbmcgYSBzd2l0Y2ggc3RhdGVtZW50LiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoZSBhZGRpdGlvbiBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhlIGludGVyZmFjZSBsaXN0LiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGludGVudCBpcyB0byBub3cgaGF2ZSB0aGlzIGludGVyZmFjZSByZXR1cm4gYElOQkFORF9TR01JSWAgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYElOQkFORF9OT05FYC4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCByZWFsbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhhdCBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIGZ1bmN0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgaG93IGl04oCZcyBzdHJ1Y3R1cmVkIGFuZCB3aGF0IG90aGVyIGludGVyZmFjZXMgYXJlIGN1cnJlbnRseSBoYW5kbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBsb2dpYyB3aWxsIGJlIGNydWNpYWwgdG8gZnVsbHkgYXBwcmVjaWF0aW5nIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGNoYW5nZSBhbmQgY29uZmlybWluZyBpdOKAmXMgdGhlIGNvcnJlY3QgY291cnNlIG9mIGFjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIFBIWUxpbmsgYXJjaGl0ZWN0dXJlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzOTpcdHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4xMDQwOlx0e1xuMTA0MTpcdFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbjEwNDI6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuMTA0MzpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuMTA0NDpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuMTA0NTpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcbjEwNDY6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4xMDQ3Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdfUVhHTUlJOlxuMTA0ODpcdFx0XHQvKiBUaGVzZSBwcm90b2NvbHMgYXJlIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBhIFBIWSB3aGljaFxuMTA0OTpcdFx0XHQgKiBjb21tdW5pY2F0ZXMgaXRzIG5lZ290aWF0aW9uIHJlc3VsdCBiYWNrIHRvIHRoZSBNQUMgdmlhXG4xMDUwOlx0XHRcdCAqIGluYmFuZCBjb21tdW5pY2F0aW9uLiBOb3RlOiB0aGVyZSBleGlzdCBQSFlzIHRoYXQgcnVuXG4xMDUxOlx0XHRcdCAqIHdpdGggU0dNSUkgYnV0IGRvIG5vdCBzZW5kIHRoZSBpbmJhbmQgZGF0YS5cbjEwNTI6XHRcdFx0ICovXG4xMDUzOlx0XHRcdHJldHVybiBJTkJBTkRfQ0lTQ09fU0dNSUk7XG4xMDU0Olx0XG4xMDU1Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4xMDU2Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6XG4xMDU3Olx0XHRcdC8qIDEwMDBiYXNlLVggaXMgZGVzaWduZWQgZm9yIHVzZSBtZWRpYS1zaWRlIGZvciBGaWJyZVxuMTA1ODpcdFx0XHQgKiBjb25uZWN0aW9ucywgYW5kIHRodXMgdGhlIEF1dG9uZWcgYml0IG5lZWRzIHRvIGJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgU21hbGwgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIOKAkyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIGNvbnN0YW50IHdpdGhpbiBhIGBzd2l0Y2hgIHN0YXRlbWVudC4gU2VlbXMgdHJpdmlhbCwgZG9lc24mIzM5O3QgaXQ/IEJ1dCwgYXMgYWx3YXlzLCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJcyBpdCB3b3J0aCBwdXR0aW5nIGl0IHRocm91Z2ggZnV6emluZz8KClRoZSBjaGFuZ2UgaW1wYWN0cyBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLiBJIGltbWVkaWF0ZWx5IHRoaW5rICYjMzQ7bmV0d29yayBQSFkgbGluayBtYW5hZ2VtZW50LCYjMzQ7IHdoaWNoIG9mdGVuIG1lYW5zIGhhcmR3YXJlIGludGVyYWN0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdmVyeSBzcGVjaWZpYyBzZXR1cHMuIFNGUCBtb2R1bGVzLCBQSFlzLi4uIHRoYXQmIzM5O3MgdGhlIHVzdWFsIHRlcnJpdG9yeS4gVGhlIGNvbm5lY3Rpb25zIGFyZSBgcGh5bGlua19tYWpvcl9jb25maWdgIGFuZCBgcGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydGAuCgpNeSBpbml0aWFsIGd1dCByZWFjdGlvbiBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8mIzM0OyBTeXprYWxsZXIgaXMgZ3JlYXQgd2l0aCB0aGluZ3MgbGlrZSBuZXRsaW5rIGludGVyZmFjZXMsIGJ1dCBhIGxvdCBvZiBQSFkgbGluayBtYW5hZ2VtZW50IEkmIzM5O3ZlIGRlYWx0IHdpdGggaXMgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGV2ZW50cyBvciBldGh0b29sIGNvbW1hbmRzLiBJdCYjMzk7cyBub3QgdXN1YWxseSBhIGRpcmVjdCB1c2VyLXNwYWNlIHRoaW5nLiBUaGUgcXVlc3Rpb24gaXMgaWYgdGhlcmUmIzM5O3MgYW55IHVzZXItc3BhY2UgcGF0aCB0byB0aGlzLiBgcGh5bGlua19wY3NfbmVnX21vZGVgIGlzIGNhbGxlZCBmcm9tIGBwaHlsaW5rX21ham9yX2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHBoeWxpbmtfbWFqb3JfY29uZmlnYCBpcyBjYWxsZWQsIGFuZCBmcm9tIHdoZXJlLiBUaW1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5bGlua19tYWpvcl9jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTIzOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTI0MDpzdGF0aWMgdm9pZCBwaHlsaW5rX21ham9yX2NvbmZpZyhzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgcmVzdGFydCxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTI0MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xNDU1PXN0YXRpYyB2b2lkIHBoeWxpbmtfbWFjX2luaXRpYWxfY29uZmlnKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBmb3JjZV9yZXN0YXJ0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTQ4My1cdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHktXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE0ODQ6XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZm9yY2VfcmVzdGFydCwgXHUwMDI2bGlua19zdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE0ODUtXHRpZiAocGh5KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTYxNj1zdGF0aWMgdm9pZCBwaHlsaW5rX3Jlc29sdmUoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTcwNi1cdFx0fVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxNzA3Olx0XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFx1MDAyNmxpbmtfc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzA4LVx0XHRwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBsaW5rX3N0YXRlLmludGVyZmFjZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5ODI9aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxMzItXHRcdFx0ICAgICAgXHUwMDI2cGwtXHUwMDNlcGh5bGlua19kaXNhYmxlX3N0YXRlKSlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzEzMzpcdFx0XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFx1MDAyNmNvbmZpZyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxMzQtXHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGZ1bmN0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyBhYm91dCBob3cgb25lIGludGVyYWN0cyB3aXRoIGl0LiBDYW4gaXQgYmUgcmVhY2hlZCB2aWEgYGV0aHRvb2xgPyBZZXAsIGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgcGF0aC4gQnV0IGhlcmUmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjYWxsIHBhdGggaGF2ZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IElzIGl0IG9ubHkgcmVsZXZhbnQgdG8gdmVyeSBzcGVjaWFsaXplZCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnM/CgpEaWdnaW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgYnkgZHJpdmVycyB0aGF0IHV0aWxpemUgdGhlIHBoeWxpbmsgZnJhbWV3b3JrLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBpbiB0aGUgY29udGV4dCBvZiBmdXp6aW5nLiBTeXprYWxsZXIgaGFzIGEgYnVuY2ggb2YgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMg4oCTIGB2ZXRoYCwgYHR1bmAsIGBtYWNzZWNgLCB0aGluZ3MgbGlrZSB0aGF0LiBUaGUga2V5IG5vdyBpczogYXJlIGFueSBvZiB0aG9zZSB2aXJ0dWFsIGRyaXZlcnMgYWN0dWFsbHkgdXNpbmcgYHBoeWxpbmtgPyBJZiBzbywgdGhpcyBiZWNvbWVzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX2V0aHRvb2wuYz0yMjQ9c3RhdGljIGludCB0c2VfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9ldGh0b29sLmMtMjI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfZXRodG9vbC5jOjIyOTpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChwcml2LVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9ldGh0b29sLmMtMjMwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTQ3Mj1zdGF0aWMgaW50IGFnNzF4eF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy00NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjQ3NzpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChhZy1cdTAwM2VwaHlsaW5rLCBrc2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNDc4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTM2OTA9c3RhdGljIGludCBtYWNiX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzY5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzY5NTpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChicC1cdTAwM2VwaHlsaW5rLCBrc2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzY5Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmM9NjU9c3RhdGljIGludCBkcGFhX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aHRvb2wuYy03MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRodG9vbC5jOjcxOlx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KG1hY19kZXYtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRodG9vbC5jLTcyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jPTEyNz1kcGFhMl9ldGhfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMTM1LVx0aWYgKGRwYWEyX2V0aF9pc190eXBlX3BoeShwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmM6MTM2Olx0XHRlcnIgPSBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChwcml2LVx1MDAzZW1hYy1cdTAwM2VwaHlsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYy0xMzctXHRcdFx0XHRcdFx0ICAgIGxpbmtfc2V0dGluZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2gtZXRodG9vbC5jPTEwMD1kcGFhMl9zd2l0Y2hfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC1ldGh0b29sLmMtMTExLVx0aWYgKGRwYWEyX3N3aXRjaF9wb3J0X2lzX3R5cGVfcGh5KHBvcnRfcHJpdikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2gtZXRodG9vbC5jOjExMjpcdFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydF9wcml2LVx1MDAzZW1hYy1cdTAwM2VwaHlsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC1ldGh0b29sLmMtMTEzLVx0XHRcdFx0XHRcdCAgICBsaW5rX2tzZXR0aW5ncyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYz0xMjc3PXN0YXRpYyBpbnQgZW5ldGNfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYy0xMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYzoxMjg1Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHByaXYtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMtMTI4Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM9Nzk2PXN0YXRpYyBpbnQgZnNfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy04MDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYzo4MDE6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoZmVwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy04MDItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aF9ldGh0b29sLmM9MTEyPXVlY19zZXRfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoX2V0aHRvb2wuYy0xMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGhfZXRodG9vbC5jOjExNzpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCh1Z2V0aC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoX2V0aHRvb2wuYy0xMTgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM9NDcwMD1tdm5ldGFfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy00NzA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYzo0NzA1Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTQ3MDYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jPTU1ODU9c3RhdGljIGludCBtdnBwMl9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTU1OTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYzo1NTkzOlx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTU1OTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfZXRodG9vbC5jPTY0Nj1wcmVzdGVyYV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfZXRodG9vbC5jLTY1NC1cdGlmIChwb3J0LVx1MDAzZXBoeV9saW5rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ldGh0b29sLmM6NjU1Olx0XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydC1cdTAwM2VwaHlfbGluaywgZWNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2V0aHRvb2wuYy02NTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz00NTQ3PXN0YXRpYyBpbnQgbXRrX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTQ1NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjQ1NTU6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQobWFjLVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTQ1NTYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X2V0aHRvb2wuYz0xMDkwPWxhbjc0M3hfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmMtMTA5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X2V0aHRvb2wuYzoxMDk1Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KGFkYXB0ZXItXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X2V0aHRvb2wuYy0xMDk2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYz01MTY9c3RhdGljIGludCBsYW45NjZ4X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYy01MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYzo1MjE6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9ldGh0b29sLmMtNTIyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9ldGh0b29sLmM9MTE1MT1zdGF0aWMgaW50IHNwYXJ4NV9zZXRfbGlua19zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9ldGh0b29sLmMtMTE1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYzoxMTU2Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYy0xMTU3LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jPTMyOT1zdG1tYWNfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTMzMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzM0Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHByaXYtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzM1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jPTUwNT1hbTY1X2Nwc3dfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1ldGh0b29sLmMtNTA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LWV0aHRvb2wuYzo1MTA6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc2FsdmUtXHUwMDNlcGh5bGluaywgZWNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jLTUxMS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9MjU2PWludCB3eF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy0yNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzoyNjE6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQod3gtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTI2Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYz0yMjkxPWF4aWVuZXRfZXRodG9vbHNfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMjI5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmM6MjI5NjpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChscC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYy0yMjk3LX1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NTc9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk3ODogKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5NzktICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5ODEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5ODI6aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4My1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmtzZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTQ0LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE0NTpFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNDYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0xODYxPXN0YXRpYyBpbnQgbGFuNzh4eF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE4NjUtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE4NjY6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoZGV2LVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE4NjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzY4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIERyaXZlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IG1ha2luZyB0aGUgY29ubmVjdGlvbiDigJMgdGhpcyBgbGFuNzh4eGAgZHJpdmVyIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCByaWdodD8gQW5kIHdlIGtub3cgU3l6a2FsbGVyIGNhbiBmdXp6IFVTQiBkcml2ZXJzLCBib3RoIHRocm91Z2ggdGhlIGBkdW1teV9oY2RgIGFuZCByYXcgZ2FkZ2V0IGFwcHJvYWNoZXMuIFRoYXQgbWVhbnMgd2UgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGluc3RhbnRpYXRlIHRoaXMgYGxhbjc4eHhgIGRyaXZlciBhbmQgc3RhcnQgZXhlcmNpc2luZyBpdHMgZXRodG9vbCBvcGVyYXRpb25zLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lcywgZG9lcyB0aGlzIGRyaXZlciB1dGlsaXplIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHRvIGRldGVybWluZSB0aGUgYmVzdCBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBwcmV0dHkgY2xlYXI6IHRoZSBgbGFuNzh4eGAgZHJpdmVyICpkb2VzbiYjMzk7dCogdXNlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gVGhhdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gaW52ZXN0aWdhdGUgKndoZXJlKiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgKmlzKiBhY3R1YWxseSBlbXBsb3llZCBpbiB0aGUga2VybmVsJiMzOTtzIEV0aGVybmV0IGRyaXZlciBsYW5kc2NhcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCByZWxldmFuY2UuIEkmIzM5O2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBtYWNybyB3aXRoaW4gdGhlIHJlbGV2YW50IGRyaXZlciBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlciBmaWxlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggZGV2aWNlcyBvciBjaGlwc2V0cyBsZXZlcmFnZSB0aGlzIGludGVyZmFjZSBtb2RlIGFuZCB3aHkuIEtub3dpbmcgdGhlIHNwZWNpZmljIGRldmljZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBpdHMgY2hhcmFjdGVyaXN0aWNzIGFuZCBjYXBhYmlsaXRpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBmdWxsZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTE1OT1pbnQgcGh5X2ludGVyZmFjZV9udW1fcG9ydHMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDEtXHRcdHJldHVybiA0O1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6MjAyOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAzLVx0XHRyZXR1cm4gNTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz0yOTQ9dW5zaWduZWQgbG9uZyBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMC1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MzExOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjM4PXN0YXRpYyBpbnQgcGh5bGlua19pbnRlcmZhY2VfbWF4X3NwZWVkKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTktXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjEtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz03NzQ9c3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODA4LVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6ODA5Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgxMC1cdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzOT1zdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0Mi1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDQzOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQ0LVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz00OTA9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTQ5LVx0XHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUwOlx0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkpKSlcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTE6XHRcdFx0cHJpdi1cdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU1Mi1cdFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTU2Mj1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfY29uZmlnX2luaXRfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODUtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU4NjpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODctXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkqKgoKT2theSwgc28gSSBzZWUgdGhpcyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdXNlZCB3aXRoaW4gdGhlIGBxY2E4MDd4LmNgIGZpbGUsIHdoaWNoIGlzIGEgUXVhbGNvbW0gUEhZIGRyaXZlciBpbiB0aGUgbmV0d29yayBkcml2ZXIgZGlyZWN0b3J5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgcGFydGljdWxhciBpbnRlcmZhY2UgbW9kZSBleGNsdXNpdmVseSBmb3IgcGh5c2ljYWwgaW50ZXJmYWNlcywgb3IgY291bGQgaXQgcG90ZW50aWFsbHkgYmUgdXNlZCBpbiBhIHZpcnR1YWwgZHJpdmVyIGNvbnRleHQgYXMgd2VsbD8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBrbm93LiBUbyBhbnN3ZXIgdGhpcywgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHVzYWdlIHBhdHRlcm4uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IG90aGVyIGRyaXZlcnMsIHZpcnR1YWwgb3Igb3RoZXJ3aXNlLCBhcmUgYWN0dWFsbHkgZW1wbG95aW5nIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBhcHBsaWNhdGlvbiBiZWZvcmUgbWFraW5nIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTIzOD1Tb21lIG9mIHRoZSBpbnRlcmZhY2UgbW9kZXMgYXJlIGRlc2NyaWJlZCBiZWxvdzpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zMjUtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDozMjY6YGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYGBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTMyNy0gICAgVGhpcyBpcyB0aGUgUGVudGEgU0dNSUkgbW9kZSwgaXQgaXMgc2ltaWxhciB0byBRU0dNSUkgYnV0IGl0IGNvbWJpbmVzIDVcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz0xNTk9aW50IHBoeV9pbnRlcmZhY2VfbnVtX3BvcnRzKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAxLVx0XHRyZXR1cm4gNDtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjIwMjpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMy1cdFx0cmV0dXJuIDU7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Mjk0PXVuc2lnbmVkIGxvbmcgcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTAtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjMxMTpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMi1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOD1zdGF0aWMgaW50IHBoeWxpbmtfaW50ZXJmYWNlX21heF9zcGVlZChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU5LVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MDpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Nzc0PXN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgwOC1cdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjgwOTpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MTAtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzk9c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA0MzpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0NC1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NDkwPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU0OS1cdFx0aWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MDpcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJKSkpXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUxOlx0XHRcdHByaXYtXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NTItXHRcdGVsc2UgaWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz01NjI9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX2NvbmZpZ19pbml0X29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg1LVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1ODY6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg3LVx0ZGVmYXVsdDpcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTUzPWV4dGVybiBjb25zdCBpbnQgcGh5X2Jhc2ljX3BvcnRzX2FycmF5WzNdO1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtODktICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9NT0NBOiBNdWx0aW1lZGlhIG92ZXIgQ29heFxuaW5jbHVkZS9saW51eC9waHkuaDo5MDogKiBAUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTogUGVudGEgU0dNSUlcbmluY2x1ZGUvbGludXgvcGh5LmgtOTEtICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6IFF1YWQgU0dNSUlcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTExND10eXBlZGVmIGVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMTMyLVx0UEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EsXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjEzMzpcdFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUksXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzNC1cdFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUksXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0yMTA9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwaHlfbW9kZXMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTI0OC1cdFx0cmV0dXJuIFwmIzM0O21vY2FcJiMzNDs7XG5pbmNsdWRlL2xpbnV4L3BoeS5oOjI0OTpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmluY2x1ZGUvbGludXgvcGh5LmgtMjUwLVx0XHRyZXR1cm4gXCYjMzQ7cHNnbWlpXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU2NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIGBxY2E4MDd4LmNgIGRyaXZlciwgd2hpY2ggaXMgYSBwaHlzaWNhbCBQSFkgZHJpdmVyIGZvciB0aGUgUXVhbGNvbW0gUUNBODA3eC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGRyaXZlciwgaXQmIzM5O3MgcHJldHR5IHVubGlrZWx5IHRoYXQgc3l6a2FsbGVyLCBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGlzIGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRoaXMgY29kZSBwYXRoIGRpcmVjdGx5LiBUaGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhc3N1bXB0aW9uLCBpbml0aWFsbHkuCgpCdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBDb3VsZCBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGJlIGNhbGxlZCB3aXRoIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYD8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuIExldCBtZSBsb29rIGNsb3Nlci4gYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCB0YWtlcyBhIGBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldGAgYXJndW1lbnQuIE15IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgYGtzZXRgIHN0cnVjdHVyZSBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggc2V0dGluZyB0aGUgaW50ZXJmYWNlIG1vZGU/IERvZXMgdGhhdCBzdHJ1Y3R1cmUgY29udGFpbiB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERWAgdmFsdWVzPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoaXMgaXMgcG90ZW50aWFsbHkgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgYmUsIGV2ZW4gaWYgdGhlIHByaW1hcnkgZHJpdmVyIGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yOTU3PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5NzctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5Nzg6ICogcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoKSAtIHNldCB0aGUgbGluayBzZXR0aW5nc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTc5LSAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTgxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyOTgyOmludCBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChzdHJ1Y3QgcGh5bGluayAqcGwsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5ODMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0NC19XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMxNDU6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTQ2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGFmdGVyIGEgcXVpY2sgc2Nhbiwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZG9tYWluOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmFtZSB0ZWxscyBtZSBleGFjdGx5IHdoYXQgdGhpcyBpcyBhaW1pbmcgdG8gZG8uIEl0JiMzOTtzIGEga2VybmVsIGZ1bmN0aW9uLCBvYnZpb3VzbHkuIGBwaHlsaW5rYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGNvbnRyb2wsIHZlcnkgbGlrZWx5IGZvY3VzZWQgb24gRXRoZXJuZXQuIFRoZSAmIzM0O2V0aHRvb2wmIzM0OyBpbmNsdXNpb24gaXMga2V5OyBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgdXRpbGl0eSBmb3IgY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLCBzbyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGpvYiBpcyB0byB0cmFuc2xhdGUgdGhvc2UgdXNlci1zcGFjZSBldGh0b29sIHNldHRpbmdzIGludG8gc29tZXRoaW5nIHRoZSBQSFkgaXRzZWxmIGNhbiB1bmRlcnN0YW5kIGFuZCB1dGlsaXplLiAmIzM0O2tzZXR0aW5ncyYjMzQ7IGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzIC0gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgc2V0dGluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gbWFuaXB1bGF0ZSB0aGUgUEhZIHZpYSB0aGUgcGh5bGluayBmcmFtZXdvcmsuIFRoZSAmIzM0O3NldCYjMzQ7IGF0IHRoZSBlbmQgY2xlYXJseSBkZWZpbmVzIHRoaXMgZnVuY3Rpb24gYXMgYSBzZXR0ZXIgLSB3ZSYjMzk7cmUgY2hhbmdpbmcgc29tZXRoaW5nLCBub3QgcmV0cmlldmluZyBpdC4KCkltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFdlJiMzOTtsbCBiZSB3b3JraW5nIHdpdGggdGhlIHBoeWxpbmsgb2JqZWN0IGl0c2VsZiwgY2VydGFpbmx5LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggc2V0dGluZ3MgYXJlIGJlaW5nIHRhcmdldGVkLCBhbmQgaG93IHRoYXQgaW5mb3JtYXRpb24gaXMgbWFwcGVkIHRvIHRoZSBpbnRlcm5hbCByZWdpc3RlcnMgb3IgbWVjaGFuaXNtcyBvZiB0aGUgUEhZIGRyaXZlci4gTGlrZWx5LCB0aGVyZSYjMzk7cyBhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCB0aGUgcG9zc2libGUgZXRodG9vbCBjb25maWd1cmF0aW9ucywgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBhbmQgdHJhbnNsYXRpbmcgdGhvc2UgcGFyYW1ldGVycy4KCkkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgZXJyb3IgY29uZGl0aW9ucyDigJMgaW52YWxpZCBzZXR0aW5ncywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIGhhcmR3YXJlIGxpbWl0YXRpb25zLiBUaGUgZnVuY3Rpb24gbmVlZHMgdG8gaGFuZGxlIHRob3NlIGdyYWNlZnVsbHksIHJldHVybmluZyBhcHByb3ByaWF0ZSBlcnJvciBjb2RlcyBhbmQgcGVyaGFwcyBwcm92aWRpbmcgZGVidWcgbWVzc2FnZXMuIFRoZXJlJiMzOTtzIGFsc28gdGhlIHF1ZXN0aW9uIG9mIHN5bmNocm9uaXphdGlvbjsgaWYgdGhpcyBmdW5jdGlvbiBpcyBtb2RpZnlpbmcgaGFyZHdhcmUgc2V0dGluZ3MsIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gb3RoZXIgdGhyZWFkcyBvciBpbnRlcnJ1cHRzIGNvdWxkIGJlIHByb2JsZW1hdGljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gcGxhY2UsIGlmIG5vdCBJIHdvdWxkIGhhdmUgdG8gcmV2aWV3IHRob3NlLgoKVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBwb3RlbnRpYWxseSBpbmZsdWVuY2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gQSBmbGF3ZWQgaW1wbGVtZW50YXRpb24gaGVyZSBjb3VsZCBsZWFkIHRvIGRyb3BwZWQgY29ubmVjdGlvbnMsIGluY29ycmVjdCBsaW5rIHNwZWVkcywgb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIHZhbGlkYXRpb24sIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGFudGljaXBhdGUgaXQgd2lsbCBpbnRlcmZhY2Ugd2l0aCB0aGUgUEhZIGRyaXZlciwgY2FsbGluZyBpdHMgZnVuY3Rpb25zIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgaG93IGl0IGFjaGlldmVzIHRoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5ODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5ODI6XHRpbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxuMjk4MzpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcbjI5ODQ6XHR7XG4yOTg1Olx0XHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0KTtcbjI5ODY6XHRcdGNvbnN0IHN0cnVjdCBsaW5rX2NhcGFiaWxpdGllcyAqYztcbjI5ODc6XHRcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgY29uZmlnO1xuMjk4ODpcdFxuMjk4OTpcdFx0QVNTRVJUX1JUTkwoKTtcbjI5OTA6XHRcbjI5OTE6XHRcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbjI5OTI6XHRcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgcGh5X2tzZXQgPSAqa3NldDtcbjI5OTM6XHRcbjI5OTQ6XHRcdFx0bGlua21vZGVfYW5kKHBoeV9rc2V0LmxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcsXG4yOTk1Olx0XHRcdFx0ICAgICBwaHlfa3NldC5saW5rX21vZGVzLmFkdmVydGlzaW5nLFxuMjk5NjpcdFx0XHRcdCAgICAgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbjI5OTc6XHRcbjI5OTg6XHRcdFx0LyogV2UgY2FuIHJlbHkgb24gcGh5bGliIGZvciB0aGlzIHVwZGF0ZTsgd2UgYWxzbyBkbyBub3QgbmVlZFxuMjk5OTpcdFx0XHQgKiB0byB1cGRhdGUgdGhlIHBsLVx1MDAzZWxpbmtfY29uZmlnIHNldHRpbmdzOlxuMzAwMDpcdFx0XHQgKiAtIHRoZSBjb25maWd1cmF0aW9uIHJldHVybmVkIHZpYSBrc2V0dGluZ3NfZ2V0KCkgd2lsbCBjb21lXG4zMDAxOlx0XHRcdCAqICAgZnJvbSBwaHlsaWIgd2hlbmV2ZXIgYSBQSFkgaXMgcHJlc2VudC5cbjMwMDI6XHRcdFx0ICogLSBsaW5rX2NvbmZpZy5pbnRlcmZhY2Ugd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBQSFkgY2FsbGluZ1xuMzAwMzpcdFx0XHQgKiAgIGJhY2sgdmlhIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCBhIHN1YnNlcXVlbnQgcmVzb2x2ZS5cbjMwMDQ6XHRcdFx0ICogLSBpbml0aWFsIGxpbmsgY29uZmlndXJhdGlvbiBmb3IgUEhZIG1vZGUgY29tZXMgZnJvbSB0aGVcbjMwMDU6XHRcdFx0ICogICBsYXN0IHBoeSBzdGF0ZSB1cGRhdGVkIHZpYSBwaHlsaW5rX3BoeV9jaGFuZ2UoKS5cbjMwMDY6XHRcdFx0ICogLSBvdGhlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGUuZy4gcGF1c2UgbW9kZXMpIGFyZVxuMzAwNzpcdFx0XHQgKiAgIHBlcmZvcm1lZCBkaXJlY3RseSB2aWEgcGh5bGliLlxuMzAwODpcdFx0XHQgKiAtIGlmIGluIGluLWJhbmQgbW9kZSB3aXRoIGEgUEhZLCB0aGUgbGluayBjb25maWd1cmF0aW9uXG4zMDA5Olx0XHRcdCAqICAgaXMgcGFzc2VkIG9uIHRoZSBsaW5rIGZyb20gdGhlIFBIWSwgYW5kIGFsbCBvZlxuMzAxMDpcdFx0XHQgKiAgIGxpbmtfY29uZmlnLntzcGVlZCxkdXBsZXgsYW5fZW5hYmxlZCxwYXVzZX0gYXJlIG5vdCB1c2VkLlxuMzAxMTpcdFx0XHQgKiAtIHRoZSBvbmx5IHBvc3NpYmxlIHVzZSB3b3VsZCBiZSBsaW5rX2NvbmZpZy5hZHZlcnRpc2luZ1xuMzAxMjpcdFx0XHQgKiAgIHBhdXNlIG1vZGVzIHdoZW4gaW4gMTAwMGJhc2UtWCBtb2RlIHdpdGggYSBQSFksIGJ1dCBpblxuMzAxMzpcdFx0XHQgKiAgIHRoZSBwcmVzZW5jZSBvZiBhIFBIWSwgdGhpcyBzaG91bGQgbm90IGJlIGNoYW5nZWQgYXMgdGhhdFxuMzAxNDpcdFx0XHQgKiAgIHNob3VsZCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIG1lZGlhIHNpZGUgYWR2ZXJ0aXNlbWVudC5cbjMwMTU6XHRcdFx0ICovXG4zMDE2Olx0XHRcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBsLVx1MDAzZXBoeWRldiwgXHUwMDI2cGh5X2tzZXQpO1xuMzAxNzpcdFx0fVxuMzAxODpcdFxuMzAxOTpcdFx0Y29uZmlnID0gcGwtXHUwMDNlbGlua19jb25maWc7XG4zMDIwOlx0XHQvKiBNYXNrIG91dCB1bnN1cHBvcnRlZCBhZHZlcnRpc2VtZW50cyAqL1xuMzAyMTpcdFx0bGlua21vZGVfYW5kKGNvbmZpZy5hZHZlcnRpc2luZywga3NldC1cdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nLFxuMzAyMjpcdFx0XHQgICAgIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4zMDIzOlx0XG4zMDI0Olx0XHQvKiBGSVhNRTogc2hvdWxkIHdlIHJlamVjdCBhdXRvbmVnIGlmIHBoeS9tYWMgZG9lcyBub3Qgc3VwcG9ydCBpdD8gKi9cbjMwMjU6XHRcdHN3aXRjaCAoa3NldC1cdTAwM2ViYXNlLmF1dG9uZWcpIHtcbjMwMjY6XHRcdGNhc2UgQVVUT05FR19ESVNBQkxFOlxuMzAyNzpcdFx0XHQvKiBBdXRvbmVnb3RpYXRpb24gZGlzYWJsZWQsIHNlbGVjdCBhIHN1aXRhYmxlIHNwZWVkIGFuZFxuMzAyODpcdFx0XHQgKiBkdXBsZXguXG4zMDI5Olx0XHRcdCAqL1xuMzAzMDpcdFx0XHRjID0gcGh5X2NhcHNfbG9va3VwKGtzZXQtXHUwMDNlYmFzZS5zcGVlZCwga3NldC1cdTAwM2ViYXNlLmR1cGxleCxcbjMwMzE6XHRcdFx0XHRcdCAgICBwbC1cdTAwM2VzdXBwb3J0ZWQsIGZhbHNlKTtcbjMwMzI6XHRcdFx0aWYgKCFjKVxuMzAzMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzAzNDpcdFxuMzAzNTpcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgZml4ZWQgbGluaywgcmVmdXNlIHRvIGNoYW5nZSBsaW5rIHBhcmFtZXRlcnMuXG4zMDM2Olx0XHRcdCAqIElmIHRoZSBsaW5rIHBhcmFtZXRlcnMgbWF0Y2gsIGFjY2VwdCB0aGVtIGJ1dCBkbyBub3RoaW5nLlxuMzAzNzpcdFx0XHQgKi9cbjMwMzg6XHRcdFx0aWYgKHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7XG4zMDM5Olx0XHRcdFx0aWYgKGMtXHUwMDNlc3BlZWQgIT0gcGwtXHUwMDNlbGlua19jb25maWcuc3BlZWQgfHxcbjMwNDA6XHRcdFx0XHQgICAgYy1cdTAwM2VkdXBsZXggIT0gcGwtXHUwMDNlbGlua19jb25maWcuZHVwbGV4KVxuMzA0MTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDQyOlx0XHRcdFx0cmV0dXJuIDA7XG4zMDQzOlx0XHRcdH1cbjMwNDQ6XHRcbjMwNDU6XHRcdFx0Y29uZmlnLnNwZWVkID0gYy1cdTAwM2VzcGVlZDtcbjMwNDY6XHRcdFx0Y29uZmlnLmR1cGxleCA9IGMtXHUwMDNlZHVwbGV4O1xuMzA0NzpcdFx0XHRicmVhaztcbjMwNDg6XHRcbjMwNDk6XHRcdGNhc2UgQVVUT05FR19FTkFCTEU6XG4zMDUwOlx0XHRcdC8qIElmIHdlIGhhdmUgYSBmaXhlZCBsaW5rLCBhbGxvdyBhdXRvbmVnb3RpYXRpb24gKHNpbmNlIHRoYXRcbjMwNTE6XHRcdFx0ICogaXMgb3VyIGRlZmF1bHQgY2FzZSkgYnV0IGRvIG5vdCBhbGxvdyB0aGUgYWR2ZXJ0aXNlbWVudCB0b1xuMzA1MjpcdFx0XHQgKiBiZSBjaGFuZ2VkLiBJZiB0aGUgYWR2ZXJ0aXNlbWVudCBtYXRjaGVzLCBzaW1wbHkgcmV0dXJuLlxuMzA1MzpcdFx0XHQgKi9cbjMwNTQ6XHRcdFx0aWYgKHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7XG4zMDU1Olx0XHRcdFx0aWYgKCFsaW5rbW9kZV9lcXVhbChjb25maWcuYWR2ZXJ0aXNpbmcsXG4zMDU2Olx0XHRcdFx0XHRcdCAgICBwbC1cdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZykpXG4zMDU3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwNTg6XHRcdFx0XHRyZXR1cm4gMDtcbjMwNTk6XHRcdFx0fVxuMzA2MDpcdFxuMzA2MTpcdFx0XHRjb25maWcuc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuMzA2MjpcdFx0XHRjb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4zMDYzOlx0XHRcdGJyZWFrO1xuMzA2NDpcdFxuMzA2NTpcdFx0ZGVmYXVsdDpcbjMwNjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDY3Olx0XHR9XG4zMDY4Olx0XG4zMDY5Olx0XHQvKiBXZSBoYXZlIHJ1bGVkIG91dCB0aGUgY2FzZSB3aXRoIGEgUEhZIGF0dGFjaGVkLCBhbmQgdGhlXG4zMDcwOlx0XHQgKiBmaXhlZC1saW5rIGNhc2VzLiAgQWxsIHRoYXQgaXMgbGVmdCBhcmUgaW4tYmFuZCBsaW5rcy5cbjMwNzE6XHRcdCAqL1xuMzA3MjpcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9BdXRvbmVnX0JJVCwgY29uZmlnLmFkdmVydGlzaW5nLFxuMzA3MzpcdFx0XHRcdCBrc2V0LVx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSk7XG4zMDc0Olx0XG4zMDc1Olx0XHQvKiBJZiB0aGlzIGxpbmsgaXMgd2l0aCBhbiBTRlAsIGVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gYWR2ZXJ0aXNlZCBtb2Rlc1xuMzA3NjpcdFx0ICogYWxzbyBjYXVzZSB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UgdG8gYmUgc2VsZWN0ZWQgc3VjaCB0aGF0IHRoZVxuMzA3NzpcdFx0ICogbGluayBjYW4gYmUgY29uZmlndXJlZCBjb3JyZWN0bHkuXG4zMDc4Olx0XHQgKi9cbjMwNzk6XHRcdGlmIChwbC1cdTAwM2VzZnBfYnVzKSB7XG4zMDgwOlx0XHRcdGlmIChrc2V0LVx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSlcbjMwODE6XHRcdFx0XHRjb25maWcuaW50ZXJmYWNlID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuIE15IGluaXRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFNGUCBidXMsIGFuZCBJJiMzOTt2ZSBub3RlZCB0aGF0IHRoZSBpbnRlcmZhY2UgbW9kZSBpcyBzZWxlY3RlZCBoZXJlIHdoZW4gYHBsLSZndDtzZnBfYnVzYCBpcyBzZXQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBpdCBuYXJyb3dzIGRvd24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgaXMgaGFwcGVuaW5nLiBOb3csIEkgbmVlZCB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmZhY2Ugc2VsZWN0aW9uIHRpZXMgaW50byB0aGUgYnJvYWRlciBQSFkgbGluayBzZXR0aW5ncyBtYW5hZ2VtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcdFx0aWYgKGtzZXQtXHUwMDNlYmFzZS5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKVxuMzA4MTpcdFx0XHRcdGNvbmZpZy5pbnRlcmZhY2UgPVxuMzA4MjpcdFx0XHRcdFx0cGh5bGlua19zZnBfc2VsZWN0X2ludGVyZmFjZShwbCxcbjMwODM6XHRcdFx0XHRcdFx0XHRcdGNvbmZpZy5hZHZlcnRpc2luZyk7XG4zMDg0Olx0XHRcdGVsc2VcbjMwODU6XHRcdFx0XHRjb25maWcuaW50ZXJmYWNlID1cbjMwODY6XHRcdFx0XHRcdHBoeWxpbmtfc2ZwX3NlbGVjdF9pbnRlcmZhY2Vfc3BlZWQocGwsXG4zMDg3Olx0XHRcdFx0XHRcdFx0XHRjb25maWcuc3BlZWQpO1xuMzA4ODpcdFx0XHRpZiAoY29uZmlnLmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpXG4zMDg5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDkwOlx0XG4zMDkxOlx0XHRcdC8qIFJldmFsaWRhdGUgd2l0aCB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlICovXG4zMDkyOlx0XHRcdGxpbmttb2RlX2NvcHkoc3VwcG9ydCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbjMwOTM6XHRcdFx0aWYgKHBoeWxpbmtfdmFsaWRhdGUocGwsIHN1cHBvcnQsIFx1MDAyNmNvbmZpZykpIHtcbjMwOTQ6XHRcdFx0XHRwaHlsaW5rX2VycihwbCwgXCYjMzQ7dmFsaWRhdGlvbiBvZiAlcy8lcyB3aXRoIHN1cHBvcnQgJSpwYiBmYWlsZWRcXG5cJiMzNDssXG4zMDk1Olx0XHRcdFx0XHQgICAgcGh5bGlua19hbl9tb2RlX3N0cihwbC1cdTAwM2VyZXFfbGlua19hbl9tb2RlKSxcbjMwOTY6XHRcdFx0XHRcdCAgICBwaHlfbW9kZXMoY29uZmlnLmludGVyZmFjZSksXG4zMDk3Olx0XHRcdFx0XHQgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLCBzdXBwb3J0KTtcbjMwOTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwOTk6XHRcdFx0fVxuMzEwMDpcdFx0fSBlbHNlIHtcbjMxMDE6XHRcdFx0LyogVmFsaWRhdGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgY3VycmVudCBzdXBwb3J0ZWQgbWFzay4gKi9cbjMxMDI6XHRcdFx0bGlua21vZGVfY29weShzdXBwb3J0LCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuMzEwMzpcdFx0XHRpZiAocGh5bGlua192YWxpZGF0ZShwbCwgc3VwcG9ydCwgXHUwMDI2Y29uZmlnKSlcbjMxMDQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMDU6XHRcdH1cbjMxMDY6XHRcbjMxMDc6XHRcdC8qIElmIGF1dG9uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB3ZSBtdXN0IGhhdmUgYW4gYWR2ZXJ0aXNlbWVudCAqL1xuMzEwODpcdFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0F1dG9uZWdfQklULFxuMzEwOTpcdFx0XHRcdCAgICAgIGNvbmZpZy5hZHZlcnRpc2luZykgXHUwMDI2XHUwMDI2XG4zMTEwOlx0XHQgICAgcGh5bGlua19pc19lbXB0eV9saW5rbW9kZShjb25maWcuYWR2ZXJ0aXNpbmcpKVxuMzExMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMTI6XHRcbjMxMTM6XHRcdC8qIFZhbGlkYXRlIHRoZSBhdXRvbmVnb3RpYXRpb24gc3RhdGUuIFdlIGRvbiYjMzk7dCBoYXZlIGEgUEhZIGluIHRoaXNcbjMxMTQ6XHRcdCAqIHNpdHVhdGlvbiwgc28gdGhlIFBDUyBpcyB0aGUgbWVkaWEtZmFjaW5nIGVudGl0eS5cbjMxMTU6XHRcdCAqL1xuMzExNjpcdFx0aWYgKCFwaHlsaW5rX3ZhbGlkYXRlX3Bjc19pbmJhbmRfYXV0b25lZyhwbCwgY29uZmlnLmludGVyZmFjZSxcbjMxMTc6XHRcdFx0XHRcdFx0XHQgY29uZmlnLmFkdmVydGlzaW5nKSlcbjMxMTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTE5Olx0XG4zMTIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbjMxMjE6XHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLnNwZWVkID0gY29uZmlnLnNwZWVkO1xuMzEyMjpcdFx0cGwtXHUwMDNlbGlua19jb25maWcuZHVwbGV4ID0gY29uZmlnLmR1cGxleDtcbjMxMjM6XHRcbjMxMjQ6XHRcdGlmIChwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgIT0gY29uZmlnLmludGVyZmFjZSkge1xuMzEyNTpcdFx0XHQvKiBUaGUgaW50ZXJmYWNlIGNoYW5nZWQsIGUuZy4gMTAwMGJhc2UtWCBcdTAwM2MtXHUwMDNlIDI1MDBiYXNlLVggKi9cbjMxMjY6XHRcdFx0LyogV2UgbmVlZCB0byBmb3JjZSB0aGUgbGluayBkb3duLCB0aGVuIGNoYW5nZSB0aGUgaW50ZXJmYWNlICovXG4zMTI3Olx0XHRcdGlmIChwbC1cdTAwM2VvbGRfbGlua19zdGF0ZSkge1xuMzEyODpcdFx0XHRcdHBoeWxpbmtfbGlua19kb3duKHBsKTtcbjMxMjk6XHRcdFx0XHRwbC1cdTAwM2VvbGRfbGlua19zdGF0ZSA9IGZhbHNlO1xuMzEzMDpcdFx0XHR9XG4zMTMxOlx0XHRcdGlmICghdGVzdF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsXG4zMTMyOlx0XHRcdFx0ICAgICAgXHUwMDI2cGwtXHUwMDNlcGh5bGlua19kaXNhYmxlX3N0YXRlKSlcbjMxMzM6XHRcdFx0XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFx1MDAyNmNvbmZpZyk7XG4zMTM0Olx0XHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7XG4zMTM1Olx0XHRcdGxpbmttb2RlX2NvcHkocGwtXHUwMDNlbGlua19jb25maWcuYWR2ZXJ0aXNpbmcsIGNvbmZpZy5hZHZlcnRpc2luZyk7XG4zMTM2Olx0XHR9IGVsc2UgaWYgKCFsaW5rbW9kZV9lcXVhbChwbC1cdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZyxcbjMxMzc6XHRcdFx0XHRcdCAgIGNvbmZpZy5hZHZlcnRpc2luZykpIHtcbjMxMzg6XHRcdFx0bGlua21vZGVfY29weShwbC1cdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZywgY29uZmlnLmFkdmVydGlzaW5nKTtcbjMxMzk6XHRcdFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XG4zMTQwOlx0XHR9XG4zMTQxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuMzE0MjpcdFxuMzE0MzpcdFx0cmV0dXJuIDA7XG4zMTQ0Olx0fVxuMzE0NTpcdEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcbjMxNDY6XHRcbjMxNDc6XHQvKipcbjMxNDg6XHQgKiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCgpIC0gcmVzdGFydCBuZWdvdGlhdGlvblxuMzE0OTpcdCAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4zMTUwOlx0ICpcbjMxNTE6XHQgKiBSZXN0YXJ0IG5lZ290aWF0aW9uIGZvciB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsLiBUaGlzIHdpbGxcbjMxNTI6XHQgKiBjYXVzZSBhbnkgYXR0YWNoZWQgcGh5IHRvIHJlc3RhcnQgbmVnb3RpYXRpb24gd2l0aCB0aGUgbGluayBwYXJ0bmVyLCBhbmRcbjMxNTM6XHQgKiBpZiB0aGUgTUFDIGlzIGluIGEgQmFzZVggbW9kZSwgdGhlIE1BQyB3aWxsIGFsc28gYmUgcmVxdWVzdGVkIHRvIHJlc3RhcnRcbjMxNTQ6XHQgKiBuZWdvdGlhdGlvbi5cbjMxNTU6XHQgKlxuMzE1NjpcdCAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuMzE1NzpcdCAqL1xuMzE1ODpcdGludCBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChzdHJ1Y3QgcGh5bGluayAqcGwpXG4zMTU5Olx0e1xuMzE2MDpcdFx0aW50IHJldCA9IDA7XG4zMTYxOlx0XG4zMTYyOlx0XHRBU1NFUlRfUlROTCgpO1xuMzE2MzpcdFxuMzE2NDpcdFx0aWYgKHBsLVx1MDAzZXBoeWRldilcbjMxNjU6XHRcdFx0cmV0ID0gcGh5X3Jlc3RhcnRfYW5lZyhwbC1cdTAwM2VwaHlkZXYpO1xuMzE2NjpcdFx0cGh5bGlua19wY3NfYW5fcmVzdGFydChwbCk7XG4zMTY3Olx0XG4zMTY4Olx0XHRyZXR1cm4gcmV0O1xuMzE2OTpcdH1cbjMxNzA6XHRFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCk7XG4zMTcxOlx0XG4zMTcyOlx0LyoqXG4zMTczOlx0ICogcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKCkgLSBnZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xuMzE3NDpcdCAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4zMTc1Olx0ICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtXG4zMTc2Olx0ICovXG4zMTc3Olx0dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuMzE3ODpcdFx0XHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxuMzE3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgUEhZIEludGVyZmFjZSBNb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaW50ZXJmYWNlIG1vZGUgaGFuZGxpbmcgYW5kIGl0IHNlZW1zIHRoZSBpbnRlcmZhY2UgbW9kZSBpc24mIzM5O3QgZGlyZWN0bHkgc2V0IGJ5IGBrc2V0YC4gSXQmIzM5O3MgZWl0aGVyIGxlZnQgYXMgaXMgb3Igc2VsZWN0ZWQgdGhyb3VnaCBgcGh5bGlua19zZnBfc2VsZWN0X2ludGVyZmFjZWAgaWYgdGhlIGBwbC0mZ3Q7c2ZwX2J1c2AgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCB0aGUgaGFyZHdhcmUgb3IgdGhlIGRldmljZSB0cmVlIGlzIHNldHRpbmcgdGhlIGludGVyZmFjZSBtb2RlLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGNvbWVzIGludG8gcGxheS4gU2luY2UgaXQmIzM5O3Mgb25seSB1c2VkIGJ5IHRoZSBgcWNhODA3eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBoeXNpY2FsIFBIWSBkcml2ZXIsIGl0IHNob3VsZG4mIzM5O3QgYmUgcG9zc2libGUgdG8gaGl0IHRoaXMgY29kZSBwYXRoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpCdXQgd2FpdCwgY2FuIGBwaHlsaW5rX2NyZWF0ZWAgZXZlbiBiZSBjYWxsZWQgd2l0aCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWA/IExldCBtZSBzZWXigKYgaXQgdGFrZXMgYSBgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWdgLiBUaGUgaW50ZXJmYWNlIG1vZGUgaXNuJiMzOTt0IGEgZGlyZWN0IGFyZ3VtZW50IGJ1dCBpcyBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9yIGRldmljZSB0cmVlLiBUaW1lIHRvIGNoZWNrIGZvciBhbnkgdmlydHVhbCBkcml2ZXJzIHRoYXQgdXNlIGBwaHlsaW5rYC4gV2UgYWxyZWFkeSBrbm93IGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAgdXNlcyBgbGFuNzh4eGAgKFVTQikuIE9rYXksIGJ1dCBkb2VzIGBsYW43OHh4YCB1c2UgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBOb3BlLiBBbmQgYXJlIHRoZXJlIGFueSBvdGhlcnM/IEkgYWxyZWFkeSBkaWQgYSBncmVwIGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgYW5kIGl0IG9ubHkgc2hvd3MgdXAgaW4gYHBoeS1jb3JlLmNgLCBgcGh5X2NhcHMuY2AsIGBwaHlsaW5rLmNgLCBgcWNhODA3eC5jYCwgYW5kIGBwaHkuaGAuIFNvIG5vIG5ldHdvcmsgZHJpdmVycyB1c2UgaXQgZGlyZWN0bHkuIEl04oCZcyBvbmx5IGluIHRoZSBgcWNhODA3eGAgUEhZIGRyaXZlci4KClRoZSBgcWNhODA3eGAgZHJpdmVyIGlzIGZvciBRdWFsY29tbSBRQ0E4MDd4IFBIWXMuIElzIGl0IGV2ZW4gKnBvc3NpYmxlKiB0byBpbnN0YW50aWF0ZSB0aGlzIFBIWSBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQW5kIGhvdyB3b3VsZCBmdXp6aW5nIHdvcms/IFN5emthbGxlciBjYW4gZnV6eiBQSFkgZHJpdmVycyAqaWYqIHRoZXkmIzM5O3JlIGF0dGFjaGVkIHRvIGEgdmlydHVhbCBNRElPIGJ1cy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzdXBwb3J0IGZvciBNRElPIGZ1enppbmc/IE5vLCBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgdmlydHVhbCBNRElPIGJ1cyBkcml2ZXIgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWXMuIEV2ZW4gaWYgaXQgZGlkLCB0aGUgcHJvcG9zZWQgY2hhbmdlIGhlcmUgaXMgcHJldHR5IG1pbm9yIOKAkyBpdCBqdXN0IGFkZHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIHRvIGEgc3dpdGNoIHN0YXRlbWVudCB0byByZXR1cm4gYElOQkFORF9DSVNDT19TR01JSWAgaW5zdGVhZCBvZiBgSU5CQU5EX05PTkVgLiBJdOKAmXMgZnVuY3Rpb25hbGx5IGEgc21hbGwgY2hhbmdlLgoKSWYgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCByZXR1cm5zIGBJTkJBTkRfQ0lTQ09fU0dNSUlgLCBpdCYjMzk7cyBnb2luZyB0byBhZmZlY3QgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gU28sIEkgbmVlZCB0byBsb29rIGludG8gYHBoeWxpbmtfcGNzX25lZ19tb2RlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDkwOlx0c3RhdGljIHZvaWQgcGh5bGlua19wY3NfbmVnX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbjEwOTE6XHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuMTA5MjpcdFx0XHRcdFx0IGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nKVxuMTA5MzpcdHtcbjEwOTQ6XHRcdHVuc2lnbmVkIGludCBwY3NfaWJfY2FwcyA9IDA7XG4xMDk1Olx0XHR1bnNpZ25lZCBpbnQgcGh5X2liX2NhcHMgPSAwO1xuMTA5NjpcdFx0dW5zaWduZWQgaW50IG5lZ19tb2RlLCBtb2RlO1xuMTA5NzpcdFx0ZW51bSBpbmJhbmRfdHlwZSB0eXBlO1xuMTA5ODpcdFxuMTA5OTpcdFx0dHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XG4xMTAwOlx0XHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xuMTEwMTpcdFx0XHRwbC1cdTAwM2VwY3NfbmVnX21vZGUgPSBQSFlMSU5LX1BDU19ORUdfTk9ORTtcbjExMDI6XHRcdFx0cGwtXHUwMDNlYWN0X2xpbmtfYW5fbW9kZSA9IHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGU7XG4xMTAzOlx0XHRcdHJldHVybjtcbjExMDQ6XHRcdH1cbjExMDU6XHRcbjExMDY6XHRcdG1vZGUgPSBwbC1cdTAwM2VyZXFfbGlua19hbl9tb2RlO1xuMTEwNzpcdFxuMTEwODpcdFx0cGwtXHUwMDNlcGh5X2liX21vZGUgPSAwO1xuMTEwOTpcdFxuMTExMDpcdFx0aWYgKHBjcylcbjExMTE6XHRcdFx0cGNzX2liX2NhcHMgPSBwaHlsaW5rX3Bjc19pbmJhbmRfY2FwcyhwY3MsIGludGVyZmFjZSk7XG4xMTEyOlx0XG4xMTEzOlx0XHRpZiAocGwtXHUwMDNlcGh5ZGV2KVxuMTExNDpcdFx0XHRwaHlfaWJfY2FwcyA9IHBoeV9pbmJhbmRfY2FwcyhwbC1cdTAwM2VwaHlkZXYsIGludGVyZmFjZSk7XG4xMTE1Olx0XG4xMTE2Olx0XHRwaHlsaW5rX2RiZyhwbCwgXCYjMzQ7aW50ZXJmYWNlICVzIGluYmFuZCBtb2RlczogcGNzPSUwMnggcGh5PSUwMnhcXG5cJiMzNDssXG4xMTE3Olx0XHRcdCAgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSwgcGNzX2liX2NhcHMsIHBoeV9pYl9jYXBzKTtcbjExMTg6XHRcbjExMTk6XHRcdGlmICghcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSkge1xuMTEyMDpcdFx0XHRib29sIHBjc19pYl9vbmx5ID0gZmFsc2U7XG4xMTIxOlx0XHRcdGJvb2wgcGh5X2liX29ubHkgPSBmYWxzZTtcbjExMjI6XHRcbjExMjM6XHRcdFx0aWYgKHBjc19pYl9jYXBzIFx1MDAyNlx1MDAyNiBwY3NfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XG4xMTI0Olx0XHRcdFx0LyogUENTIHN1cHBvcnRzIHJlcG9ydGluZyBpbi1iYW5kIGNhcGFiaWxpdGllcywgYW5kXG4xMTI1Olx0XHRcdFx0ICogc3VwcG9ydHMgbW9yZSB0aGFuIGRpc2FibGUgbW9kZS5cbjExMjY6XHRcdFx0XHQgKi9cbjExMjc6XHRcdFx0XHRpZiAocGNzX2liX2NhcHMgXHUwMDI2IExJTktfSU5CQU5EX0RJU0FCTEUpXG4xMTI4Olx0XHRcdFx0XHRuZWdfbW9kZSA9IFBIWUxJTktfUENTX05FR19PVVRCQU5EO1xuMTEyOTpcdFx0XHRcdGVsc2UgaWYgKHBjc19pYl9jYXBzIFx1MDAyNiBMSU5LX0lOQkFORF9FTkFCTEUpXG4xMTMwOlx0XHRcdFx0XHRwY3NfaWJfb25seSA9IHRydWU7XG4xMTMxOlx0XHRcdH1cbjExMzI6XHRcbjExMzM6XHRcdFx0aWYgKHBoeV9pYl9jYXBzIFx1MDAyNlx1MDAyNiBwaHlfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XG4xMTM0Olx0XHRcdFx0LyogUEhZIHN1cHBvcnRzIGluLWJhbmQgY2FwYWJpbGl0aWVzLCBhbmQgc3VwcG9ydHNcbjExMzU6XHRcdFx0XHQgKiBtb3JlIHRoYW4gZGlzYWJsZSBtb2RlLlxuMTEzNjpcdFx0XHRcdCAqL1xuMTEzNzpcdFx0XHRcdGlmIChwaHlfaWJfY2FwcyBcdTAwMjYgTElOS19JTkJBTkRfRElTQUJMRSlcbjExMzg6XHRcdFx0XHRcdHBsLVx1MDAzZXBoeV9pYl9tb2RlID0gTElOS19JTkJBTkRfRElTQUJMRTtcbjExMzk6XHRcdFx0XHRlbHNlIGlmIChwaHlfaWJfY2FwcyBcdTAwMjYgTElOS19JTkJBTkRfQllQQVNTKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM2OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgSW1wYWN0IG9mIGEgUmVjZW50IENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBkaWZmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgLSBqdXN0IGFkZGluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhhdCBzd2l0Y2ggc3RhdGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7bWVoLCBub3Qgd29ydGggZnV6emluZy4mIzM0OyBJdCBsb29rcyBsaWtlIHRoaXMgc3BlY2lmaWMgbW9kZSBpcyBvbmx5IHJlbGV2YW50IHRvIHRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciwgYW5kIHRoZXJlJiMzOTtzIG5vIHdheSBpbiBoZWxsIEkmIzM5O20gZ29pbmcgdG8gc2VlIHRoYXQgaGFyZHdhcmUgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgY29kZSBwYXRoIGp1c3QgaXNuJiMzOTt0IHJlYWNoYWJsZSB3aXRob3V0IGl0LiBJdCBzZWVtcyBsaWtlIGEgZGVhZCBlbmQgZm9yIG5vdy4KCldhaXQgYSBzZWNvbmQgdGhvdWdoLi4uIGlzIGl0ICphY3R1YWxseSogdGhhdCBzaW1wbGU/IENhbiBJIGZvcmNlIHRoZSBpbnRlcmZhY2UgbW9kZSB0byBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdGhyb3VnaCBuZXRsaW5rIG9yIGJ5IHBsYXlpbmcgd2l0aCBzeXNmcz8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gSWYgSSAqY2FuKiBjb250cm9sIGl0IGZyb20gdXNlcnNwYWNlLCBldmVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbnQsIHRoZW4gdGhpcyBiZWNvbWVzIGZ1enphYmxlLCBhbmQgSSBzaG91bGQgcmVhbGx5IGNoZWNrLiBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIG1vZGUgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBzb21laG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NzAKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgTW9kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnRlcmZhY2UgbW9kZSwgYnV0IEkmIzM5O20gZHJhd2luZyBhIGJsYW5rIGluIGBuZXQvYC4gSSB2YWd1ZWx5IHJlY2FsbCBjaGVja2luZyBgZHJpdmVycy9uZXQvYCBwcmV2aW91c2x5LCBzcGVjaWZpY2FsbHkgdGhvc2UgcGh5LXJlbGF0ZWQgZmlsZXMg4oCTIGBwaHktY29yZS5jYCwgYHBoeV9jYXBzLmNgLCBgcGh5bGluay5jYCwgYW5kIGBxY2E4MDd4LmNgLiBNeSBlYXJsaWVyIGV4YW1pbmF0aW9uIGNvbmZpcm1zIHRoYXQgdGhlIGludGVyZmFjZSBtb2RlIGlzbiYjMzk7dCBiZWluZyBzZXQgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIHRoZSBrZXkgdGFrZWF3YXkuIEl0JiMzOTtzIGRpY3RhdGVkIGVpdGhlciBieSB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvciB0aGUgZGV2aWNlIHRyZWUuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWxpemF0aW9uIHdvcmtzIOKAkyBzcGVjaWZpY2FsbHkgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUg4oCTIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZS4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHRyaWdnZXIgdGhlIGNvbmRpdGlvbnMgSSYjMzk7bSB0cnlpbmcgdG8gYW5hbHl6ZS4KCkkmIzM5O3ZlIGdvdCB0byBjb25jbHVkZSB0aGlzIGlzIG5vdCBhIGZydWl0ZnVsIGF2ZW51ZSBmb3IgZnV6emluZywgYW5kIEkgd2lsbCBiZSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlLiBUaGlzIGludGVyZmFjZSBtb2RlIGlzIG9ubHkgdXNlZCBieSB0aGUgUXVhbGNvbW0gUUNBODA3eCBwaHlzaWNhbCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIHZpcnR1YWxpemVkIG5ldHdvcmsgZHJpdmVycy4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NDIuNTE2MTkxMjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNzc1MTMxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUuIFRoaXMgaW50ZXJmYWNlIG1vZGUgaXMgb25seSB1c2VkIGJ5IHRoZSBRdWFsY29tbSBRQ0E4MDd4IHBoeXNpY2FsIFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYykgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgdmlydHVhbGl6ZWQgbmV0d29yayBkcml2ZXJzLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NDIuNTE2MTk2NjMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc3MjY2NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmE5NGIyZTFhNGU0ODM1OTM4ZDA1ZjAwNTYzMWZhNjlmNzc0NjYzMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyA4IDAyOjQ5OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuaW5kZXggMThkMmVhZDk3YWE1NC4uOTgzYTFhM2NlZTM3NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xcbkBAIC0xMDQwLDYgKzEwNDAsNyBAQCBzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbiB7XFxuIFxcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbitcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NDMuNzk0MDc0NzUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTk4OTk2MTY1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTk0YjJlMWE0ZTQ4MzU5MzhkMDVmMDA1NjMxZmE2OWY3NzQ2NjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwMjo0OTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCAxOGQyZWFkOTdhYTU0Li45ODNhMWEzY2VlMzc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTEwNDAsNiArMTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuIFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo0My43OTQwNzU4OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2OTk0ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkFuYWx5emluZyBhIFBIWSBJbnRlcmZhY2UgTW9kZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCwgYW5kIGl0IHNlZW1zIHRvIGhhdmUgdG91Y2hlZCB0aGUgYHBoeWxpbmsuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5LiBUaGUgbW9kaWZpY2F0aW9uIGlzIGFkZGluZyBzdXBwb3J0IGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgd2l0aGluIHRoZSBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIGZ1bmN0aW9uLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBpdCBtZWFucyBzb21lb25lJ3MgaW50cm9kdWNpbmcgb3IgZW5hYmxpbmcgc3VwcG9ydCBmb3IgYSBzcGVjaWZpYyBQSFkgaW50ZXJmYWNlIG1vZGUsIFBTR01JSSwgd2l0aGluIHRoZSBwaHlsaW5rIGZyYW1ld29yay4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbmV3IG1vZGUgaXMgYmVpbmcgaGFuZGxlZC4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgc2VlbXMgd2UgYXJlIHN1cHBvcnRpbmcgc29tZSBuZXcgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjQ5OjQ2LjkzMTA3MzE3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MTk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2dldF9pbmJhbmRfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzMz1lbnVtIGluYmFuZF90eXBlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTAzOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwMzk6c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDkwPXN0YXRpYyB2b2lkIHBoeWxpbmtfcGNzX25lZ19tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwOTgtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDk5OlxcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTEwMC1cXHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU2PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzgwNzpcXHRpbmJhbmRfdHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVxcdGlmIChpbmJhbmRfdHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo0Ni45NzUyMzg2MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgwMTgxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBQSFlMaW5rIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHJlbGF0aXZlbHkgbWlub3Igb25lLCBmb2N1c2luZyBvbiBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB1cGRhdGluZyBhIHN3aXRjaCBzdGF0ZW1lbnQuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIGFkZGl0aW9uIG9mIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0byB0aGUgaW50ZXJmYWNlIGxpc3QuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgaW50ZW50IGlzIHRvIG5vdyBoYXZlIHRoaXMgaW50ZXJmYWNlIHJldHVybiBgSU5CQU5EX1NHTUlJYCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBgSU5CQU5EX05PTkVgLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgcmVhbGx5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoYXQgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdOKAmXMgc3RydWN0dXJlZCBhbmQgd2hhdCBvdGhlciBpbnRlcmZhY2VzIGFyZSBjdXJyZW50bHkgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgbG9naWMgd2lsbCBiZSBjcnVjaWFsIHRvIGZ1bGx5IGFwcHJlY2lhdGluZyB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBjaGFuZ2UgYW5kIGNvbmZpcm1pbmcgaXTigJlzIHRoZSBjb3JyZWN0IGNvdXJzZSBvZiBhY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBhZGRpdGlvbiBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBQSFlMaW5rIGFyY2hpdGVjdHVyZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NTAuNjU1NDIzMTIzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzOTpcXHRzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbjEwNDA6XFx0e1xcbjEwNDE6XFx0XFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4xMDQyOlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbjEwNDM6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbjEwNDQ6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbjEwNDU6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcXG4xMDQ2OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XFxuMTA0NzpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdfUVhHTUlJOlxcbjEwNDg6XFx0XFx0XFx0LyogVGhlc2UgcHJvdG9jb2xzIGFyZSBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYSBQSFkgd2hpY2hcXG4xMDQ5OlxcdFxcdFxcdCAqIGNvbW11bmljYXRlcyBpdHMgbmVnb3RpYXRpb24gcmVzdWx0IGJhY2sgdG8gdGhlIE1BQyB2aWFcXG4xMDUwOlxcdFxcdFxcdCAqIGluYmFuZCBjb21tdW5pY2F0aW9uLiBOb3RlOiB0aGVyZSBleGlzdCBQSFlzIHRoYXQgcnVuXFxuMTA1MTpcXHRcXHRcXHQgKiB3aXRoIFNHTUlJIGJ1dCBkbyBub3Qgc2VuZCB0aGUgaW5iYW5kIGRhdGEuXFxuMTA1MjpcXHRcXHRcXHQgKi9cXG4xMDUzOlxcdFxcdFxcdHJldHVybiBJTkJBTkRfQ0lTQ09fU0dNSUk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcXG4xMDU2OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4xMDU3OlxcdFxcdFxcdC8qIDEwMDBiYXNlLVggaXMgZGVzaWduZWQgZm9yIHVzZSBtZWRpYS1zaWRlIGZvciBGaWJyZVxcbjEwNTg6XFx0XFx0XFx0ICogY29ubmVjdGlvbnMsIGFuZCB0aHVzIHRoZSBBdXRvbmVnIGJpdCBuZWVkcyB0byBiZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo1MC42NTU2MDQyMDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEwNzE2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBTbWFsbCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIOKAkyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIGNvbnN0YW50IHdpdGhpbiBhIGBzd2l0Y2hgIHN0YXRlbWVudC4gU2VlbXMgdHJpdmlhbCwgZG9lc24ndCBpdD8gQnV0LCBhcyBhbHdheXMsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIElzIGl0IHdvcnRoIHB1dHRpbmcgaXQgdGhyb3VnaCBmdXp6aW5nP1xuXG5UaGUgY2hhbmdlIGltcGFjdHMgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gSSBpbW1lZGlhdGVseSB0aGluayBcIm5ldHdvcmsgUEhZIGxpbmsgbWFuYWdlbWVudCxcIiB3aGljaCBvZnRlbiBtZWFucyBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHZlcnkgc3BlY2lmaWMgc2V0dXBzLiBTRlAgbW9kdWxlcywgUEhZcy4uLiB0aGF0J3MgdGhlIHVzdWFsIHRlcnJpdG9yeS4gVGhlIGNvbm5lY3Rpb25zIGFyZSBgcGh5bGlua19tYWpvcl9jb25maWdgIGFuZCBgcGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydGAuXG5cbk15IGluaXRpYWwgZ3V0IHJlYWN0aW9uIGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzP1wiIFN5emthbGxlciBpcyBncmVhdCB3aXRoIHRoaW5ncyBsaWtlIG5ldGxpbmsgaW50ZXJmYWNlcywgYnV0IGEgbG90IG9mIFBIWSBsaW5rIG1hbmFnZW1lbnQgSSd2ZSBkZWFsdCB3aXRoIGlzIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBldmVudHMgb3IgZXRodG9vbCBjb21tYW5kcy4gSXQncyBub3QgdXN1YWxseSBhIGRpcmVjdCB1c2VyLXNwYWNlIHRoaW5nLiBUaGUgcXVlc3Rpb24gaXMgaWYgdGhlcmUncyBhbnkgdXNlci1zcGFjZSBwYXRoIHRvIHRoaXMuIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAgaXMgY2FsbGVkIGZyb20gYHBoeWxpbmtfbWFqb3JfY29uZmlnYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBwaHlsaW5rX21ham9yX2NvbmZpZ2AgaXMgY2FsbGVkLCBhbmQgZnJvbSB3aGVyZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NTUuMTY2MzIzMDQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzIxNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfbWFqb3JfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDkwPXN0YXRpYyB2b2lkIHBoeWxpbmtfcGNzX25lZ19tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEyMzktXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMjQwOnN0YXRpYyB2b2lkIHBoeWxpbmtfbWFqb3JfY29uZmlnKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCByZXN0YXJ0LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTI0MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xNDU1PXN0YXRpYyB2b2lkIHBoeWxpbmtfbWFjX2luaXRpYWxfY29uZmlnKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBmb3JjZV9yZXN0YXJ0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNDgzLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnBoeS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxNDg0OlxcdHBoeWxpbmtfbWFqb3JfY29uZmlnKHBsLCBmb3JjZV9yZXN0YXJ0LCBcXHUwMDI2bGlua19zdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNDg1LVxcdGlmIChwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE2MTY9c3RhdGljIHZvaWQgcGh5bGlua19yZXNvbHZlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTcwNi1cXHRcXHR9XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxNzA3OlxcdFxcdHBoeWxpbmtfbWFqb3JfY29uZmlnKHBsLCBmYWxzZSwgXFx1MDAyNmxpbmtfc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTcwOC1cXHRcXHRwbC1cXHUwMDNlbGlua19jb25maWcuaW50ZXJmYWNlID0gbGlua19zdGF0ZS5pbnRlcmZhY2U7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5ODI9aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzEzMi1cXHRcXHRcXHQgICAgICBcXHUwMDI2cGwtXFx1MDAzZXBoeWxpbmtfZGlzYWJsZV9zdGF0ZSkpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMTMzOlxcdFxcdFxcdHBoeWxpbmtfbWFqb3JfY29uZmlnKHBsLCBmYWxzZSwgXFx1MDAyNmNvbmZpZyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTM0LVxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBjb25maWcuaW50ZXJmYWNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo1NS4yMDk2NDcyOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyNzQzMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGZ1bmN0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyBhYm91dCBob3cgb25lIGludGVyYWN0cyB3aXRoIGl0LiBDYW4gaXQgYmUgcmVhY2hlZCB2aWEgYGV0aHRvb2xgPyBZZXAsIGl0IGxvb2tzIGxpa2UgdGhhdCdzIHRoZSBwYXRoLiBCdXQgaGVyZSdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgY2FsbCBwYXRoIGhhdmUgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBJcyBpdCBvbmx5IHJlbGV2YW50IHRvIHZlcnkgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zP1xuXG5EaWdnaW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgYnkgZHJpdmVycyB0aGF0IHV0aWxpemUgdGhlIHBoeWxpbmsgZnJhbWV3b3JrLiBOb3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGluIHRoZSBjb250ZXh0IG9mIGZ1enppbmcuIFN5emthbGxlciBoYXMgYSBidW5jaCBvZiB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVycyDigJMgYHZldGhgLCBgdHVuYCwgYG1hY3NlY2AsIHRoaW5ncyBsaWtlIHRoYXQuIFRoZSBrZXkgbm93IGlzOiBhcmUgYW55IG9mIHRob3NlIHZpcnR1YWwgZHJpdmVycyBhY3R1YWxseSB1c2luZyBgcGh5bGlua2A/IElmIHNvLCB0aGlzIGJlY29tZXMgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBmb3IgdGVzdGluZyBhbmQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo1OC43NzIzOTIxMDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzg5MjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfZXRodG9vbC5jPTIyND1zdGF0aWMgaW50IHRzZV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfZXRodG9vbC5jLTIyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9ldGh0b29sLmM6MjI5OlxcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChwcml2LVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX2V0aHRvb2wuYy0yMzAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz00NzI9c3RhdGljIGludCBhZzcxeHhfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy00NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo0Nzc6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KGFnLVxcdTAwM2VwaHlsaW5rLCBrc2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTQ3OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTM2OTA9c3RhdGljIGludCBtYWNiX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zNjk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzY5NTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoYnAtXFx1MDAzZXBoeWxpbmssIGtzZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzY5Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aHRvb2wuYz02NT1zdGF0aWMgaW50IGRwYWFfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmMtNzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmM6NzE6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KG1hY19kZXYtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmMtNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYz0xMjc9ZHBhYTJfZXRoX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMTM1LVxcdGlmIChkcGFhMl9ldGhfaXNfdHlwZV9waHkocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYzoxMzY6XFx0XFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocHJpdi1cXHUwMDNlbWFjLVxcdTAwM2VwaHlsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMTM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rX3NldHRpbmdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2gtZXRodG9vbC5jPTEwMD1kcGFhMl9zd2l0Y2hfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLWV0aHRvb2wuYy0xMTEtXFx0aWYgKGRwYWEyX3N3aXRjaF9wb3J0X2lzX3R5cGVfcGh5KHBvcnRfcHJpdikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLWV0aHRvb2wuYzoxMTI6XFx0XFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydF9wcml2LVxcdTAwM2VtYWMtXFx1MDAzZXBoeWxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC1ldGh0b29sLmMtMTEzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rX2tzZXR0aW5ncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jPTEyNzc9c3RhdGljIGludCBlbmV0Y19zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMtMTI4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jOjEyODU6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHByaXYtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYy0xMjg2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jPTc5Nj1zdGF0aWMgaW50IGZzX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy04MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM6ODAxOlxcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChmZXAtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtODAyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aF9ldGh0b29sLmM9MTEyPXVlY19zZXRfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGhfZXRodG9vbC5jLTExNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGhfZXRodG9vbC5jOjExNzpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodWdldGgtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoX2V0aHRvb2wuYy0xMTgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz00NzAwPW12bmV0YV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNDcwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjQ3MDU6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNDcwNi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz01NTg1PXN0YXRpYyBpbnQgbXZwcDJfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTU1OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM6NTU5MzpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydC1cXHUwMDNlcGh5bGluaywgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy01NTk0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfZXRodG9vbC5jPTY0Nj1wcmVzdGVyYV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ldGh0b29sLmMtNjU0LVxcdGlmIChwb3J0LVxcdTAwM2VwaHlfbGluaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2V0aHRvb2wuYzo2NTU6XFx0XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXFx1MDAzZXBoeV9saW5rLCBlY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2V0aHRvb2wuYy02NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTQ1NDc9c3RhdGljIGludCBtdGtfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy00NTU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6NDU1NTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQobWFjLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtNDU1Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmM9MTA5MD1sYW43NDN4X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmMtMTA5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmM6MTA5NTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoYWRhcHRlci1cXHUwMDNlcGh5bGluaywgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmMtMTA5Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYz01MTY9c3RhdGljIGludCBsYW45NjZ4X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfZXRodG9vbC5jLTUyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYzo1MjE6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9ldGh0b29sLmMtNTIyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYz0xMTUxPXN0YXRpYyBpbnQgc3Bhcng1X3NldF9saW5rX3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfZXRodG9vbC5jLTExNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfZXRodG9vbC5jOjExNTY6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfZXRodG9vbC5jLTExNTctfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zMjk9c3RtbWFjX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTMzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjMzNDpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocHJpdi1cXHUwMDNlcGh5bGluaywgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTMzNS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jPTUwNT1hbTY1X2Nwc3dfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LWV0aHRvb2wuYy01MDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LWV0aHRvb2wuYzo1MTA6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHNhbHZlLVxcdTAwM2VwaHlsaW5rLCBlY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jLTUxMS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz0yNTY9aW50IHd4X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtMjYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjI2MTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQod3gtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtMjYyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmM9MjI5MT1heGllbmV0X2V0aHRvb2xzX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMjI5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jOjIyOTY6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KGxwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMjI5Ny19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NTc9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTc3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk3ODogKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTc5LSAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk4MjppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTQ0LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMxNDU6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTg2MT1zdGF0aWMgaW50IGxhbjc4eHhfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE4NjUtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxODY2OlxcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChkZXYtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xODY3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NTguOTAwMjkwNjY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTUyMTcwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIE5ldHdvcmsgRHJpdmVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IG1ha2luZyB0aGUgY29ubmVjdGlvbiDigJMgdGhpcyBgbGFuNzh4eGAgZHJpdmVyIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCByaWdodD8gQW5kIHdlIGtub3cgU3l6a2FsbGVyIGNhbiBmdXp6IFVTQiBkcml2ZXJzLCBib3RoIHRocm91Z2ggdGhlIGBkdW1teV9oY2RgIGFuZCByYXcgZ2FkZ2V0IGFwcHJvYWNoZXMuIFRoYXQgbWVhbnMgd2UgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGluc3RhbnRpYXRlIHRoaXMgYGxhbjc4eHhgIGRyaXZlciBhbmQgc3RhcnQgZXhlcmNpc2luZyBpdHMgZXRodG9vbCBvcGVyYXRpb25zLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lcywgZG9lcyB0aGlzIGRyaXZlciB1dGlsaXplIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MDIuNjU1NTA5OTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczMTkwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDowMi43MDIyNDY2OTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0OTcwNjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIFVzYWdlKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgcHJldHR5IGNsZWFyOiB0aGUgYGxhbjc4eHhgIGRyaXZlciAqZG9lc24ndCogdXNlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gVGhhdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gaW52ZXN0aWdhdGUgKndoZXJlKiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgKmlzKiBhY3R1YWxseSBlbXBsb3llZCBpbiB0aGUga2VybmVsJ3MgRXRoZXJuZXQgZHJpdmVyIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJlbGV2YW5jZS4gSSdsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBhbGwgaW5zdGFuY2VzIG9mIHRoYXQgbWFjcm8gd2l0aGluIHRoZSByZWxldmFudCBkcml2ZXIgc291cmNlIGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMuIEZyb20gdGhlcmUsIEknbGwgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggZGV2aWNlcyBvciBjaGlwc2V0cyBsZXZlcmFnZSB0aGlzIGludGVyZmFjZSBtb2RlIGFuZCB3aHkuIEtub3dpbmcgdGhlIHNwZWNpZmljIGRldmljZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBpdHMgY2hhcmFjdGVyaXN0aWNzIGFuZCBjYXBhYmlsaXRpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBmdWxsZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MDUuODUxOTU1NTAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0NTUwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAxLVxcdFxcdHJldHVybiA0O1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjIwMjpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAzLVxcdFxcdHJldHVybiA1O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Mjk0PXVuc2lnbmVkIGxvbmcgcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOD1zdGF0aWMgaW50IHBoeWxpbmtfaW50ZXJmYWNlX21heF9zcGVlZChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTktXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Nzc0PXN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODA4LVxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6ODA5OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgxMC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzk9c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0Mi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0NC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NDkwPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTQ5LVxcdFxcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUwOlxcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJKSkpXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NTItXFx0XFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1ODY6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODctXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MDUuOTgyNDE0OTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDA4OTUwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB1c2VkIHdpdGhpbiB0aGUgYHFjYTgwN3guY2AgZmlsZSwgd2hpY2ggaXMgYSBRdWFsY29tbSBQSFkgZHJpdmVyIGluIHRoZSBuZXR3b3JrIGRyaXZlciBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBwYXJ0aWN1bGFyIGludGVyZmFjZSBtb2RlIGV4Y2x1c2l2ZWx5IGZvciBwaHlzaWNhbCBpbnRlcmZhY2VzLCBvciBjb3VsZCBpdCBwb3RlbnRpYWxseSBiZSB1c2VkIGluIGEgdmlydHVhbCBkcml2ZXIgY29udGV4dCBhcyB3ZWxsPyBUaGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGtub3cuIFRvIGFuc3dlciB0aGlzLCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgdXNhZ2UgcGF0dGVybi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIGFueSBvdGhlciBkcml2ZXJzLCB2aXJ0dWFsIG9yIG90aGVyd2lzZSwgYXJlIGFjdHVhbGx5IGVtcGxveWluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgYXBwbGljYXRpb24gYmVmb3JlIG1ha2luZyBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjA5LjgyMzMxMjEyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjU3NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD0yMzg9U29tZSBvZiB0aGUgaW50ZXJmYWNlIG1vZGVzIGFyZSBkZXNjcmliZWQgYmVsb3c6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zMjUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6MzI2OmBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWBgXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzI3LSAgICBUaGlzIGlzIHRoZSBQZW50YSBTR01JSSBtb2RlLCBpdCBpcyBzaW1pbGFyIHRvIFFTR01JSSBidXQgaXQgY29tYmluZXMgNVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAxLVxcdFxcdHJldHVybiA0O1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjIwMjpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAzLVxcdFxcdHJldHVybiA1O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Mjk0PXVuc2lnbmVkIGxvbmcgcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOD1zdGF0aWMgaW50IHBoeWxpbmtfaW50ZXJmYWNlX21heF9zcGVlZChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTktXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Nzc0PXN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODA4LVxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6ODA5OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgxMC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzk9c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0Mi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0NC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NDkwPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTQ5LVxcdFxcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUwOlxcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJKSkpXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NTItXFx0XFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1ODY6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODctXFx0ZGVmYXVsdDpcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9NTM9ZXh0ZXJuIGNvbnN0IGludCBwaHlfYmFzaWNfcG9ydHNfYXJyYXlbM107XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTg5LSAqIEBQSFlfSU5URVJGQUNFX01PREVfTU9DQTogTXVsdGltZWRpYSBvdmVyIENvYXhcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjkwOiAqIEBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOiBQZW50YSBTR01JSVxcbmluY2x1ZGUvbGludXgvcGh5LmgtOTEtICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6IFF1YWQgU0dNSUlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MTE0PXR5cGVkZWYgZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzMi1cXHRQSFlfSU5URVJGQUNFX01PREVfTU9DQSxcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjEzMzpcXHRQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJLFxcbmluY2x1ZGUvbGludXgvcGh5LmgtMTM0LVxcdFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxMD1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBoeV9tb2RlcyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yNDgtXFx0XFx0cmV0dXJuIFxcXCJtb2NhXFxcIjtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjI0OTpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuaW5jbHVkZS9saW51eC9waHkuaC0yNTAtXFx0XFx0cmV0dXJuIFxcXCJwc2dtaWlcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoxMS4zODk4OTIwNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MTA1MzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgdGhhdCB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIG1vZGUgaXMgb25seSB1c2VkIGJ5IHRoZSBgcWNhODA3eC5jYCBkcml2ZXIsIHdoaWNoIGlzIGEgcGh5c2ljYWwgUEhZIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIFFDQTgwN3guIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBkcml2ZXIsIGl0J3MgcHJldHR5IHVubGlrZWx5IHRoYXQgc3l6a2FsbGVyLCBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGlzIGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRoaXMgY29kZSBwYXRoIGRpcmVjdGx5LiBUaGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhc3N1bXB0aW9uLCBpbml0aWFsbHkuXG5cbkJ1dCB3YWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIENvdWxkIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAgYmUgY2FsbGVkIHdpdGggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBJIG5lZWQgdG8gY2hlY2sgdGhhdC4gTGV0IG1lIGxvb2sgY2xvc2VyLiBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIHRha2VzIGEgYGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0YCBhcmd1bWVudC4gTXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBga3NldGAgc3RydWN0dXJlIGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgbW9kZT8gRG9lcyB0aGF0IHN0cnVjdHVyZSBjb250YWluIHRoZSBgUEhZX0lOVEVSRkFDRV9NT0RFYCB2YWx1ZXM/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gYXNjZXJ0YWluLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGlzIGlzIHBvdGVudGlhbGx5IHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGNvdWxkIGJlLCBldmVuIGlmIHRoZSBwcmltYXJ5IGRyaXZlciBpc24ndCBkaXJlY3RseSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoxNS43NjA5NDc0OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjQ0ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yOTU3PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3Ny0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5Nzg6ICogcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoKSAtIHNldCB0aGUgbGluayBzZXR0aW5nc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3OS0gKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4MS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5ODI6aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5ODMtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0NC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMTQ1OkVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjE1LjgwNjU5NDc5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTA3NTc3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCBhZnRlciBhIHF1aWNrIHNjYW4sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGRvbWFpbjpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYW1lIHRlbGxzIG1lIGV4YWN0bHkgd2hhdCB0aGlzIGlzIGFpbWluZyB0byBkby4gSXQncyBhIGtlcm5lbCBmdW5jdGlvbiwgb2J2aW91c2x5LiBgcGh5bGlua2Agc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGNvbnRyb2wsIHZlcnkgbGlrZWx5IGZvY3VzZWQgb24gRXRoZXJuZXQuIFRoZSBcImV0aHRvb2xcIiBpbmNsdXNpb24gaXMga2V5OyBpdCdzIHRoZSBzdGFuZGFyZCB1dGlsaXR5IGZvciBjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMsIHNvIHRoaXMgZnVuY3Rpb24ncyBqb2IgaXMgdG8gdHJhbnNsYXRlIHRob3NlIHVzZXItc3BhY2UgZXRodG9vbCBzZXR0aW5ncyBpbnRvIHNvbWV0aGluZyB0aGUgUEhZIGl0c2VsZiBjYW4gdW5kZXJzdGFuZCBhbmQgdXRpbGl6ZS4gXCJrc2V0dGluZ3NcIiBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhpcyAtIHdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgc2V0dGluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gbWFuaXB1bGF0ZSB0aGUgUEhZIHZpYSB0aGUgcGh5bGluayBmcmFtZXdvcmsuIFRoZSBcInNldFwiIGF0IHRoZSBlbmQgY2xlYXJseSBkZWZpbmVzIHRoaXMgZnVuY3Rpb24gYXMgYSBzZXR0ZXIgLSB3ZSdyZSBjaGFuZ2luZyBzb21ldGhpbmcsIG5vdCByZXRyaWV2aW5nIGl0LlxuXG5JbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFdlJ2xsIGJlIHdvcmtpbmcgd2l0aCB0aGUgcGh5bGluayBvYmplY3QgaXRzZWxmLCBjZXJ0YWlubHkuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIHNldHRpbmdzIGFyZSBiZWluZyB0YXJnZXRlZCwgYW5kIGhvdyB0aGF0IGluZm9ybWF0aW9uIGlzIG1hcHBlZCB0byB0aGUgaW50ZXJuYWwgcmVnaXN0ZXJzIG9yIG1lY2hhbmlzbXMgb2YgdGhlIFBIWSBkcml2ZXIuIExpa2VseSwgdGhlcmUncyBhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCB0aGUgcG9zc2libGUgZXRodG9vbCBjb25maWd1cmF0aW9ucywgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBhbmQgdHJhbnNsYXRpbmcgdGhvc2UgcGFyYW1ldGVycy5cblxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBlcnJvciBjb25kaXRpb25zIOKAkyBpbnZhbGlkIHNldHRpbmdzLCB1bnN1cHBvcnRlZCBmZWF0dXJlcywgaGFyZHdhcmUgbGltaXRhdGlvbnMuIFRoZSBmdW5jdGlvbiBuZWVkcyB0byBoYW5kbGUgdGhvc2UgZ3JhY2VmdWxseSwgcmV0dXJuaW5nIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzIGFuZCBwZXJoYXBzIHByb3ZpZGluZyBkZWJ1ZyBtZXNzYWdlcy4gVGhlcmUncyBhbHNvIHRoZSBxdWVzdGlvbiBvZiBzeW5jaHJvbml6YXRpb247IGlmIHRoaXMgZnVuY3Rpb24gaXMgbW9kaWZ5aW5nIGhhcmR3YXJlIHNldHRpbmdzLCBjb25jdXJyZW50IGFjY2VzcyBmcm9tIG90aGVyIHRocmVhZHMgb3IgaW50ZXJydXB0cyBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gcGxhY2UsIGlmIG5vdCBJIHdvdWxkIGhhdmUgdG8gcmV2aWV3IHRob3NlLlxuXG5UaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IGluZmx1ZW5jaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBBIGZsYXdlZCBpbXBsZW1lbnRhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gZHJvcHBlZCBjb25uZWN0aW9ucywgaW5jb3JyZWN0IGxpbmsgc3BlZWRzLCBvciBldmVuIHN5c3RlbSBpbnN0YWJpbGl0eS4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciB2YWxpZGF0aW9uLCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSBhbnRpY2lwYXRlIGl0IHdpbGwgaW50ZXJmYWNlIHdpdGggdGhlIFBIWSBkcml2ZXIsIGNhbGxpbmcgaXRzIGZ1bmN0aW9ucyBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBMZXQncyBzZWUgaG93IGl0IGFjaGlldmVzIHRoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MjEuOTE0MTc1NDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5ODIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTgyOlxcdGludCBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChzdHJ1Y3QgcGh5bGluayAqcGwsXFxuMjk4MzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxcbjI5ODQ6XFx0e1xcbjI5ODU6XFx0XFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc3VwcG9ydCk7XFxuMjk4NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbGlua19jYXBhYmlsaXRpZXMgKmM7XFxuMjk4NzpcXHRcXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlIGNvbmZpZztcXG4yOTg4OlxcdFxcbjI5ODk6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4yOTkwOlxcdFxcbjI5OTE6XFx0XFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpIHtcXG4yOTkyOlxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIHBoeV9rc2V0ID0gKmtzZXQ7XFxuMjk5MzpcXHRcXG4yOTk0OlxcdFxcdFxcdGxpbmttb2RlX2FuZChwaHlfa3NldC5saW5rX21vZGVzLmFkdmVydGlzaW5nLFxcbjI5OTU6XFx0XFx0XFx0XFx0ICAgICBwaHlfa3NldC5saW5rX21vZGVzLmFkdmVydGlzaW5nLFxcbjI5OTY6XFx0XFx0XFx0XFx0ICAgICBwbC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4yOTk3OlxcdFxcbjI5OTg6XFx0XFx0XFx0LyogV2UgY2FuIHJlbHkgb24gcGh5bGliIGZvciB0aGlzIHVwZGF0ZTsgd2UgYWxzbyBkbyBub3QgbmVlZFxcbjI5OTk6XFx0XFx0XFx0ICogdG8gdXBkYXRlIHRoZSBwbC1cXHUwMDNlbGlua19jb25maWcgc2V0dGluZ3M6XFxuMzAwMDpcXHRcXHRcXHQgKiAtIHRoZSBjb25maWd1cmF0aW9uIHJldHVybmVkIHZpYSBrc2V0dGluZ3NfZ2V0KCkgd2lsbCBjb21lXFxuMzAwMTpcXHRcXHRcXHQgKiAgIGZyb20gcGh5bGliIHdoZW5ldmVyIGEgUEhZIGlzIHByZXNlbnQuXFxuMzAwMjpcXHRcXHRcXHQgKiAtIGxpbmtfY29uZmlnLmludGVyZmFjZSB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIFBIWSBjYWxsaW5nXFxuMzAwMzpcXHRcXHRcXHQgKiAgIGJhY2sgdmlhIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCBhIHN1YnNlcXVlbnQgcmVzb2x2ZS5cXG4zMDA0OlxcdFxcdFxcdCAqIC0gaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24gZm9yIFBIWSBtb2RlIGNvbWVzIGZyb20gdGhlXFxuMzAwNTpcXHRcXHRcXHQgKiAgIGxhc3QgcGh5IHN0YXRlIHVwZGF0ZWQgdmlhIHBoeWxpbmtfcGh5X2NoYW5nZSgpLlxcbjMwMDY6XFx0XFx0XFx0ICogLSBvdGhlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGUuZy4gcGF1c2UgbW9kZXMpIGFyZVxcbjMwMDc6XFx0XFx0XFx0ICogICBwZXJmb3JtZWQgZGlyZWN0bHkgdmlhIHBoeWxpYi5cXG4zMDA4OlxcdFxcdFxcdCAqIC0gaWYgaW4gaW4tYmFuZCBtb2RlIHdpdGggYSBQSFksIHRoZSBsaW5rIGNvbmZpZ3VyYXRpb25cXG4zMDA5OlxcdFxcdFxcdCAqICAgaXMgcGFzc2VkIG9uIHRoZSBsaW5rIGZyb20gdGhlIFBIWSwgYW5kIGFsbCBvZlxcbjMwMTA6XFx0XFx0XFx0ICogICBsaW5rX2NvbmZpZy57c3BlZWQsZHVwbGV4LGFuX2VuYWJsZWQscGF1c2V9IGFyZSBub3QgdXNlZC5cXG4zMDExOlxcdFxcdFxcdCAqIC0gdGhlIG9ubHkgcG9zc2libGUgdXNlIHdvdWxkIGJlIGxpbmtfY29uZmlnLmFkdmVydGlzaW5nXFxuMzAxMjpcXHRcXHRcXHQgKiAgIHBhdXNlIG1vZGVzIHdoZW4gaW4gMTAwMGJhc2UtWCBtb2RlIHdpdGggYSBQSFksIGJ1dCBpblxcbjMwMTM6XFx0XFx0XFx0ICogICB0aGUgcHJlc2VuY2Ugb2YgYSBQSFksIHRoaXMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFzIHRoYXRcXG4zMDE0OlxcdFxcdFxcdCAqICAgc2hvdWxkIGJlIGRldGVybWluZWQgZnJvbSB0aGUgbWVkaWEgc2lkZSBhZHZlcnRpc2VtZW50LlxcbjMwMTU6XFx0XFx0XFx0ICovXFxuMzAxNjpcXHRcXHRcXHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwbC1cXHUwMDNlcGh5ZGV2LCBcXHUwMDI2cGh5X2tzZXQpO1xcbjMwMTc6XFx0XFx0fVxcbjMwMTg6XFx0XFxuMzAxOTpcXHRcXHRjb25maWcgPSBwbC1cXHUwMDNlbGlua19jb25maWc7XFxuMzAyMDpcXHRcXHQvKiBNYXNrIG91dCB1bnN1cHBvcnRlZCBhZHZlcnRpc2VtZW50cyAqL1xcbjMwMjE6XFx0XFx0bGlua21vZGVfYW5kKGNvbmZpZy5hZHZlcnRpc2luZywga3NldC1cXHUwMDNlbGlua19tb2Rlcy5hZHZlcnRpc2luZyxcXG4zMDIyOlxcdFxcdFxcdCAgICAgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuMzAyMzpcXHRcXG4zMDI0OlxcdFxcdC8qIEZJWE1FOiBzaG91bGQgd2UgcmVqZWN0IGF1dG9uZWcgaWYgcGh5L21hYyBkb2VzIG5vdCBzdXBwb3J0IGl0PyAqL1xcbjMwMjU6XFx0XFx0c3dpdGNoIChrc2V0LVxcdTAwM2ViYXNlLmF1dG9uZWcpIHtcXG4zMDI2OlxcdFxcdGNhc2UgQVVUT05FR19ESVNBQkxFOlxcbjMwMjc6XFx0XFx0XFx0LyogQXV0b25lZ290aWF0aW9uIGRpc2FibGVkLCBzZWxlY3QgYSBzdWl0YWJsZSBzcGVlZCBhbmRcXG4zMDI4OlxcdFxcdFxcdCAqIGR1cGxleC5cXG4zMDI5OlxcdFxcdFxcdCAqL1xcbjMwMzA6XFx0XFx0XFx0YyA9IHBoeV9jYXBzX2xvb2t1cChrc2V0LVxcdTAwM2ViYXNlLnNwZWVkLCBrc2V0LVxcdTAwM2ViYXNlLmR1cGxleCxcXG4zMDMxOlxcdFxcdFxcdFxcdFxcdCAgICBwbC1cXHUwMDNlc3VwcG9ydGVkLCBmYWxzZSk7XFxuMzAzMjpcXHRcXHRcXHRpZiAoIWMpXFxuMzAzMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDM0OlxcdFxcbjMwMzU6XFx0XFx0XFx0LyogSWYgd2UgaGF2ZSBhIGZpeGVkIGxpbmssIHJlZnVzZSB0byBjaGFuZ2UgbGluayBwYXJhbWV0ZXJzLlxcbjMwMzY6XFx0XFx0XFx0ICogSWYgdGhlIGxpbmsgcGFyYW1ldGVycyBtYXRjaCwgYWNjZXB0IHRoZW0gYnV0IGRvIG5vdGhpbmcuXFxuMzAzNzpcXHRcXHRcXHQgKi9cXG4zMDM4OlxcdFxcdFxcdGlmIChwbC1cXHUwMDNlcmVxX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHtcXG4zMDM5OlxcdFxcdFxcdFxcdGlmIChjLVxcdTAwM2VzcGVlZCAhPSBwbC1cXHUwMDNlbGlua19jb25maWcuc3BlZWQgfHxcXG4zMDQwOlxcdFxcdFxcdFxcdCAgICBjLVxcdTAwM2VkdXBsZXggIT0gcGwtXFx1MDAzZWxpbmtfY29uZmlnLmR1cGxleClcXG4zMDQxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNDI6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA0MzpcXHRcXHRcXHR9XFxuMzA0NDpcXHRcXG4zMDQ1OlxcdFxcdFxcdGNvbmZpZy5zcGVlZCA9IGMtXFx1MDAzZXNwZWVkO1xcbjMwNDY6XFx0XFx0XFx0Y29uZmlnLmR1cGxleCA9IGMtXFx1MDAzZWR1cGxleDtcXG4zMDQ3OlxcdFxcdFxcdGJyZWFrO1xcbjMwNDg6XFx0XFxuMzA0OTpcXHRcXHRjYXNlIEFVVE9ORUdfRU5BQkxFOlxcbjMwNTA6XFx0XFx0XFx0LyogSWYgd2UgaGF2ZSBhIGZpeGVkIGxpbmssIGFsbG93IGF1dG9uZWdvdGlhdGlvbiAoc2luY2UgdGhhdFxcbjMwNTE6XFx0XFx0XFx0ICogaXMgb3VyIGRlZmF1bHQgY2FzZSkgYnV0IGRvIG5vdCBhbGxvdyB0aGUgYWR2ZXJ0aXNlbWVudCB0b1xcbjMwNTI6XFx0XFx0XFx0ICogYmUgY2hhbmdlZC4gSWYgdGhlIGFkdmVydGlzZW1lbnQgbWF0Y2hlcywgc2ltcGx5IHJldHVybi5cXG4zMDUzOlxcdFxcdFxcdCAqL1xcbjMwNTQ6XFx0XFx0XFx0aWYgKHBsLVxcdTAwM2VyZXFfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCkge1xcbjMwNTU6XFx0XFx0XFx0XFx0aWYgKCFsaW5rbW9kZV9lcXVhbChjb25maWcuYWR2ZXJ0aXNpbmcsXFxuMzA1NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGwtXFx1MDAzZWxpbmtfY29uZmlnLmFkdmVydGlzaW5nKSlcXG4zMDU3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNTg6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA1OTpcXHRcXHRcXHR9XFxuMzA2MDpcXHRcXG4zMDYxOlxcdFxcdFxcdGNvbmZpZy5zcGVlZCA9IFNQRUVEX1VOS05PV047XFxuMzA2MjpcXHRcXHRcXHRjb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuMzA2MzpcXHRcXHRcXHRicmVhaztcXG4zMDY0OlxcdFxcbjMwNjU6XFx0XFx0ZGVmYXVsdDpcXG4zMDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNjc6XFx0XFx0fVxcbjMwNjg6XFx0XFxuMzA2OTpcXHRcXHQvKiBXZSBoYXZlIHJ1bGVkIG91dCB0aGUgY2FzZSB3aXRoIGEgUEhZIGF0dGFjaGVkLCBhbmQgdGhlXFxuMzA3MDpcXHRcXHQgKiBmaXhlZC1saW5rIGNhc2VzLiAgQWxsIHRoYXQgaXMgbGVmdCBhcmUgaW4tYmFuZCBsaW5rcy5cXG4zMDcxOlxcdFxcdCAqL1xcbjMwNzI6XFx0XFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9BdXRvbmVnX0JJVCwgY29uZmlnLmFkdmVydGlzaW5nLFxcbjMwNzM6XFx0XFx0XFx0XFx0IGtzZXQtXFx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSk7XFxuMzA3NDpcXHRcXG4zMDc1OlxcdFxcdC8qIElmIHRoaXMgbGluayBpcyB3aXRoIGFuIFNGUCwgZW5zdXJlIHRoYXQgY2hhbmdlcyB0byBhZHZlcnRpc2VkIG1vZGVzXFxuMzA3NjpcXHRcXHQgKiBhbHNvIGNhdXNlIHRoZSBhc3NvY2lhdGVkIGludGVyZmFjZSB0byBiZSBzZWxlY3RlZCBzdWNoIHRoYXQgdGhlXFxuMzA3NzpcXHRcXHQgKiBsaW5rIGNhbiBiZSBjb25maWd1cmVkIGNvcnJlY3RseS5cXG4zMDc4OlxcdFxcdCAqL1xcbjMwNzk6XFx0XFx0aWYgKHBsLVxcdTAwM2VzZnBfYnVzKSB7XFxuMzA4MDpcXHRcXHRcXHRpZiAoa3NldC1cXHUwMDNlYmFzZS5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKVxcbjMwODE6XFx0XFx0XFx0XFx0Y29uZmlnLmludGVyZmFjZSA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjIxLjkxNDczNDM1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg5OTYxMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgLiBNeSBpbml0aWFsIHBvaW50IG9mIGludGVyZXN0IGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTRlAgYnVzLCBhbmQgSSd2ZSBub3RlZCB0aGF0IHRoZSBpbnRlcmZhY2UgbW9kZSBpcyBzZWxlY3RlZCBoZXJlIHdoZW4gYHBsLVx1MDAzZXNmcF9idXNgIGlzIHNldC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgaXQgbmFycm93cyBkb3duIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGlzIGhhcHBlbmluZy4gTm93LCBJIG5lZWQgdG8gc2VlIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIHNlbGVjdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgUEhZIGxpbmsgc2V0dGluZ3MgbWFuYWdlbWVudC4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoyNS4xMDQ2OTg3ODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODA6XFx0XFx0XFx0aWYgKGtzZXQtXFx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSlcXG4zMDgxOlxcdFxcdFxcdFxcdGNvbmZpZy5pbnRlcmZhY2UgPVxcbjMwODI6XFx0XFx0XFx0XFx0XFx0cGh5bGlua19zZnBfc2VsZWN0X2ludGVyZmFjZShwbCxcXG4zMDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbmZpZy5hZHZlcnRpc2luZyk7XFxuMzA4NDpcXHRcXHRcXHRlbHNlXFxuMzA4NTpcXHRcXHRcXHRcXHRjb25maWcuaW50ZXJmYWNlID1cXG4zMDg2OlxcdFxcdFxcdFxcdFxcdHBoeWxpbmtfc2ZwX3NlbGVjdF9pbnRlcmZhY2Vfc3BlZWQocGwsXFxuMzA4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25maWcuc3BlZWQpO1xcbjMwODg6XFx0XFx0XFx0aWYgKGNvbmZpZy5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxcbjMwODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzA5MDpcXHRcXG4zMDkxOlxcdFxcdFxcdC8qIFJldmFsaWRhdGUgd2l0aCB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlICovXFxuMzA5MjpcXHRcXHRcXHRsaW5rbW9kZV9jb3B5KHN1cHBvcnQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjMwOTM6XFx0XFx0XFx0aWYgKHBoeWxpbmtfdmFsaWRhdGUocGwsIHN1cHBvcnQsIFxcdTAwMjZjb25maWcpKSB7XFxuMzA5NDpcXHRcXHRcXHRcXHRwaHlsaW5rX2VycihwbCwgXFxcInZhbGlkYXRpb24gb2YgJXMvJXMgd2l0aCBzdXBwb3J0ICUqcGIgZmFpbGVkXFxcXG5cXFwiLFxcbjMwOTU6XFx0XFx0XFx0XFx0XFx0ICAgIHBoeWxpbmtfYW5fbW9kZV9zdHIocGwtXFx1MDAzZXJlcV9saW5rX2FuX21vZGUpLFxcbjMwOTY6XFx0XFx0XFx0XFx0XFx0ICAgIHBoeV9tb2Rlcyhjb25maWcuaW50ZXJmYWNlKSxcXG4zMDk3OlxcdFxcdFxcdFxcdFxcdCAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsIHN1cHBvcnQpO1xcbjMwOTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzA5OTpcXHRcXHRcXHR9XFxuMzEwMDpcXHRcXHR9IGVsc2Uge1xcbjMxMDE6XFx0XFx0XFx0LyogVmFsaWRhdGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgY3VycmVudCBzdXBwb3J0ZWQgbWFzay4gKi9cXG4zMTAyOlxcdFxcdFxcdGxpbmttb2RlX2NvcHkoc3VwcG9ydCwgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuMzEwMzpcXHRcXHRcXHRpZiAocGh5bGlua192YWxpZGF0ZShwbCwgc3VwcG9ydCwgXFx1MDAyNmNvbmZpZykpXFxuMzEwNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTA1OlxcdFxcdH1cXG4zMTA2OlxcdFxcbjMxMDc6XFx0XFx0LyogSWYgYXV0b25lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHdlIG11c3QgaGF2ZSBhbiBhZHZlcnRpc2VtZW50ICovXFxuMzEwODpcXHRcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXV0b25lZ19CSVQsXFxuMzEwOTpcXHRcXHRcXHRcXHQgICAgICBjb25maWcuYWR2ZXJ0aXNpbmcpIFxcdTAwMjZcXHUwMDI2XFxuMzExMDpcXHRcXHQgICAgcGh5bGlua19pc19lbXB0eV9saW5rbW9kZShjb25maWcuYWR2ZXJ0aXNpbmcpKVxcbjMxMTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzExMjpcXHRcXG4zMTEzOlxcdFxcdC8qIFZhbGlkYXRlIHRoZSBhdXRvbmVnb3RpYXRpb24gc3RhdGUuIFdlIGRvbid0IGhhdmUgYSBQSFkgaW4gdGhpc1xcbjMxMTQ6XFx0XFx0ICogc2l0dWF0aW9uLCBzbyB0aGUgUENTIGlzIHRoZSBtZWRpYS1mYWNpbmcgZW50aXR5LlxcbjMxMTU6XFx0XFx0ICovXFxuMzExNjpcXHRcXHRpZiAoIXBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHBsLCBjb25maWcuaW50ZXJmYWNlLFxcbjMxMTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNvbmZpZy5hZHZlcnRpc2luZykpXFxuMzExODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTE5OlxcdFxcbjMxMjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4zMTIxOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5zcGVlZCA9IGNvbmZpZy5zcGVlZDtcXG4zMTIyOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5kdXBsZXggPSBjb25maWcuZHVwbGV4O1xcbjMxMjM6XFx0XFxuMzEyNDpcXHRcXHRpZiAocGwtXFx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSAhPSBjb25maWcuaW50ZXJmYWNlKSB7XFxuMzEyNTpcXHRcXHRcXHQvKiBUaGUgaW50ZXJmYWNlIGNoYW5nZWQsIGUuZy4gMTAwMGJhc2UtWCBcXHUwMDNjLVxcdTAwM2UgMjUwMGJhc2UtWCAqL1xcbjMxMjY6XFx0XFx0XFx0LyogV2UgbmVlZCB0byBmb3JjZSB0aGUgbGluayBkb3duLCB0aGVuIGNoYW5nZSB0aGUgaW50ZXJmYWNlICovXFxuMzEyNzpcXHRcXHRcXHRpZiAocGwtXFx1MDAzZW9sZF9saW5rX3N0YXRlKSB7XFxuMzEyODpcXHRcXHRcXHRcXHRwaHlsaW5rX2xpbmtfZG93bihwbCk7XFxuMzEyOTpcXHRcXHRcXHRcXHRwbC1cXHUwMDNlb2xkX2xpbmtfc3RhdGUgPSBmYWxzZTtcXG4zMTMwOlxcdFxcdFxcdH1cXG4zMTMxOlxcdFxcdFxcdGlmICghdGVzdF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsXFxuMzEzMjpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGwtXFx1MDAzZXBoeWxpbmtfZGlzYWJsZV9zdGF0ZSkpXFxuMzEzMzpcXHRcXHRcXHRcXHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFxcdTAwMjZjb25maWcpO1xcbjMxMzQ6XFx0XFx0XFx0cGwtXFx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7XFxuMzEzNTpcXHRcXHRcXHRsaW5rbW9kZV9jb3B5KHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZywgY29uZmlnLmFkdmVydGlzaW5nKTtcXG4zMTM2OlxcdFxcdH0gZWxzZSBpZiAoIWxpbmttb2RlX2VxdWFsKHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZyxcXG4zMTM3OlxcdFxcdFxcdFxcdFxcdCAgIGNvbmZpZy5hZHZlcnRpc2luZykpIHtcXG4zMTM4OlxcdFxcdFxcdGxpbmttb2RlX2NvcHkocGwtXFx1MDAzZWxpbmtfY29uZmlnLmFkdmVydGlzaW5nLCBjb25maWcuYWR2ZXJ0aXNpbmcpO1xcbjMxMzk6XFx0XFx0XFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XFxuMzE0MDpcXHRcXHR9XFxuMzE0MTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuMzE0MjpcXHRcXG4zMTQzOlxcdFxcdHJldHVybiAwO1xcbjMxNDQ6XFx0fVxcbjMxNDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xcbjMxNDY6XFx0XFxuMzE0NzpcXHQvKipcXG4zMTQ4OlxcdCAqIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KCkgLSByZXN0YXJ0IG5lZ290aWF0aW9uXFxuMzE0OTpcXHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4zMTUwOlxcdCAqXFxuMzE1MTpcXHQgKiBSZXN0YXJ0IG5lZ290aWF0aW9uIGZvciB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsLiBUaGlzIHdpbGxcXG4zMTUyOlxcdCAqIGNhdXNlIGFueSBhdHRhY2hlZCBwaHkgdG8gcmVzdGFydCBuZWdvdGlhdGlvbiB3aXRoIHRoZSBsaW5rIHBhcnRuZXIsIGFuZFxcbjMxNTM6XFx0ICogaWYgdGhlIE1BQyBpcyBpbiBhIEJhc2VYIG1vZGUsIHRoZSBNQUMgd2lsbCBhbHNvIGJlIHJlcXVlc3RlZCB0byByZXN0YXJ0XFxuMzE1NDpcXHQgKiBuZWdvdGlhdGlvbi5cXG4zMTU1OlxcdCAqXFxuMzE1NjpcXHQgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZS5cXG4zMTU3OlxcdCAqL1xcbjMxNTg6XFx0aW50IHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4zMTU5OlxcdHtcXG4zMTYwOlxcdFxcdGludCByZXQgPSAwO1xcbjMxNjE6XFx0XFxuMzE2MjpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjMxNjM6XFx0XFxuMzE2NDpcXHRcXHRpZiAocGwtXFx1MDAzZXBoeWRldilcXG4zMTY1OlxcdFxcdFxcdHJldCA9IHBoeV9yZXN0YXJ0X2FuZWcocGwtXFx1MDAzZXBoeWRldik7XFxuMzE2NjpcXHRcXHRwaHlsaW5rX3Bjc19hbl9yZXN0YXJ0KHBsKTtcXG4zMTY3OlxcdFxcbjMxNjg6XFx0XFx0cmV0dXJuIHJldDtcXG4zMTY5OlxcdH1cXG4zMTcwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KTtcXG4zMTcxOlxcdFxcbjMxNzI6XFx0LyoqXFxuMzE3MzpcXHQgKiBwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oKSAtIGdldCB0aGUgY3VycmVudCBwYXVzZSBwYXJhbWV0ZXJzXFxuMzE3NDpcXHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4zMTc1OlxcdCAqIEBwYXVzZTogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW1cXG4zMTc2OlxcdCAqL1xcbjMxNzc6XFx0dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxcbjMxNzg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbjMxNzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoyNS4xMDQ5NTQ1NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4Nzg0MTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQSFkgSW50ZXJmYWNlIE1vZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaW50ZXJmYWNlIG1vZGUgaGFuZGxpbmcgYW5kIGl0IHNlZW1zIHRoZSBpbnRlcmZhY2UgbW9kZSBpc24ndCBkaXJlY3RseSBzZXQgYnkgYGtzZXRgLiBJdCdzIGVpdGhlciBsZWZ0IGFzIGlzIG9yIHNlbGVjdGVkIHRocm91Z2ggYHBoeWxpbmtfc2ZwX3NlbGVjdF9pbnRlcmZhY2VgIGlmIHRoZSBgcGwtXHUwMDNlc2ZwX2J1c2AgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCB0aGUgaGFyZHdhcmUgb3IgdGhlIGRldmljZSB0cmVlIGlzIHNldHRpbmcgdGhlIGludGVyZmFjZSBtb2RlLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGNvbWVzIGludG8gcGxheS4gU2luY2UgaXQncyBvbmx5IHVzZWQgYnkgdGhlIGBxY2E4MDd4YCBkcml2ZXIsIHdoaWNoIGlzIGEgcGh5c2ljYWwgUEhZIGRyaXZlciwgaXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGhpdCB0aGlzIGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5CdXQgd2FpdCwgY2FuIGBwaHlsaW5rX2NyZWF0ZWAgZXZlbiBiZSBjYWxsZWQgd2l0aCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWA/IExldCBtZSBzZWXigKYgaXQgdGFrZXMgYSBgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWdgLiBUaGUgaW50ZXJmYWNlIG1vZGUgaXNuJ3QgYSBkaXJlY3QgYXJndW1lbnQgYnV0IGlzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlIHRyZWUuIFRpbWUgdG8gY2hlY2sgZm9yIGFueSB2aXJ0dWFsIGRyaXZlcnMgdGhhdCB1c2UgYHBoeWxpbmtgLiBXZSBhbHJlYWR5IGtub3cgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCB1c2VzIGBsYW43OHh4YCAoVVNCKS4gT2theSwgYnV0IGRvZXMgYGxhbjc4eHhgIHVzZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWA/IE5vcGUuIEFuZCBhcmUgdGhlcmUgYW55IG90aGVycz8gSSBhbHJlYWR5IGRpZCBhIGdyZXAgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBhbmQgaXQgb25seSBzaG93cyB1cCBpbiBgcGh5LWNvcmUuY2AsIGBwaHlfY2Fwcy5jYCwgYHBoeWxpbmsuY2AsIGBxY2E4MDd4LmNgLCBhbmQgYHBoeS5oYC4gU28gbm8gbmV0d29yayBkcml2ZXJzIHVzZSBpdCBkaXJlY3RseS4gSXTigJlzIG9ubHkgaW4gdGhlIGBxY2E4MDd4YCBQSFkgZHJpdmVyLlxuXG5UaGUgYHFjYTgwN3hgIGRyaXZlciBpcyBmb3IgUXVhbGNvbW0gUUNBODA3eCBQSFlzLiBJcyBpdCBldmVuICpwb3NzaWJsZSogdG8gaW5zdGFudGlhdGUgdGhpcyBQSFkgZHJpdmVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFuZCBob3cgd291bGQgZnV6emluZyB3b3JrPyBTeXprYWxsZXIgY2FuIGZ1enogUEhZIGRyaXZlcnMgKmlmKiB0aGV5J3JlIGF0dGFjaGVkIHRvIGEgdmlydHVhbCBNRElPIGJ1cy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzdXBwb3J0IGZvciBNRElPIGZ1enppbmc/IE5vLCBpdCBkb2Vzbid0IGhhdmUgYSB2aXJ0dWFsIE1ESU8gYnVzIGRyaXZlciB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZcy4gRXZlbiBpZiBpdCBkaWQsIHRoZSBwcm9wb3NlZCBjaGFuZ2UgaGVyZSBpcyBwcmV0dHkgbWlub3Ig4oCTIGl0IGp1c3QgYWRkcyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gYSBzd2l0Y2ggc3RhdGVtZW50IHRvIHJldHVybiBgSU5CQU5EX0NJU0NPX1NHTUlJYCBpbnN0ZWFkIG9mIGBJTkJBTkRfTk9ORWAuIEl04oCZcyBmdW5jdGlvbmFsbHkgYSBzbWFsbCBjaGFuZ2UuXG5cbklmIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgcmV0dXJucyBgSU5CQU5EX0NJU0NPX1NHTUlJYCwgaXQncyBnb2luZyB0byBhZmZlY3QgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gU28sIEkgbmVlZCB0byBsb29rIGludG8gYHBoeWxpbmtfcGNzX25lZ19tb2RlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDozNC41OTI3OTc4NTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5MDpcXHRzdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbjEwOTE6XFx0XFx0XFx0XFx0XFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXFxuMTA5MjpcXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcpXFxuMTA5MzpcXHR7XFxuMTA5NDpcXHRcXHR1bnNpZ25lZCBpbnQgcGNzX2liX2NhcHMgPSAwO1xcbjEwOTU6XFx0XFx0dW5zaWduZWQgaW50IHBoeV9pYl9jYXBzID0gMDtcXG4xMDk2OlxcdFxcdHVuc2lnbmVkIGludCBuZWdfbW9kZSwgbW9kZTtcXG4xMDk3OlxcdFxcdGVudW0gaW5iYW5kX3R5cGUgdHlwZTtcXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0dHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuMTEwMDpcXHRcXHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcbjExMDE6XFx0XFx0XFx0cGwtXFx1MDAzZXBjc19uZWdfbW9kZSA9IFBIWUxJTktfUENTX05FR19OT05FO1xcbjExMDI6XFx0XFx0XFx0cGwtXFx1MDAzZWFjdF9saW5rX2FuX21vZGUgPSBwbC1cXHUwMDNlcmVxX2xpbmtfYW5fbW9kZTtcXG4xMTAzOlxcdFxcdFxcdHJldHVybjtcXG4xMTA0OlxcdFxcdH1cXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0bW9kZSA9IHBsLVxcdTAwM2VyZXFfbGlua19hbl9tb2RlO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRwbC1cXHUwMDNlcGh5X2liX21vZGUgPSAwO1xcbjExMDk6XFx0XFxuMTExMDpcXHRcXHRpZiAocGNzKVxcbjExMTE6XFx0XFx0XFx0cGNzX2liX2NhcHMgPSBwaHlsaW5rX3Bjc19pbmJhbmRfY2FwcyhwY3MsIGludGVyZmFjZSk7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGlmIChwbC1cXHUwMDNlcGh5ZGV2KVxcbjExMTQ6XFx0XFx0XFx0cGh5X2liX2NhcHMgPSBwaHlfaW5iYW5kX2NhcHMocGwtXFx1MDAzZXBoeWRldiwgaW50ZXJmYWNlKTtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0cGh5bGlua19kYmcocGwsIFxcXCJpbnRlcmZhY2UgJXMgaW5iYW5kIG1vZGVzOiBwY3M9JTAyeCBwaHk9JTAyeFxcXFxuXFxcIixcXG4xMTE3OlxcdFxcdFxcdCAgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSwgcGNzX2liX2NhcHMsIHBoeV9pYl9jYXBzKTtcXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0aWYgKCFwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKG1vZGUpKSB7XFxuMTEyMDpcXHRcXHRcXHRib29sIHBjc19pYl9vbmx5ID0gZmFsc2U7XFxuMTEyMTpcXHRcXHRcXHRib29sIHBoeV9pYl9vbmx5ID0gZmFsc2U7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdFxcdGlmIChwY3NfaWJfY2FwcyBcXHUwMDI2XFx1MDAyNiBwY3NfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XFxuMTEyNDpcXHRcXHRcXHRcXHQvKiBQQ1Mgc3VwcG9ydHMgcmVwb3J0aW5nIGluLWJhbmQgY2FwYWJpbGl0aWVzLCBhbmRcXG4xMTI1OlxcdFxcdFxcdFxcdCAqIHN1cHBvcnRzIG1vcmUgdGhhbiBkaXNhYmxlIG1vZGUuXFxuMTEyNjpcXHRcXHRcXHRcXHQgKi9cXG4xMTI3OlxcdFxcdFxcdFxcdGlmIChwY3NfaWJfY2FwcyBcXHUwMDI2IExJTktfSU5CQU5EX0RJU0FCTEUpXFxuMTEyODpcXHRcXHRcXHRcXHRcXHRuZWdfbW9kZSA9IFBIWUxJTktfUENTX05FR19PVVRCQU5EO1xcbjExMjk6XFx0XFx0XFx0XFx0ZWxzZSBpZiAocGNzX2liX2NhcHMgXFx1MDAyNiBMSU5LX0lOQkFORF9FTkFCTEUpXFxuMTEzMDpcXHRcXHRcXHRcXHRcXHRwY3NfaWJfb25seSA9IHRydWU7XFxuMTEzMTpcXHRcXHRcXHR9XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdFxcdGlmIChwaHlfaWJfY2FwcyBcXHUwMDI2XFx1MDAyNiBwaHlfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XFxuMTEzNDpcXHRcXHRcXHRcXHQvKiBQSFkgc3VwcG9ydHMgaW4tYmFuZCBjYXBhYmlsaXRpZXMsIGFuZCBzdXBwb3J0c1xcbjExMzU6XFx0XFx0XFx0XFx0ICogbW9yZSB0aGFuIGRpc2FibGUgbW9kZS5cXG4xMTM2OlxcdFxcdFxcdFxcdCAqL1xcbjExMzc6XFx0XFx0XFx0XFx0aWYgKHBoeV9pYl9jYXBzIFxcdTAwMjYgTElOS19JTkJBTkRfRElTQUJMRSlcXG4xMTM4OlxcdFxcdFxcdFxcdFxcdHBsLVxcdTAwM2VwaHlfaWJfbW9kZSA9IExJTktfSU5CQU5EX0RJU0FCTEU7XFxuMTEzOTpcXHRcXHRcXHRcXHRlbHNlIGlmIChwaHlfaWJfY2FwcyBcXHUwMDI2IExJTktfSU5CQU5EX0JZUEFTUylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MzQuNTkyOTk1NjQ0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzI2MTY2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCBvZiBhIFJlY2VudCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBkaWZmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgLSBqdXN0IGFkZGluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhhdCBzd2l0Y2ggc3RhdGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwibWVoLCBub3Qgd29ydGggZnV6emluZy5cIiBJdCBsb29rcyBsaWtlIHRoaXMgc3BlY2lmaWMgbW9kZSBpcyBvbmx5IHJlbGV2YW50IHRvIHRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciwgYW5kIHRoZXJlJ3Mgbm8gd2F5IGluIGhlbGwgSSdtIGdvaW5nIHRvIHNlZSB0aGF0IGhhcmR3YXJlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGNvZGUgcGF0aCBqdXN0IGlzbid0IHJlYWNoYWJsZSB3aXRob3V0IGl0LiBJdCBzZWVtcyBsaWtlIGEgZGVhZCBlbmQgZm9yIG5vdy5cblxuV2FpdCBhIHNlY29uZCB0aG91Z2guLi4gaXMgaXQgKmFjdHVhbGx5KiB0aGF0IHNpbXBsZT8gQ2FuIEkgZm9yY2UgdGhlIGludGVyZmFjZSBtb2RlIHRvIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0aHJvdWdoIG5ldGxpbmsgb3IgYnkgcGxheWluZyB3aXRoIHN5c2ZzPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIElmIEkgKmNhbiogY29udHJvbCBpdCBmcm9tIHVzZXJzcGFjZSwgZXZlbiB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50LCB0aGVuIHRoaXMgYmVjb21lcyBmdXp6YWJsZSwgYW5kIEkgc2hvdWxkIHJlYWxseSBjaGVjay4gSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIExldCdzIHNlZSBpZiB0aGlzIG1vZGUgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBzb21laG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM2OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjM4Ljc2NTYxNDg4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2ODUzNTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MzguODMwMzA3MTYzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjMzNTU5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBNb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbnRlcmZhY2UgbW9kZSwgYnV0IEknbSBkcmF3aW5nIGEgYmxhbmsgaW4gYG5ldC9gLiBJIHZhZ3VlbHkgcmVjYWxsIGNoZWNraW5nIGBkcml2ZXJzL25ldC9gIHByZXZpb3VzbHksIHNwZWNpZmljYWxseSB0aG9zZSBwaHktcmVsYXRlZCBmaWxlcyDigJMgYHBoeS1jb3JlLmNgLCBgcGh5X2NhcHMuY2AsIGBwaHlsaW5rLmNgLCBhbmQgYHFjYTgwN3guY2AuIE15IGVhcmxpZXIgZXhhbWluYXRpb24gY29uZmlybXMgdGhhdCB0aGUgaW50ZXJmYWNlIG1vZGUgaXNuJ3QgYmVpbmcgc2V0IGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyB0aGUga2V5IHRha2Vhd2F5LiBJdCdzIGRpY3RhdGVkIGVpdGhlciBieSB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvciB0aGUgZGV2aWNlIHRyZWUuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdmlydHVhbGl6YXRpb24gd29ya3Mg4oCTIHNwZWNpZmljYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSDigJMgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW5hY2Nlc3NpYmxlLiBUaGVyZSdzIG5vIHdheSB0byB0cmlnZ2VyIHRoZSBjb25kaXRpb25zIEknbSB0cnlpbmcgdG8gYW5hbHl6ZS5cblxuSSd2ZSBnb3QgdG8gY29uY2x1ZGUgdGhpcyBpcyBub3QgYSBmcnVpdGZ1bCBhdmVudWUgZm9yIGZ1enppbmcsIGFuZCBJIHdpbGwgYmUgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc3MCwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6NDMuNjkzNjY2NzI4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlLiBUaGlzIGludGVyZmFjZSBtb2RlIGlzIG9ubHkgdXNlZCBieSB0aGUgUXVhbGNvbW0gUUNBODA3eCBwaHlzaWNhbCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIHZpcnR1YWxpemVkIG5ldHdvcmsgZHJpdmVycy4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDo0My42OTM2OTMzMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowbqwzn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 02:03:47 +0000 UTC FinishedAt: 2026-08-08 02:50:45 +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+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlLiBUaGlzIGludGVyZmFjZSBtb2RlIGlzIG9ubHkgdXNlZCBieSB0aGUgUXVhbGNvbW0gUUNBODA3eCBwaHlzaWNhbCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIHZpcnR1YWxpemVkIG5ldHdvcmsgZHJpdmVycy4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YTk0YjJlMWE0ZTQ4MzU5MzhkMDVmMDA1NjMxZmE2OWY3NzQ2NjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwMjo0OTo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuaW5kZXggMThkMmVhZDk3YWE1NC4uOTgzYTFhM2NlZTM3NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xMDQwLDYgJiM0MzsxMDQwLDcgQEAgc3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiB7XG4gXHRzd2l0Y2ggKGludGVyZmFjZSkge1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmE5NGIyZTFhNGU0ODM1OTM4ZDA1ZjAwNTYzMWZhNjlmNzc0NjYzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMDI6NDk6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwppbmRleCAxOGQyZWFkOTdhYTU0Li45ODNhMWEzY2VlMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKQEAgLTEwNDAsNiAmIzQzOzEwNDAsNyBAQCBzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQogewogCXN3aXRjaCAoaW50ZXJmYWNlKSB7CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSToKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSToKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgYSBQSFkgSW50ZXJmYWNlIE1vZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQsIGFuZCBpdCBzZWVtcyB0byBoYXZlIHRvdWNoZWQgdGhlIGBwaHlsaW5rLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbmV0L3BoeS9gIGRpcmVjdG9yeS4gVGhlIG1vZGlmaWNhdGlvbiBpcyBhZGRpbmcgc3VwcG9ydCBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIHdpdGhpbiB0aGUgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgaXQgbWVhbnMgc29tZW9uZSYjMzk7cyBpbnRyb2R1Y2luZyBvciBlbmFibGluZyBzdXBwb3J0IGZvciBhIHNwZWNpZmljIFBIWSBpbnRlcmZhY2UgbW9kZSwgUFNHTUlJLCB3aXRoaW4gdGhlIHBoeWxpbmsgZnJhbWV3b3JrLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbmV3IG1vZGUgaXMgYmVpbmcgaGFuZGxlZC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHdlIGFyZSBzdXBwb3J0aW5nIHNvbWUgbmV3IGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZ2V0X2luYmFuZF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzM9ZW51bSBpbmJhbmRfdHlwZSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDM4LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDM5OnN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA5OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA5OTpcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMTAwLVx0aWYgKHR5cGUgPT0gSU5CQU5EX05PTkUpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTM3NTY9c3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChzdHJ1Y3QgcGh5bGluayAqcGwpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozODA3Olx0aW5iYW5kX3R5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVx0aWYgKGluYmFuZF90eXBlID09IElOQkFORF9OT05FKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBQSFlMaW5rIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSByZWxhdGl2ZWx5IG1pbm9yIG9uZSwgZm9jdXNpbmcgb24gYSBtb2RpZmljYXRpb24gdG8gdGhlIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdXBkYXRpbmcgYSBzd2l0Y2ggc3RhdGVtZW50LiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoZSBhZGRpdGlvbiBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhlIGludGVyZmFjZSBsaXN0LiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGludGVudCBpcyB0byBub3cgaGF2ZSB0aGlzIGludGVyZmFjZSByZXR1cm4gYElOQkFORF9TR01JSWAgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYElOQkFORF9OT05FYC4KCkJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCByZWFsbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhhdCBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIGZ1bmN0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgaG93IGl04oCZcyBzdHJ1Y3R1cmVkIGFuZCB3aGF0IG90aGVyIGludGVyZmFjZXMgYXJlIGN1cnJlbnRseSBoYW5kbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBsb2dpYyB3aWxsIGJlIGNydWNpYWwgdG8gZnVsbHkgYXBwcmVjaWF0aW5nIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGNoYW5nZSBhbmQgY29uZmlybWluZyBpdOKAmXMgdGhlIGNvcnJlY3QgY291cnNlIG9mIGFjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIFBIWUxpbmsgYXJjaGl0ZWN0dXJlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzOTpcdHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4xMDQwOlx0e1xuMTA0MTpcdFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbjEwNDI6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuMTA0MzpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuMTA0NDpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuMTA0NTpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcbjEwNDY6XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4xMDQ3Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdfUVhHTUlJOlxuMTA0ODpcdFx0XHQvKiBUaGVzZSBwcm90b2NvbHMgYXJlIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBhIFBIWSB3aGljaFxuMTA0OTpcdFx0XHQgKiBjb21tdW5pY2F0ZXMgaXRzIG5lZ290aWF0aW9uIHJlc3VsdCBiYWNrIHRvIHRoZSBNQUMgdmlhXG4xMDUwOlx0XHRcdCAqIGluYmFuZCBjb21tdW5pY2F0aW9uLiBOb3RlOiB0aGVyZSBleGlzdCBQSFlzIHRoYXQgcnVuXG4xMDUxOlx0XHRcdCAqIHdpdGggU0dNSUkgYnV0IGRvIG5vdCBzZW5kIHRoZSBpbmJhbmQgZGF0YS5cbjEwNTI6XHRcdFx0ICovXG4xMDUzOlx0XHRcdHJldHVybiBJTkJBTkRfQ0lTQ09fU0dNSUk7XG4xMDU0Olx0XG4xMDU1Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4xMDU2Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6XG4xMDU3Olx0XHRcdC8qIDEwMDBiYXNlLVggaXMgZGVzaWduZWQgZm9yIHVzZSBtZWRpYS1zaWRlIGZvciBGaWJyZVxuMTA1ODpcdFx0XHQgKiBjb25uZWN0aW9ucywgYW5kIHRodXMgdGhlIEF1dG9uZWcgYml0IG5lZWRzIHRvIGJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgU21hbGwgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIOKAkyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIGNvbnN0YW50IHdpdGhpbiBhIGBzd2l0Y2hgIHN0YXRlbWVudC4gU2VlbXMgdHJpdmlhbCwgZG9lc24mIzM5O3QgaXQ/IEJ1dCwgYXMgYWx3YXlzLCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJcyBpdCB3b3J0aCBwdXR0aW5nIGl0IHRocm91Z2ggZnV6emluZz8KClRoZSBjaGFuZ2UgaW1wYWN0cyBgcGh5bGlua19wY3NfbmVnX21vZGVgIGFuZCBgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWxgLiBJIGltbWVkaWF0ZWx5IHRoaW5rICYjMzQ7bmV0d29yayBQSFkgbGluayBtYW5hZ2VtZW50LCYjMzQ7IHdoaWNoIG9mdGVuIG1lYW5zIGhhcmR3YXJlIGludGVyYWN0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdmVyeSBzcGVjaWZpYyBzZXR1cHMuIFNGUCBtb2R1bGVzLCBQSFlzLi4uIHRoYXQmIzM5O3MgdGhlIHVzdWFsIHRlcnJpdG9yeS4gVGhlIGNvbm5lY3Rpb25zIGFyZSBgcGh5bGlua19tYWpvcl9jb25maWdgIGFuZCBgcGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydGAuCgpNeSBpbml0aWFsIGd1dCByZWFjdGlvbiBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8mIzM0OyBTeXprYWxsZXIgaXMgZ3JlYXQgd2l0aCB0aGluZ3MgbGlrZSBuZXRsaW5rIGludGVyZmFjZXMsIGJ1dCBhIGxvdCBvZiBQSFkgbGluayBtYW5hZ2VtZW50IEkmIzM5O3ZlIGRlYWx0IHdpdGggaXMgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGV2ZW50cyBvciBldGh0b29sIGNvbW1hbmRzLiBJdCYjMzk7cyBub3QgdXN1YWxseSBhIGRpcmVjdCB1c2VyLXNwYWNlIHRoaW5nLiBUaGUgcXVlc3Rpb24gaXMgaWYgdGhlcmUmIzM5O3MgYW55IHVzZXItc3BhY2UgcGF0aCB0byB0aGlzLiBgcGh5bGlua19wY3NfbmVnX21vZGVgIGlzIGNhbGxlZCBmcm9tIGBwaHlsaW5rX21ham9yX2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHBoeWxpbmtfbWFqb3JfY29uZmlnYCBpcyBjYWxsZWQsIGFuZCBmcm9tIHdoZXJlLiBUaW1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5bGlua19tYWpvcl9jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTA5MD1zdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTIzOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTI0MDpzdGF0aWMgdm9pZCBwaHlsaW5rX21ham9yX2NvbmZpZyhzdHJ1Y3QgcGh5bGluayAqcGwsIGJvb2wgcmVzdGFydCxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTI0MS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xNDU1PXN0YXRpYyB2b2lkIHBoeWxpbmtfbWFjX2luaXRpYWxfY29uZmlnKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBmb3JjZV9yZXN0YXJ0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTQ4My1cdFx0bXV0ZXhfbG9jayhcdTAwMjZwaHktXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE0ODQ6XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZm9yY2VfcmVzdGFydCwgXHUwMDI2bGlua19zdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE0ODUtXHRpZiAocGh5KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTYxNj1zdGF0aWMgdm9pZCBwaHlsaW5rX3Jlc29sdmUoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTcwNi1cdFx0fVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxNzA3Olx0XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFx1MDAyNmxpbmtfc3RhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzA4LVx0XHRwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBsaW5rX3N0YXRlLmludGVyZmFjZTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5ODI9aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxMzItXHRcdFx0ICAgICAgXHUwMDI2cGwtXHUwMDNlcGh5bGlua19kaXNhYmxlX3N0YXRlKSlcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzEzMzpcdFx0XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFx1MDAyNmNvbmZpZyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxMzQtXHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGZ1bmN0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyBhYm91dCBob3cgb25lIGludGVyYWN0cyB3aXRoIGl0LiBDYW4gaXQgYmUgcmVhY2hlZCB2aWEgYGV0aHRvb2xgPyBZZXAsIGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgcGF0aC4gQnV0IGhlcmUmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjYWxsIHBhdGggaGF2ZSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IElzIGl0IG9ubHkgcmVsZXZhbnQgdG8gdmVyeSBzcGVjaWFsaXplZCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnM/CgpEaWdnaW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgYnkgZHJpdmVycyB0aGF0IHV0aWxpemUgdGhlIHBoeWxpbmsgZnJhbWV3b3JrLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBpbiB0aGUgY29udGV4dCBvZiBmdXp6aW5nLiBTeXprYWxsZXIgaGFzIGEgYnVuY2ggb2YgdmlydHVhbCBuZXR3b3JrIGRyaXZlcnMg4oCTIGB2ZXRoYCwgYHR1bmAsIGBtYWNzZWNgLCB0aGluZ3MgbGlrZSB0aGF0LiBUaGUga2V5IG5vdyBpczogYXJlIGFueSBvZiB0aG9zZSB2aXJ0dWFsIGRyaXZlcnMgYWN0dWFsbHkgdXNpbmcgYHBoeWxpbmtgPyBJZiBzbywgdGhpcyBiZWNvbWVzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX2V0aHRvb2wuYz0yMjQ9c3RhdGljIGludCB0c2VfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9ldGh0b29sLmMtMjI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfZXRodG9vbC5jOjIyOTpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChwcml2LVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9ldGh0b29sLmMtMjMwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTQ3Mj1zdGF0aWMgaW50IGFnNzF4eF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy00NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjQ3NzpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChhZy1cdTAwM2VwaHlsaW5rLCBrc2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNDc4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTM2OTA9c3RhdGljIGludCBtYWNiX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzY5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzY5NTpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChicC1cdTAwM2VwaHlsaW5rLCBrc2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzY5Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmM9NjU9c3RhdGljIGludCBkcGFhX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aHRvb2wuYy03MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRodG9vbC5jOjcxOlx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KG1hY19kZXYtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRodG9vbC5jLTcyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jPTEyNz1kcGFhMl9ldGhfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMTM1LVx0aWYgKGRwYWEyX2V0aF9pc190eXBlX3BoeShwcml2KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmM6MTM2Olx0XHRlcnIgPSBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChwcml2LVx1MDAzZW1hYy1cdTAwM2VwaHlsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYy0xMzctXHRcdFx0XHRcdFx0ICAgIGxpbmtfc2V0dGluZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2gtZXRodG9vbC5jPTEwMD1kcGFhMl9zd2l0Y2hfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC1ldGh0b29sLmMtMTExLVx0aWYgKGRwYWEyX3N3aXRjaF9wb3J0X2lzX3R5cGVfcGh5KHBvcnRfcHJpdikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2gtZXRodG9vbC5jOjExMjpcdFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydF9wcml2LVx1MDAzZW1hYy1cdTAwM2VwaHlsaW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC1ldGh0b29sLmMtMTEzLVx0XHRcdFx0XHRcdCAgICBsaW5rX2tzZXR0aW5ncyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYz0xMjc3PXN0YXRpYyBpbnQgZW5ldGNfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYy0xMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYzoxMjg1Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHByaXYtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMtMTI4Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM9Nzk2PXN0YXRpYyBpbnQgZnNfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy04MDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYzo4MDE6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoZmVwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy04MDItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aF9ldGh0b29sLmM9MTEyPXVlY19zZXRfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoX2V0aHRvb2wuYy0xMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGhfZXRodG9vbC5jOjExNzpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCh1Z2V0aC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoX2V0aHRvb2wuYy0xMTgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM9NDcwMD1tdm5ldGFfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy00NzA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYzo0NzA1Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTQ3MDYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jPTU1ODU9c3RhdGljIGludCBtdnBwMl9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTU1OTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYzo1NTkzOlx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTU1OTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfZXRodG9vbC5jPTY0Nj1wcmVzdGVyYV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfZXRodG9vbC5jLTY1NC1cdGlmIChwb3J0LVx1MDAzZXBoeV9saW5rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ldGh0b29sLmM6NjU1Olx0XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydC1cdTAwM2VwaHlfbGluaywgZWNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2V0aHRvb2wuYy02NTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz00NTQ3PXN0YXRpYyBpbnQgbXRrX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTQ1NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjQ1NTU6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQobWFjLVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTQ1NTYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X2V0aHRvb2wuYz0xMDkwPWxhbjc0M3hfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmMtMTA5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X2V0aHRvb2wuYzoxMDk1Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KGFkYXB0ZXItXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW43NDN4X2V0aHRvb2wuYy0xMDk2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYz01MTY9c3RhdGljIGludCBsYW45NjZ4X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYy01MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYzo1MjE6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9ldGh0b29sLmMtNTIyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9ldGh0b29sLmM9MTE1MT1zdGF0aWMgaW50IHNwYXJ4NV9zZXRfbGlua19zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9ldGh0b29sLmMtMTE1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYzoxMTU2Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYy0xMTU3LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jPTMyOT1zdG1tYWNfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTMzMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MzM0Olx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHByaXYtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMzM1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jPTUwNT1hbTY1X2Nwc3dfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1ldGh0b29sLmMtNTA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LWV0aHRvb2wuYzo1MTA6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc2FsdmUtXHUwMDNlcGh5bGluaywgZWNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jLTUxMS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9MjU2PWludCB3eF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy0yNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzoyNjE6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQod3gtXHUwMDNlcGh5bGluaywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTI2Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYz0yMjkxPWF4aWVuZXRfZXRodG9vbHNfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMjI5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmM6MjI5NjpcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChscC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYy0yMjk3LX1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NTc9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk3ODogKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5NzktICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5ODEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5ODI6aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4My1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmtzZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTQ0LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzE0NTpFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNDYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0xODYxPXN0YXRpYyBpbnQgbGFuNzh4eF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE4NjUtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE4NjY6XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoZGV2LVx1MDAzZXBoeWxpbmssIGNtZCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE4NjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzY4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIERyaXZlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IG1ha2luZyB0aGUgY29ubmVjdGlvbiDigJMgdGhpcyBgbGFuNzh4eGAgZHJpdmVyIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCByaWdodD8gQW5kIHdlIGtub3cgU3l6a2FsbGVyIGNhbiBmdXp6IFVTQiBkcml2ZXJzLCBib3RoIHRocm91Z2ggdGhlIGBkdW1teV9oY2RgIGFuZCByYXcgZ2FkZ2V0IGFwcHJvYWNoZXMuIFRoYXQgbWVhbnMgd2UgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGluc3RhbnRpYXRlIHRoaXMgYGxhbjc4eHhgIGRyaXZlciBhbmQgc3RhcnQgZXhlcmNpc2luZyBpdHMgZXRodG9vbCBvcGVyYXRpb25zLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lcywgZG9lcyB0aGlzIGRyaXZlciB1dGlsaXplIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHRvIGRldGVybWluZSB0aGUgYmVzdCBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBwcmV0dHkgY2xlYXI6IHRoZSBgbGFuNzh4eGAgZHJpdmVyICpkb2VzbiYjMzk7dCogdXNlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gVGhhdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gaW52ZXN0aWdhdGUgKndoZXJlKiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgKmlzKiBhY3R1YWxseSBlbXBsb3llZCBpbiB0aGUga2VybmVsJiMzOTtzIEV0aGVybmV0IGRyaXZlciBsYW5kc2NhcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IGFuZCByZWxldmFuY2UuIEkmIzM5O2xsIGxpa2VseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBtYWNybyB3aXRoaW4gdGhlIHJlbGV2YW50IGRyaXZlciBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlciBmaWxlcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggZGV2aWNlcyBvciBjaGlwc2V0cyBsZXZlcmFnZSB0aGlzIGludGVyZmFjZSBtb2RlIGFuZCB3aHkuIEtub3dpbmcgdGhlIHNwZWNpZmljIGRldmljZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBpdHMgY2hhcmFjdGVyaXN0aWNzIGFuZCBjYXBhYmlsaXRpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBmdWxsZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jPTE1OT1pbnQgcGh5X2ludGVyZmFjZV9udW1fcG9ydHMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYy0yMDEtXHRcdHJldHVybiA0O1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM6MjAyOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAzLVx0XHRyZXR1cm4gNTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYz0yOTQ9dW5zaWduZWQgbG9uZyBwaHlfY2Fwc19mcm9tX2ludGVyZmFjZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMC1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM6MzExOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMtMzEyLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjM4PXN0YXRpYyBpbnQgcGh5bGlua19pbnRlcmZhY2VfbWF4X3NwZWVkKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTktXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjYwOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNjEtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz03NzQ9c3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODA4LVx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6ODA5Olx0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgxMC1cdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzOT1zdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0Mi1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDQzOlx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xMDQ0LVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz00OTA9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTQ5LVx0XHRpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUwOlx0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkpKSlcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1NTE6XHRcdFx0cHJpdi1cdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU1Mi1cdFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTU2Mj1zdGF0aWMgaW50IHFjYTgwN3hfcGh5X3BhY2thZ2VfY29uZmlnX2luaXRfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODUtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU4NjpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODctXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkqKgoKT2theSwgc28gSSBzZWUgdGhpcyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdXNlZCB3aXRoaW4gdGhlIGBxY2E4MDd4LmNgIGZpbGUsIHdoaWNoIGlzIGEgUXVhbGNvbW0gUEhZIGRyaXZlciBpbiB0aGUgbmV0d29yayBkcml2ZXIgZGlyZWN0b3J5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgcGFydGljdWxhciBpbnRlcmZhY2UgbW9kZSBleGNsdXNpdmVseSBmb3IgcGh5c2ljYWwgaW50ZXJmYWNlcywgb3IgY291bGQgaXQgcG90ZW50aWFsbHkgYmUgdXNlZCBpbiBhIHZpcnR1YWwgZHJpdmVyIGNvbnRleHQgYXMgd2VsbD8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBrbm93LiBUbyBhbnN3ZXIgdGhpcywgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHVzYWdlIHBhdHRlcm4uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IG90aGVyIGRyaXZlcnMsIHZpcnR1YWwgb3Igb3RoZXJ3aXNlLCBhcmUgYWN0dWFsbHkgZW1wbG95aW5nIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBhcHBsaWNhdGlvbiBiZWZvcmUgbWFraW5nIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTIzOD1Tb21lIG9mIHRoZSBpbnRlcmZhY2UgbW9kZXMgYXJlIGRlc2NyaWJlZCBiZWxvdzpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zMjUtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDozMjY6YGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYGBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTMyNy0gICAgVGhpcyBpcyB0aGUgUGVudGEgU0dNSUkgbW9kZSwgaXQgaXMgc2ltaWxhciB0byBRU0dNSUkgYnV0IGl0IGNvbWJpbmVzIDVcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWNvcmUuYz0xNTk9aW50IHBoeV9pbnRlcmZhY2VfbnVtX3BvcnRzKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAxLVx0XHRyZXR1cm4gNDtcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjIwMjpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jLTIwMy1cdFx0cmV0dXJuIDU7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Mjk0PXVuc2lnbmVkIGxvbmcgcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYy0zMTAtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jOjMxMTpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMi1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOD1zdGF0aWMgaW50IHBoeWxpbmtfaW50ZXJmYWNlX21heF9zcGVlZChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjU5LVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI2MDpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxLVx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Nzc0PXN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgwOC1cdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjgwOTpcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy04MTAtXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzk9c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDItXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTA0MzpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0NC1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NDkwPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTU0OS1cdFx0aWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MDpcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJKSkpXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUxOlx0XHRcdHByaXYtXHUwMDNlcGFja2FnZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTtcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NTItXHRcdGVsc2UgaWYgKCFzdHJjYXNlY21wKHBhY2thZ2VfbW9kZV9uYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz01NjI9c3RhdGljIGludCBxY2E4MDd4X3BoeV9wYWNrYWdlX2NvbmZpZ19pbml0X29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg1LVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1ODY6XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg3LVx0ZGVmYXVsdDpcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTUzPWV4dGVybiBjb25zdCBpbnQgcGh5X2Jhc2ljX3BvcnRzX2FycmF5WzNdO1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtODktICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9NT0NBOiBNdWx0aW1lZGlhIG92ZXIgQ29heFxuaW5jbHVkZS9saW51eC9waHkuaDo5MDogKiBAUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTogUGVudGEgU0dNSUlcbmluY2x1ZGUvbGludXgvcGh5LmgtOTEtICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6IFF1YWQgU0dNSUlcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTExND10eXBlZGVmIGVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMTMyLVx0UEhZX0lOVEVSRkFDRV9NT0RFX01PQ0EsXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjEzMzpcdFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUksXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzNC1cdFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUksXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0yMTA9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwaHlfbW9kZXMocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTI0OC1cdFx0cmV0dXJuIFwmIzM0O21vY2FcJiMzNDs7XG5pbmNsdWRlL2xpbnV4L3BoeS5oOjI0OTpcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcbmluY2x1ZGUvbGludXgvcGh5LmgtMjUwLVx0XHRyZXR1cm4gXCYjMzQ7cHNnbWlpXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU2NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIGBxY2E4MDd4LmNgIGRyaXZlciwgd2hpY2ggaXMgYSBwaHlzaWNhbCBQSFkgZHJpdmVyIGZvciB0aGUgUXVhbGNvbW0gUUNBODA3eC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGRyaXZlciwgaXQmIzM5O3MgcHJldHR5IHVubGlrZWx5IHRoYXQgc3l6a2FsbGVyLCBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGlzIGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRoaXMgY29kZSBwYXRoIGRpcmVjdGx5LiBUaGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhc3N1bXB0aW9uLCBpbml0aWFsbHkuCgpCdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBDb3VsZCBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGJlIGNhbGxlZCB3aXRoIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYD8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuIExldCBtZSBsb29rIGNsb3Nlci4gYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCB0YWtlcyBhIGBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldGAgYXJndW1lbnQuIE15IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgYGtzZXRgIHN0cnVjdHVyZSBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggc2V0dGluZyB0aGUgaW50ZXJmYWNlIG1vZGU/IERvZXMgdGhhdCBzdHJ1Y3R1cmUgY29udGFpbiB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERWAgdmFsdWVzPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoaXMgaXMgcG90ZW50aWFsbHkgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgYmUsIGV2ZW4gaWYgdGhlIHByaW1hcnkgZHJpdmVyIGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yOTU3PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5NzctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5Nzg6ICogcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoKSAtIHNldCB0aGUgbGluayBzZXR0aW5nc1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTc5LSAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTgxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyOTgyOmludCBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChzdHJ1Y3QgcGh5bGluayAqcGwsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5ODMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0NC19XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMxNDU6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTQ2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGFmdGVyIGEgcXVpY2sgc2Nhbiwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZG9tYWluOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmFtZSB0ZWxscyBtZSBleGFjdGx5IHdoYXQgdGhpcyBpcyBhaW1pbmcgdG8gZG8uIEl0JiMzOTtzIGEga2VybmVsIGZ1bmN0aW9uLCBvYnZpb3VzbHkuIGBwaHlsaW5rYCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGNvbnRyb2wsIHZlcnkgbGlrZWx5IGZvY3VzZWQgb24gRXRoZXJuZXQuIFRoZSAmIzM0O2V0aHRvb2wmIzM0OyBpbmNsdXNpb24gaXMga2V5OyBpdCYjMzk7cyB0aGUgc3RhbmRhcmQgdXRpbGl0eSBmb3IgY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLCBzbyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGpvYiBpcyB0byB0cmFuc2xhdGUgdGhvc2UgdXNlci1zcGFjZSBldGh0b29sIHNldHRpbmdzIGludG8gc29tZXRoaW5nIHRoZSBQSFkgaXRzZWxmIGNhbiB1bmRlcnN0YW5kIGFuZCB1dGlsaXplLiAmIzM0O2tzZXR0aW5ncyYjMzQ7IGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzIC0gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgc2V0dGluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gbWFuaXB1bGF0ZSB0aGUgUEhZIHZpYSB0aGUgcGh5bGluayBmcmFtZXdvcmsuIFRoZSAmIzM0O3NldCYjMzQ7IGF0IHRoZSBlbmQgY2xlYXJseSBkZWZpbmVzIHRoaXMgZnVuY3Rpb24gYXMgYSBzZXR0ZXIgLSB3ZSYjMzk7cmUgY2hhbmdpbmcgc29tZXRoaW5nLCBub3QgcmV0cmlldmluZyBpdC4KCkltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFdlJiMzOTtsbCBiZSB3b3JraW5nIHdpdGggdGhlIHBoeWxpbmsgb2JqZWN0IGl0c2VsZiwgY2VydGFpbmx5LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggc2V0dGluZ3MgYXJlIGJlaW5nIHRhcmdldGVkLCBhbmQgaG93IHRoYXQgaW5mb3JtYXRpb24gaXMgbWFwcGVkIHRvIHRoZSBpbnRlcm5hbCByZWdpc3RlcnMgb3IgbWVjaGFuaXNtcyBvZiB0aGUgUEhZIGRyaXZlci4gTGlrZWx5LCB0aGVyZSYjMzk7cyBhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCB0aGUgcG9zc2libGUgZXRodG9vbCBjb25maWd1cmF0aW9ucywgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBhbmQgdHJhbnNsYXRpbmcgdGhvc2UgcGFyYW1ldGVycy4KCkkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgZXJyb3IgY29uZGl0aW9ucyDigJMgaW52YWxpZCBzZXR0aW5ncywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIGhhcmR3YXJlIGxpbWl0YXRpb25zLiBUaGUgZnVuY3Rpb24gbmVlZHMgdG8gaGFuZGxlIHRob3NlIGdyYWNlZnVsbHksIHJldHVybmluZyBhcHByb3ByaWF0ZSBlcnJvciBjb2RlcyBhbmQgcGVyaGFwcyBwcm92aWRpbmcgZGVidWcgbWVzc2FnZXMuIFRoZXJlJiMzOTtzIGFsc28gdGhlIHF1ZXN0aW9uIG9mIHN5bmNocm9uaXphdGlvbjsgaWYgdGhpcyBmdW5jdGlvbiBpcyBtb2RpZnlpbmcgaGFyZHdhcmUgc2V0dGluZ3MsIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gb3RoZXIgdGhyZWFkcyBvciBpbnRlcnJ1cHRzIGNvdWxkIGJlIHByb2JsZW1hdGljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gcGxhY2UsIGlmIG5vdCBJIHdvdWxkIGhhdmUgdG8gcmV2aWV3IHRob3NlLgoKVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBwb3RlbnRpYWxseSBpbmZsdWVuY2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gQSBmbGF3ZWQgaW1wbGVtZW50YXRpb24gaGVyZSBjb3VsZCBsZWFkIHRvIGRyb3BwZWQgY29ubmVjdGlvbnMsIGluY29ycmVjdCBsaW5rIHNwZWVkcywgb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIHZhbGlkYXRpb24sIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGFudGljaXBhdGUgaXQgd2lsbCBpbnRlcmZhY2Ugd2l0aCB0aGUgUEhZIGRyaXZlciwgY2FsbGluZyBpdHMgZnVuY3Rpb25zIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgaG93IGl0IGFjaGlldmVzIHRoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5ODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5ODI6XHRpbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxuMjk4MzpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcbjI5ODQ6XHR7XG4yOTg1Olx0XHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0KTtcbjI5ODY6XHRcdGNvbnN0IHN0cnVjdCBsaW5rX2NhcGFiaWxpdGllcyAqYztcbjI5ODc6XHRcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgY29uZmlnO1xuMjk4ODpcdFxuMjk4OTpcdFx0QVNTRVJUX1JUTkwoKTtcbjI5OTA6XHRcbjI5OTE6XHRcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbjI5OTI6XHRcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgcGh5X2tzZXQgPSAqa3NldDtcbjI5OTM6XHRcbjI5OTQ6XHRcdFx0bGlua21vZGVfYW5kKHBoeV9rc2V0LmxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcsXG4yOTk1Olx0XHRcdFx0ICAgICBwaHlfa3NldC5saW5rX21vZGVzLmFkdmVydGlzaW5nLFxuMjk5NjpcdFx0XHRcdCAgICAgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbjI5OTc6XHRcbjI5OTg6XHRcdFx0LyogV2UgY2FuIHJlbHkgb24gcGh5bGliIGZvciB0aGlzIHVwZGF0ZTsgd2UgYWxzbyBkbyBub3QgbmVlZFxuMjk5OTpcdFx0XHQgKiB0byB1cGRhdGUgdGhlIHBsLVx1MDAzZWxpbmtfY29uZmlnIHNldHRpbmdzOlxuMzAwMDpcdFx0XHQgKiAtIHRoZSBjb25maWd1cmF0aW9uIHJldHVybmVkIHZpYSBrc2V0dGluZ3NfZ2V0KCkgd2lsbCBjb21lXG4zMDAxOlx0XHRcdCAqICAgZnJvbSBwaHlsaWIgd2hlbmV2ZXIgYSBQSFkgaXMgcHJlc2VudC5cbjMwMDI6XHRcdFx0ICogLSBsaW5rX2NvbmZpZy5pbnRlcmZhY2Ugd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBQSFkgY2FsbGluZ1xuMzAwMzpcdFx0XHQgKiAgIGJhY2sgdmlhIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCBhIHN1YnNlcXVlbnQgcmVzb2x2ZS5cbjMwMDQ6XHRcdFx0ICogLSBpbml0aWFsIGxpbmsgY29uZmlndXJhdGlvbiBmb3IgUEhZIG1vZGUgY29tZXMgZnJvbSB0aGVcbjMwMDU6XHRcdFx0ICogICBsYXN0IHBoeSBzdGF0ZSB1cGRhdGVkIHZpYSBwaHlsaW5rX3BoeV9jaGFuZ2UoKS5cbjMwMDY6XHRcdFx0ICogLSBvdGhlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGUuZy4gcGF1c2UgbW9kZXMpIGFyZVxuMzAwNzpcdFx0XHQgKiAgIHBlcmZvcm1lZCBkaXJlY3RseSB2aWEgcGh5bGliLlxuMzAwODpcdFx0XHQgKiAtIGlmIGluIGluLWJhbmQgbW9kZSB3aXRoIGEgUEhZLCB0aGUgbGluayBjb25maWd1cmF0aW9uXG4zMDA5Olx0XHRcdCAqICAgaXMgcGFzc2VkIG9uIHRoZSBsaW5rIGZyb20gdGhlIFBIWSwgYW5kIGFsbCBvZlxuMzAxMDpcdFx0XHQgKiAgIGxpbmtfY29uZmlnLntzcGVlZCxkdXBsZXgsYW5fZW5hYmxlZCxwYXVzZX0gYXJlIG5vdCB1c2VkLlxuMzAxMTpcdFx0XHQgKiAtIHRoZSBvbmx5IHBvc3NpYmxlIHVzZSB3b3VsZCBiZSBsaW5rX2NvbmZpZy5hZHZlcnRpc2luZ1xuMzAxMjpcdFx0XHQgKiAgIHBhdXNlIG1vZGVzIHdoZW4gaW4gMTAwMGJhc2UtWCBtb2RlIHdpdGggYSBQSFksIGJ1dCBpblxuMzAxMzpcdFx0XHQgKiAgIHRoZSBwcmVzZW5jZSBvZiBhIFBIWSwgdGhpcyBzaG91bGQgbm90IGJlIGNoYW5nZWQgYXMgdGhhdFxuMzAxNDpcdFx0XHQgKiAgIHNob3VsZCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIG1lZGlhIHNpZGUgYWR2ZXJ0aXNlbWVudC5cbjMwMTU6XHRcdFx0ICovXG4zMDE2Olx0XHRcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBsLVx1MDAzZXBoeWRldiwgXHUwMDI2cGh5X2tzZXQpO1xuMzAxNzpcdFx0fVxuMzAxODpcdFxuMzAxOTpcdFx0Y29uZmlnID0gcGwtXHUwMDNlbGlua19jb25maWc7XG4zMDIwOlx0XHQvKiBNYXNrIG91dCB1bnN1cHBvcnRlZCBhZHZlcnRpc2VtZW50cyAqL1xuMzAyMTpcdFx0bGlua21vZGVfYW5kKGNvbmZpZy5hZHZlcnRpc2luZywga3NldC1cdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nLFxuMzAyMjpcdFx0XHQgICAgIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4zMDIzOlx0XG4zMDI0Olx0XHQvKiBGSVhNRTogc2hvdWxkIHdlIHJlamVjdCBhdXRvbmVnIGlmIHBoeS9tYWMgZG9lcyBub3Qgc3VwcG9ydCBpdD8gKi9cbjMwMjU6XHRcdHN3aXRjaCAoa3NldC1cdTAwM2ViYXNlLmF1dG9uZWcpIHtcbjMwMjY6XHRcdGNhc2UgQVVUT05FR19ESVNBQkxFOlxuMzAyNzpcdFx0XHQvKiBBdXRvbmVnb3RpYXRpb24gZGlzYWJsZWQsIHNlbGVjdCBhIHN1aXRhYmxlIHNwZWVkIGFuZFxuMzAyODpcdFx0XHQgKiBkdXBsZXguXG4zMDI5Olx0XHRcdCAqL1xuMzAzMDpcdFx0XHRjID0gcGh5X2NhcHNfbG9va3VwKGtzZXQtXHUwMDNlYmFzZS5zcGVlZCwga3NldC1cdTAwM2ViYXNlLmR1cGxleCxcbjMwMzE6XHRcdFx0XHRcdCAgICBwbC1cdTAwM2VzdXBwb3J0ZWQsIGZhbHNlKTtcbjMwMzI6XHRcdFx0aWYgKCFjKVxuMzAzMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzAzNDpcdFxuMzAzNTpcdFx0XHQvKiBJZiB3ZSBoYXZlIGEgZml4ZWQgbGluaywgcmVmdXNlIHRvIGNoYW5nZSBsaW5rIHBhcmFtZXRlcnMuXG4zMDM2Olx0XHRcdCAqIElmIHRoZSBsaW5rIHBhcmFtZXRlcnMgbWF0Y2gsIGFjY2VwdCB0aGVtIGJ1dCBkbyBub3RoaW5nLlxuMzAzNzpcdFx0XHQgKi9cbjMwMzg6XHRcdFx0aWYgKHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7XG4zMDM5Olx0XHRcdFx0aWYgKGMtXHUwMDNlc3BlZWQgIT0gcGwtXHUwMDNlbGlua19jb25maWcuc3BlZWQgfHxcbjMwNDA6XHRcdFx0XHQgICAgYy1cdTAwM2VkdXBsZXggIT0gcGwtXHUwMDNlbGlua19jb25maWcuZHVwbGV4KVxuMzA0MTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDQyOlx0XHRcdFx0cmV0dXJuIDA7XG4zMDQzOlx0XHRcdH1cbjMwNDQ6XHRcbjMwNDU6XHRcdFx0Y29uZmlnLnNwZWVkID0gYy1cdTAwM2VzcGVlZDtcbjMwNDY6XHRcdFx0Y29uZmlnLmR1cGxleCA9IGMtXHUwMDNlZHVwbGV4O1xuMzA0NzpcdFx0XHRicmVhaztcbjMwNDg6XHRcbjMwNDk6XHRcdGNhc2UgQVVUT05FR19FTkFCTEU6XG4zMDUwOlx0XHRcdC8qIElmIHdlIGhhdmUgYSBmaXhlZCBsaW5rLCBhbGxvdyBhdXRvbmVnb3RpYXRpb24gKHNpbmNlIHRoYXRcbjMwNTE6XHRcdFx0ICogaXMgb3VyIGRlZmF1bHQgY2FzZSkgYnV0IGRvIG5vdCBhbGxvdyB0aGUgYWR2ZXJ0aXNlbWVudCB0b1xuMzA1MjpcdFx0XHQgKiBiZSBjaGFuZ2VkLiBJZiB0aGUgYWR2ZXJ0aXNlbWVudCBtYXRjaGVzLCBzaW1wbHkgcmV0dXJuLlxuMzA1MzpcdFx0XHQgKi9cbjMwNTQ6XHRcdFx0aWYgKHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7XG4zMDU1Olx0XHRcdFx0aWYgKCFsaW5rbW9kZV9lcXVhbChjb25maWcuYWR2ZXJ0aXNpbmcsXG4zMDU2Olx0XHRcdFx0XHRcdCAgICBwbC1cdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZykpXG4zMDU3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwNTg6XHRcdFx0XHRyZXR1cm4gMDtcbjMwNTk6XHRcdFx0fVxuMzA2MDpcdFxuMzA2MTpcdFx0XHRjb25maWcuc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuMzA2MjpcdFx0XHRjb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4zMDYzOlx0XHRcdGJyZWFrO1xuMzA2NDpcdFxuMzA2NTpcdFx0ZGVmYXVsdDpcbjMwNjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDY3Olx0XHR9XG4zMDY4Olx0XG4zMDY5Olx0XHQvKiBXZSBoYXZlIHJ1bGVkIG91dCB0aGUgY2FzZSB3aXRoIGEgUEhZIGF0dGFjaGVkLCBhbmQgdGhlXG4zMDcwOlx0XHQgKiBmaXhlZC1saW5rIGNhc2VzLiAgQWxsIHRoYXQgaXMgbGVmdCBhcmUgaW4tYmFuZCBsaW5rcy5cbjMwNzE6XHRcdCAqL1xuMzA3MjpcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9BdXRvbmVnX0JJVCwgY29uZmlnLmFkdmVydGlzaW5nLFxuMzA3MzpcdFx0XHRcdCBrc2V0LVx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSk7XG4zMDc0Olx0XG4zMDc1Olx0XHQvKiBJZiB0aGlzIGxpbmsgaXMgd2l0aCBhbiBTRlAsIGVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gYWR2ZXJ0aXNlZCBtb2Rlc1xuMzA3NjpcdFx0ICogYWxzbyBjYXVzZSB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UgdG8gYmUgc2VsZWN0ZWQgc3VjaCB0aGF0IHRoZVxuMzA3NzpcdFx0ICogbGluayBjYW4gYmUgY29uZmlndXJlZCBjb3JyZWN0bHkuXG4zMDc4Olx0XHQgKi9cbjMwNzk6XHRcdGlmIChwbC1cdTAwM2VzZnBfYnVzKSB7XG4zMDgwOlx0XHRcdGlmIChrc2V0LVx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSlcbjMwODE6XHRcdFx0XHRjb25maWcuaW50ZXJmYWNlID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuIE15IGluaXRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFNGUCBidXMsIGFuZCBJJiMzOTt2ZSBub3RlZCB0aGF0IHRoZSBpbnRlcmZhY2UgbW9kZSBpcyBzZWxlY3RlZCBoZXJlIHdoZW4gYHBsLSZndDtzZnBfYnVzYCBpcyBzZXQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBpdCBuYXJyb3dzIGRvd24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgaXMgaGFwcGVuaW5nLiBOb3csIEkgbmVlZCB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmZhY2Ugc2VsZWN0aW9uIHRpZXMgaW50byB0aGUgYnJvYWRlciBQSFkgbGluayBzZXR0aW5ncyBtYW5hZ2VtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcdFx0aWYgKGtzZXQtXHUwMDNlYmFzZS5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKVxuMzA4MTpcdFx0XHRcdGNvbmZpZy5pbnRlcmZhY2UgPVxuMzA4MjpcdFx0XHRcdFx0cGh5bGlua19zZnBfc2VsZWN0X2ludGVyZmFjZShwbCxcbjMwODM6XHRcdFx0XHRcdFx0XHRcdGNvbmZpZy5hZHZlcnRpc2luZyk7XG4zMDg0Olx0XHRcdGVsc2VcbjMwODU6XHRcdFx0XHRjb25maWcuaW50ZXJmYWNlID1cbjMwODY6XHRcdFx0XHRcdHBoeWxpbmtfc2ZwX3NlbGVjdF9pbnRlcmZhY2Vfc3BlZWQocGwsXG4zMDg3Olx0XHRcdFx0XHRcdFx0XHRjb25maWcuc3BlZWQpO1xuMzA4ODpcdFx0XHRpZiAoY29uZmlnLmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpXG4zMDg5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDkwOlx0XG4zMDkxOlx0XHRcdC8qIFJldmFsaWRhdGUgd2l0aCB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlICovXG4zMDkyOlx0XHRcdGxpbmttb2RlX2NvcHkoc3VwcG9ydCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbjMwOTM6XHRcdFx0aWYgKHBoeWxpbmtfdmFsaWRhdGUocGwsIHN1cHBvcnQsIFx1MDAyNmNvbmZpZykpIHtcbjMwOTQ6XHRcdFx0XHRwaHlsaW5rX2VycihwbCwgXCYjMzQ7dmFsaWRhdGlvbiBvZiAlcy8lcyB3aXRoIHN1cHBvcnQgJSpwYiBmYWlsZWRcXG5cJiMzNDssXG4zMDk1Olx0XHRcdFx0XHQgICAgcGh5bGlua19hbl9tb2RlX3N0cihwbC1cdTAwM2VyZXFfbGlua19hbl9tb2RlKSxcbjMwOTY6XHRcdFx0XHRcdCAgICBwaHlfbW9kZXMoY29uZmlnLmludGVyZmFjZSksXG4zMDk3Olx0XHRcdFx0XHQgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLCBzdXBwb3J0KTtcbjMwOTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMwOTk6XHRcdFx0fVxuMzEwMDpcdFx0fSBlbHNlIHtcbjMxMDE6XHRcdFx0LyogVmFsaWRhdGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgY3VycmVudCBzdXBwb3J0ZWQgbWFzay4gKi9cbjMxMDI6XHRcdFx0bGlua21vZGVfY29weShzdXBwb3J0LCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuMzEwMzpcdFx0XHRpZiAocGh5bGlua192YWxpZGF0ZShwbCwgc3VwcG9ydCwgXHUwMDI2Y29uZmlnKSlcbjMxMDQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMDU6XHRcdH1cbjMxMDY6XHRcbjMxMDc6XHRcdC8qIElmIGF1dG9uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB3ZSBtdXN0IGhhdmUgYW4gYWR2ZXJ0aXNlbWVudCAqL1xuMzEwODpcdFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0F1dG9uZWdfQklULFxuMzEwOTpcdFx0XHRcdCAgICAgIGNvbmZpZy5hZHZlcnRpc2luZykgXHUwMDI2XHUwMDI2XG4zMTEwOlx0XHQgICAgcGh5bGlua19pc19lbXB0eV9saW5rbW9kZShjb25maWcuYWR2ZXJ0aXNpbmcpKVxuMzExMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMTI6XHRcbjMxMTM6XHRcdC8qIFZhbGlkYXRlIHRoZSBhdXRvbmVnb3RpYXRpb24gc3RhdGUuIFdlIGRvbiYjMzk7dCBoYXZlIGEgUEhZIGluIHRoaXNcbjMxMTQ6XHRcdCAqIHNpdHVhdGlvbiwgc28gdGhlIFBDUyBpcyB0aGUgbWVkaWEtZmFjaW5nIGVudGl0eS5cbjMxMTU6XHRcdCAqL1xuMzExNjpcdFx0aWYgKCFwaHlsaW5rX3ZhbGlkYXRlX3Bjc19pbmJhbmRfYXV0b25lZyhwbCwgY29uZmlnLmludGVyZmFjZSxcbjMxMTc6XHRcdFx0XHRcdFx0XHQgY29uZmlnLmFkdmVydGlzaW5nKSlcbjMxMTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTE5Olx0XG4zMTIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbjMxMjE6XHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLnNwZWVkID0gY29uZmlnLnNwZWVkO1xuMzEyMjpcdFx0cGwtXHUwMDNlbGlua19jb25maWcuZHVwbGV4ID0gY29uZmlnLmR1cGxleDtcbjMxMjM6XHRcbjMxMjQ6XHRcdGlmIChwbC1cdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgIT0gY29uZmlnLmludGVyZmFjZSkge1xuMzEyNTpcdFx0XHQvKiBUaGUgaW50ZXJmYWNlIGNoYW5nZWQsIGUuZy4gMTAwMGJhc2UtWCBcdTAwM2MtXHUwMDNlIDI1MDBiYXNlLVggKi9cbjMxMjY6XHRcdFx0LyogV2UgbmVlZCB0byBmb3JjZSB0aGUgbGluayBkb3duLCB0aGVuIGNoYW5nZSB0aGUgaW50ZXJmYWNlICovXG4zMTI3Olx0XHRcdGlmIChwbC1cdTAwM2VvbGRfbGlua19zdGF0ZSkge1xuMzEyODpcdFx0XHRcdHBoeWxpbmtfbGlua19kb3duKHBsKTtcbjMxMjk6XHRcdFx0XHRwbC1cdTAwM2VvbGRfbGlua19zdGF0ZSA9IGZhbHNlO1xuMzEzMDpcdFx0XHR9XG4zMTMxOlx0XHRcdGlmICghdGVzdF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsXG4zMTMyOlx0XHRcdFx0ICAgICAgXHUwMDI2cGwtXHUwMDNlcGh5bGlua19kaXNhYmxlX3N0YXRlKSlcbjMxMzM6XHRcdFx0XHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFx1MDAyNmNvbmZpZyk7XG4zMTM0Olx0XHRcdHBsLVx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7XG4zMTM1Olx0XHRcdGxpbmttb2RlX2NvcHkocGwtXHUwMDNlbGlua19jb25maWcuYWR2ZXJ0aXNpbmcsIGNvbmZpZy5hZHZlcnRpc2luZyk7XG4zMTM2Olx0XHR9IGVsc2UgaWYgKCFsaW5rbW9kZV9lcXVhbChwbC1cdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZyxcbjMxMzc6XHRcdFx0XHRcdCAgIGNvbmZpZy5hZHZlcnRpc2luZykpIHtcbjMxMzg6XHRcdFx0bGlua21vZGVfY29weShwbC1cdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZywgY29uZmlnLmFkdmVydGlzaW5nKTtcbjMxMzk6XHRcdFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XG4zMTQwOlx0XHR9XG4zMTQxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuMzE0MjpcdFxuMzE0MzpcdFx0cmV0dXJuIDA7XG4zMTQ0Olx0fVxuMzE0NTpcdEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcbjMxNDY6XHRcbjMxNDc6XHQvKipcbjMxNDg6XHQgKiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCgpIC0gcmVzdGFydCBuZWdvdGlhdGlvblxuMzE0OTpcdCAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4zMTUwOlx0ICpcbjMxNTE6XHQgKiBSZXN0YXJ0IG5lZ290aWF0aW9uIGZvciB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsLiBUaGlzIHdpbGxcbjMxNTI6XHQgKiBjYXVzZSBhbnkgYXR0YWNoZWQgcGh5IHRvIHJlc3RhcnQgbmVnb3RpYXRpb24gd2l0aCB0aGUgbGluayBwYXJ0bmVyLCBhbmRcbjMxNTM6XHQgKiBpZiB0aGUgTUFDIGlzIGluIGEgQmFzZVggbW9kZSwgdGhlIE1BQyB3aWxsIGFsc28gYmUgcmVxdWVzdGVkIHRvIHJlc3RhcnRcbjMxNTQ6XHQgKiBuZWdvdGlhdGlvbi5cbjMxNTU6XHQgKlxuMzE1NjpcdCAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuMzE1NzpcdCAqL1xuMzE1ODpcdGludCBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChzdHJ1Y3QgcGh5bGluayAqcGwpXG4zMTU5Olx0e1xuMzE2MDpcdFx0aW50IHJldCA9IDA7XG4zMTYxOlx0XG4zMTYyOlx0XHRBU1NFUlRfUlROTCgpO1xuMzE2MzpcdFxuMzE2NDpcdFx0aWYgKHBsLVx1MDAzZXBoeWRldilcbjMxNjU6XHRcdFx0cmV0ID0gcGh5X3Jlc3RhcnRfYW5lZyhwbC1cdTAwM2VwaHlkZXYpO1xuMzE2NjpcdFx0cGh5bGlua19wY3NfYW5fcmVzdGFydChwbCk7XG4zMTY3Olx0XG4zMTY4Olx0XHRyZXR1cm4gcmV0O1xuMzE2OTpcdH1cbjMxNzA6XHRFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCk7XG4zMTcxOlx0XG4zMTcyOlx0LyoqXG4zMTczOlx0ICogcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKCkgLSBnZXQgdGhlIGN1cnJlbnQgcGF1c2UgcGFyYW1ldGVyc1xuMzE3NDpcdCAqIEBwbDogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpXG4zMTc1Olx0ICogQHBhdXNlOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtXG4zMTc2Olx0ICovXG4zMTc3Olx0dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuMzE3ODpcdFx0XHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxuMzE3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgUEhZIEludGVyZmFjZSBNb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaW50ZXJmYWNlIG1vZGUgaGFuZGxpbmcgYW5kIGl0IHNlZW1zIHRoZSBpbnRlcmZhY2UgbW9kZSBpc24mIzM5O3QgZGlyZWN0bHkgc2V0IGJ5IGBrc2V0YC4gSXQmIzM5O3MgZWl0aGVyIGxlZnQgYXMgaXMgb3Igc2VsZWN0ZWQgdGhyb3VnaCBgcGh5bGlua19zZnBfc2VsZWN0X2ludGVyZmFjZWAgaWYgdGhlIGBwbC0mZ3Q7c2ZwX2J1c2AgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCB0aGUgaGFyZHdhcmUgb3IgdGhlIGRldmljZSB0cmVlIGlzIHNldHRpbmcgdGhlIGludGVyZmFjZSBtb2RlLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGNvbWVzIGludG8gcGxheS4gU2luY2UgaXQmIzM5O3Mgb25seSB1c2VkIGJ5IHRoZSBgcWNhODA3eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBoeXNpY2FsIFBIWSBkcml2ZXIsIGl0IHNob3VsZG4mIzM5O3QgYmUgcG9zc2libGUgdG8gaGl0IHRoaXMgY29kZSBwYXRoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpCdXQgd2FpdCwgY2FuIGBwaHlsaW5rX2NyZWF0ZWAgZXZlbiBiZSBjYWxsZWQgd2l0aCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWA/IExldCBtZSBzZWXigKYgaXQgdGFrZXMgYSBgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWdgLiBUaGUgaW50ZXJmYWNlIG1vZGUgaXNuJiMzOTt0IGEgZGlyZWN0IGFyZ3VtZW50IGJ1dCBpcyBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9yIGRldmljZSB0cmVlLiBUaW1lIHRvIGNoZWNrIGZvciBhbnkgdmlydHVhbCBkcml2ZXJzIHRoYXQgdXNlIGBwaHlsaW5rYC4gV2UgYWxyZWFkeSBrbm93IGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAgdXNlcyBgbGFuNzh4eGAgKFVTQikuIE9rYXksIGJ1dCBkb2VzIGBsYW43OHh4YCB1c2UgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBOb3BlLiBBbmQgYXJlIHRoZXJlIGFueSBvdGhlcnM/IEkgYWxyZWFkeSBkaWQgYSBncmVwIGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgYW5kIGl0IG9ubHkgc2hvd3MgdXAgaW4gYHBoeS1jb3JlLmNgLCBgcGh5X2NhcHMuY2AsIGBwaHlsaW5rLmNgLCBgcWNhODA3eC5jYCwgYW5kIGBwaHkuaGAuIFNvIG5vIG5ldHdvcmsgZHJpdmVycyB1c2UgaXQgZGlyZWN0bHkuIEl04oCZcyBvbmx5IGluIHRoZSBgcWNhODA3eGAgUEhZIGRyaXZlci4KClRoZSBgcWNhODA3eGAgZHJpdmVyIGlzIGZvciBRdWFsY29tbSBRQ0E4MDd4IFBIWXMuIElzIGl0IGV2ZW4gKnBvc3NpYmxlKiB0byBpbnN0YW50aWF0ZSB0aGlzIFBIWSBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQW5kIGhvdyB3b3VsZCBmdXp6aW5nIHdvcms/IFN5emthbGxlciBjYW4gZnV6eiBQSFkgZHJpdmVycyAqaWYqIHRoZXkmIzM5O3JlIGF0dGFjaGVkIHRvIGEgdmlydHVhbCBNRElPIGJ1cy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzdXBwb3J0IGZvciBNRElPIGZ1enppbmc/IE5vLCBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgdmlydHVhbCBNRElPIGJ1cyBkcml2ZXIgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IFBIWXMuIEV2ZW4gaWYgaXQgZGlkLCB0aGUgcHJvcG9zZWQgY2hhbmdlIGhlcmUgaXMgcHJldHR5IG1pbm9yIOKAkyBpdCBqdXN0IGFkZHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIHRvIGEgc3dpdGNoIHN0YXRlbWVudCB0byByZXR1cm4gYElOQkFORF9DSVNDT19TR01JSWAgaW5zdGVhZCBvZiBgSU5CQU5EX05PTkVgLiBJdOKAmXMgZnVuY3Rpb25hbGx5IGEgc21hbGwgY2hhbmdlLgoKSWYgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCByZXR1cm5zIGBJTkJBTkRfQ0lTQ09fU0dNSUlgLCBpdCYjMzk7cyBnb2luZyB0byBhZmZlY3QgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gU28sIEkgbmVlZCB0byBsb29rIGludG8gYHBoeWxpbmtfcGNzX25lZ19tb2RlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDkwOlx0c3RhdGljIHZvaWQgcGh5bGlua19wY3NfbmVnX21vZGUoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbjEwOTE6XHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuMTA5MjpcdFx0XHRcdFx0IGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nKVxuMTA5MzpcdHtcbjEwOTQ6XHRcdHVuc2lnbmVkIGludCBwY3NfaWJfY2FwcyA9IDA7XG4xMDk1Olx0XHR1bnNpZ25lZCBpbnQgcGh5X2liX2NhcHMgPSAwO1xuMTA5NjpcdFx0dW5zaWduZWQgaW50IG5lZ19tb2RlLCBtb2RlO1xuMTA5NzpcdFx0ZW51bSBpbmJhbmRfdHlwZSB0eXBlO1xuMTA5ODpcdFxuMTA5OTpcdFx0dHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XG4xMTAwOlx0XHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xuMTEwMTpcdFx0XHRwbC1cdTAwM2VwY3NfbmVnX21vZGUgPSBQSFlMSU5LX1BDU19ORUdfTk9ORTtcbjExMDI6XHRcdFx0cGwtXHUwMDNlYWN0X2xpbmtfYW5fbW9kZSA9IHBsLVx1MDAzZXJlcV9saW5rX2FuX21vZGU7XG4xMTAzOlx0XHRcdHJldHVybjtcbjExMDQ6XHRcdH1cbjExMDU6XHRcbjExMDY6XHRcdG1vZGUgPSBwbC1cdTAwM2VyZXFfbGlua19hbl9tb2RlO1xuMTEwNzpcdFxuMTEwODpcdFx0cGwtXHUwMDNlcGh5X2liX21vZGUgPSAwO1xuMTEwOTpcdFxuMTExMDpcdFx0aWYgKHBjcylcbjExMTE6XHRcdFx0cGNzX2liX2NhcHMgPSBwaHlsaW5rX3Bjc19pbmJhbmRfY2FwcyhwY3MsIGludGVyZmFjZSk7XG4xMTEyOlx0XG4xMTEzOlx0XHRpZiAocGwtXHUwMDNlcGh5ZGV2KVxuMTExNDpcdFx0XHRwaHlfaWJfY2FwcyA9IHBoeV9pbmJhbmRfY2FwcyhwbC1cdTAwM2VwaHlkZXYsIGludGVyZmFjZSk7XG4xMTE1Olx0XG4xMTE2Olx0XHRwaHlsaW5rX2RiZyhwbCwgXCYjMzQ7aW50ZXJmYWNlICVzIGluYmFuZCBtb2RlczogcGNzPSUwMnggcGh5PSUwMnhcXG5cJiMzNDssXG4xMTE3Olx0XHRcdCAgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSwgcGNzX2liX2NhcHMsIHBoeV9pYl9jYXBzKTtcbjExMTg6XHRcbjExMTk6XHRcdGlmICghcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSkge1xuMTEyMDpcdFx0XHRib29sIHBjc19pYl9vbmx5ID0gZmFsc2U7XG4xMTIxOlx0XHRcdGJvb2wgcGh5X2liX29ubHkgPSBmYWxzZTtcbjExMjI6XHRcbjExMjM6XHRcdFx0aWYgKHBjc19pYl9jYXBzIFx1MDAyNlx1MDAyNiBwY3NfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XG4xMTI0Olx0XHRcdFx0LyogUENTIHN1cHBvcnRzIHJlcG9ydGluZyBpbi1iYW5kIGNhcGFiaWxpdGllcywgYW5kXG4xMTI1Olx0XHRcdFx0ICogc3VwcG9ydHMgbW9yZSB0aGFuIGRpc2FibGUgbW9kZS5cbjExMjY6XHRcdFx0XHQgKi9cbjExMjc6XHRcdFx0XHRpZiAocGNzX2liX2NhcHMgXHUwMDI2IExJTktfSU5CQU5EX0RJU0FCTEUpXG4xMTI4Olx0XHRcdFx0XHRuZWdfbW9kZSA9IFBIWUxJTktfUENTX05FR19PVVRCQU5EO1xuMTEyOTpcdFx0XHRcdGVsc2UgaWYgKHBjc19pYl9jYXBzIFx1MDAyNiBMSU5LX0lOQkFORF9FTkFCTEUpXG4xMTMwOlx0XHRcdFx0XHRwY3NfaWJfb25seSA9IHRydWU7XG4xMTMxOlx0XHRcdH1cbjExMzI6XHRcbjExMzM6XHRcdFx0aWYgKHBoeV9pYl9jYXBzIFx1MDAyNlx1MDAyNiBwaHlfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XG4xMTM0Olx0XHRcdFx0LyogUEhZIHN1cHBvcnRzIGluLWJhbmQgY2FwYWJpbGl0aWVzLCBhbmQgc3VwcG9ydHNcbjExMzU6XHRcdFx0XHQgKiBtb3JlIHRoYW4gZGlzYWJsZSBtb2RlLlxuMTEzNjpcdFx0XHRcdCAqL1xuMTEzNzpcdFx0XHRcdGlmIChwaHlfaWJfY2FwcyBcdTAwMjYgTElOS19JTkJBTkRfRElTQUJMRSlcbjExMzg6XHRcdFx0XHRcdHBsLVx1MDAzZXBoeV9pYl9tb2RlID0gTElOS19JTkJBTkRfRElTQUJMRTtcbjExMzk6XHRcdFx0XHRlbHNlIGlmIChwaHlfaWJfY2FwcyBcdTAwMjYgTElOS19JTkJBTkRfQllQQVNTKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM2OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgSW1wYWN0IG9mIGEgUmVjZW50IENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoZSBkaWZmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgLSBqdXN0IGFkZGluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhhdCBzd2l0Y2ggc3RhdGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7bWVoLCBub3Qgd29ydGggZnV6emluZy4mIzM0OyBJdCBsb29rcyBsaWtlIHRoaXMgc3BlY2lmaWMgbW9kZSBpcyBvbmx5IHJlbGV2YW50IHRvIHRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciwgYW5kIHRoZXJlJiMzOTtzIG5vIHdheSBpbiBoZWxsIEkmIzM5O20gZ29pbmcgdG8gc2VlIHRoYXQgaGFyZHdhcmUgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgY29kZSBwYXRoIGp1c3QgaXNuJiMzOTt0IHJlYWNoYWJsZSB3aXRob3V0IGl0LiBJdCBzZWVtcyBsaWtlIGEgZGVhZCBlbmQgZm9yIG5vdy4KCldhaXQgYSBzZWNvbmQgdGhvdWdoLi4uIGlzIGl0ICphY3R1YWxseSogdGhhdCBzaW1wbGU/IENhbiBJIGZvcmNlIHRoZSBpbnRlcmZhY2UgbW9kZSB0byBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdGhyb3VnaCBuZXRsaW5rIG9yIGJ5IHBsYXlpbmcgd2l0aCBzeXNmcz8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gSWYgSSAqY2FuKiBjb250cm9sIGl0IGZyb20gdXNlcnNwYWNlLCBldmVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbnQsIHRoZW4gdGhpcyBiZWNvbWVzIGZ1enphYmxlLCBhbmQgSSBzaG91bGQgcmVhbGx5IGNoZWNrLiBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIG1vZGUgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBzb21laG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NzAKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgTW9kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnRlcmZhY2UgbW9kZSwgYnV0IEkmIzM5O20gZHJhd2luZyBhIGJsYW5rIGluIGBuZXQvYC4gSSB2YWd1ZWx5IHJlY2FsbCBjaGVja2luZyBgZHJpdmVycy9uZXQvYCBwcmV2aW91c2x5LCBzcGVjaWZpY2FsbHkgdGhvc2UgcGh5LXJlbGF0ZWQgZmlsZXMg4oCTIGBwaHktY29yZS5jYCwgYHBoeV9jYXBzLmNgLCBgcGh5bGluay5jYCwgYW5kIGBxY2E4MDd4LmNgLiBNeSBlYXJsaWVyIGV4YW1pbmF0aW9uIGNvbmZpcm1zIHRoYXQgdGhlIGludGVyZmFjZSBtb2RlIGlzbiYjMzk7dCBiZWluZyBzZXQgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzIHRoZSBrZXkgdGFrZWF3YXkuIEl0JiMzOTtzIGRpY3RhdGVkIGVpdGhlciBieSB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvciB0aGUgZGV2aWNlIHRyZWUuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWxpemF0aW9uIHdvcmtzIOKAkyBzcGVjaWZpY2FsbHkgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUg4oCTIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggaXMgc2ltcGx5IGluYWNjZXNzaWJsZS4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHRyaWdnZXIgdGhlIGNvbmRpdGlvbnMgSSYjMzk7bSB0cnlpbmcgdG8gYW5hbHl6ZS4KCkkmIzM5O3ZlIGdvdCB0byBjb25jbHVkZSB0aGlzIGlzIG5vdCBhIGZydWl0ZnVsIGF2ZW51ZSBmb3IgZnV6emluZywgYW5kIEkgd2lsbCBiZSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDAyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlLiBUaGlzIGludGVyZmFjZSBtb2RlIGlzIG9ubHkgdXNlZCBieSB0aGUgUXVhbGNvbW0gUUNBODA3eCBwaHlzaWNhbCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIHZpcnR1YWxpemVkIG5ldHdvcmsgZHJpdmVycy4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NDIuNTE2MTkxMjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNzc1MTMxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcGh5bGlua19nZXRfaW5iYW5kX3R5cGUuIFRoaXMgaW50ZXJmYWNlIG1vZGUgaXMgb25seSB1c2VkIGJ5IHRoZSBRdWFsY29tbSBRQ0E4MDd4IHBoeXNpY2FsIFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYykgYW5kIGlzIG5vdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugb3IgdmlydHVhbGl6ZWQgbmV0d29yayBkcml2ZXJzLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NDIuNTE2MTk2NjMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc3MjY2NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmE5NGIyZTFhNGU0ODM1OTM4ZDA1ZjAwNTYzMWZhNjlmNzc0NjYzMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyA4IDAyOjQ5OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuaW5kZXggMThkMmVhZDk3YWE1NC4uOTgzYTFhM2NlZTM3NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xcbkBAIC0xMDQwLDYgKzEwNDAsNyBAQCBzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbiB7XFxuIFxcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbitcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NDMuNzk0MDc0NzUyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTk4OTk2MTY1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTk0YjJlMWE0ZTQ4MzU5MzhkMDVmMDA1NjMxZmE2OWY3NzQ2NjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwMjo0OTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCAxOGQyZWFkOTdhYTU0Li45ODNhMWEzY2VlMzc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTEwNDAsNiArMTA0MCw3IEBAIHN0YXRpYyBlbnVtIGluYmFuZF90eXBlIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuIFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo0My43OTQwNzU4OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2OTk0ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkFuYWx5emluZyBhIFBIWSBJbnRlcmZhY2UgTW9kZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCwgYW5kIGl0IHNlZW1zIHRvIGhhdmUgdG91Y2hlZCB0aGUgYHBoeWxpbmsuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9uZXQvcGh5L2AgZGlyZWN0b3J5LiBUaGUgbW9kaWZpY2F0aW9uIGlzIGFkZGluZyBzdXBwb3J0IGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgd2l0aGluIHRoZSBgcGh5bGlua19nZXRfaW5iYW5kX3R5cGVgIGZ1bmN0aW9uLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBpdCBtZWFucyBzb21lb25lJ3MgaW50cm9kdWNpbmcgb3IgZW5hYmxpbmcgc3VwcG9ydCBmb3IgYSBzcGVjaWZpYyBQSFkgaW50ZXJmYWNlIG1vZGUsIFBTR01JSSwgd2l0aGluIHRoZSBwaHlsaW5rIGZyYW1ld29yay4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbmV3IG1vZGUgaXMgYmVpbmcgaGFuZGxlZC4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgc2VlbXMgd2UgYXJlIHN1cHBvcnRpbmcgc29tZSBuZXcgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjQ5OjQ2LjkzMTA3MzE3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MTk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2dldF9pbmJhbmRfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTAzMz1lbnVtIGluYmFuZF90eXBlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTAzOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwMzk6c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDkwPXN0YXRpYyB2b2lkIHBoeWxpbmtfcGNzX25lZ19tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEwOTgtXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMDk5OlxcdHR5cGUgPSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShpbnRlcmZhY2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTEwMC1cXHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU2PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzgwNzpcXHRpbmJhbmRfdHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zODA4LVxcdGlmIChpbmJhbmRfdHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo0Ni45NzUyMzg2MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgwMTgxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBQSFlMaW5rIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHJlbGF0aXZlbHkgbWlub3Igb25lLCBmb2N1c2luZyBvbiBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSB1cGRhdGluZyBhIHN3aXRjaCBzdGF0ZW1lbnQuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIGFkZGl0aW9uIG9mIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0byB0aGUgaW50ZXJmYWNlIGxpc3QuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgaW50ZW50IGlzIHRvIG5vdyBoYXZlIHRoaXMgaW50ZXJmYWNlIHJldHVybiBgSU5CQU5EX1NHTUlJYCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBgSU5CQU5EX05PTkVgLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgcmVhbGx5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoYXQgYHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlYCBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdOKAmXMgc3RydWN0dXJlZCBhbmQgd2hhdCBvdGhlciBpbnRlcmZhY2VzIGFyZSBjdXJyZW50bHkgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgbG9naWMgd2lsbCBiZSBjcnVjaWFsIHRvIGZ1bGx5IGFwcHJlY2lhdGluZyB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBjaGFuZ2UgYW5kIGNvbmZpcm1pbmcgaXTigJlzIHRoZSBjb3JyZWN0IGNvdXJzZSBvZiBhY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBhZGRpdGlvbiBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBQSFlMaW5rIGFyY2hpdGVjdHVyZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NTAuNjU1NDIzMTIzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAzOTpcXHRzdGF0aWMgZW51bSBpbmJhbmRfdHlwZSBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZShwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbjEwNDA6XFx0e1xcbjEwNDE6XFx0XFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4xMDQyOlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbjEwNDM6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbjEwNDQ6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVNHTUlJOlxcbjEwNDU6XFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUVVTR01JSTpcXG4xMDQ2OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XFxuMTA0NzpcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdfUVhHTUlJOlxcbjEwNDg6XFx0XFx0XFx0LyogVGhlc2UgcHJvdG9jb2xzIGFyZSBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYSBQSFkgd2hpY2hcXG4xMDQ5OlxcdFxcdFxcdCAqIGNvbW11bmljYXRlcyBpdHMgbmVnb3RpYXRpb24gcmVzdWx0IGJhY2sgdG8gdGhlIE1BQyB2aWFcXG4xMDUwOlxcdFxcdFxcdCAqIGluYmFuZCBjb21tdW5pY2F0aW9uLiBOb3RlOiB0aGVyZSBleGlzdCBQSFlzIHRoYXQgcnVuXFxuMTA1MTpcXHRcXHRcXHQgKiB3aXRoIFNHTUlJIGJ1dCBkbyBub3Qgc2VuZCB0aGUgaW5iYW5kIGRhdGEuXFxuMTA1MjpcXHRcXHRcXHQgKi9cXG4xMDUzOlxcdFxcdFxcdHJldHVybiBJTkJBTkRfQ0lTQ09fU0dNSUk7XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcXG4xMDU2OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4xMDU3OlxcdFxcdFxcdC8qIDEwMDBiYXNlLVggaXMgZGVzaWduZWQgZm9yIHVzZSBtZWRpYS1zaWRlIGZvciBGaWJyZVxcbjEwNTg6XFx0XFx0XFx0ICogY29ubmVjdGlvbnMsIGFuZCB0aHVzIHRoZSBBdXRvbmVnIGJpdCBuZWVkcyB0byBiZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo1MC42NTU2MDQyMDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEwNzE2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBTbWFsbCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIOKAkyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIGNvbnN0YW50IHdpdGhpbiBhIGBzd2l0Y2hgIHN0YXRlbWVudC4gU2VlbXMgdHJpdmlhbCwgZG9lc24ndCBpdD8gQnV0LCBhcyBhbHdheXMsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIElzIGl0IHdvcnRoIHB1dHRpbmcgaXQgdGhyb3VnaCBmdXp6aW5nP1xuXG5UaGUgY2hhbmdlIGltcGFjdHMgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gSSBpbW1lZGlhdGVseSB0aGluayBcIm5ldHdvcmsgUEhZIGxpbmsgbWFuYWdlbWVudCxcIiB3aGljaCBvZnRlbiBtZWFucyBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHZlcnkgc3BlY2lmaWMgc2V0dXBzLiBTRlAgbW9kdWxlcywgUEhZcy4uLiB0aGF0J3MgdGhlIHVzdWFsIHRlcnJpdG9yeS4gVGhlIGNvbm5lY3Rpb25zIGFyZSBgcGh5bGlua19tYWpvcl9jb25maWdgIGFuZCBgcGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydGAuXG5cbk15IGluaXRpYWwgZ3V0IHJlYWN0aW9uIGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzP1wiIFN5emthbGxlciBpcyBncmVhdCB3aXRoIHRoaW5ncyBsaWtlIG5ldGxpbmsgaW50ZXJmYWNlcywgYnV0IGEgbG90IG9mIFBIWSBsaW5rIG1hbmFnZW1lbnQgSSd2ZSBkZWFsdCB3aXRoIGlzIHRyaWdnZXJlZCBieSBoYXJkd2FyZSBldmVudHMgb3IgZXRodG9vbCBjb21tYW5kcy4gSXQncyBub3QgdXN1YWxseSBhIGRpcmVjdCB1c2VyLXNwYWNlIHRoaW5nLiBUaGUgcXVlc3Rpb24gaXMgaWYgdGhlcmUncyBhbnkgdXNlci1zcGFjZSBwYXRoIHRvIHRoaXMuIGBwaHlsaW5rX3Bjc19uZWdfbW9kZWAgaXMgY2FsbGVkIGZyb20gYHBoeWxpbmtfbWFqb3JfY29uZmlnYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBwaHlsaW5rX21ham9yX2NvbmZpZ2AgaXMgY2FsbGVkLCBhbmQgZnJvbSB3aGVyZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NTUuMTY2MzIzMDQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzIxNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfbWFqb3JfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xMDkwPXN0YXRpYyB2b2lkIHBoeWxpbmtfcGNzX25lZ19tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTEyMzktXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxMjQwOnN0YXRpYyB2b2lkIHBoeWxpbmtfbWFqb3JfY29uZmlnKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCByZXN0YXJ0LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTI0MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xNDU1PXN0YXRpYyB2b2lkIHBoeWxpbmtfbWFjX2luaXRpYWxfY29uZmlnKHN0cnVjdCBwaHlsaW5rICpwbCwgYm9vbCBmb3JjZV9yZXN0YXJ0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNDgzLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnBoeS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxNDg0OlxcdHBoeWxpbmtfbWFqb3JfY29uZmlnKHBsLCBmb3JjZV9yZXN0YXJ0LCBcXHUwMDI2bGlua19zdGF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNDg1LVxcdGlmIChwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE2MTY9c3RhdGljIHZvaWQgcGh5bGlua19yZXNvbHZlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTcwNi1cXHRcXHR9XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxNzA3OlxcdFxcdHBoeWxpbmtfbWFqb3JfY29uZmlnKHBsLCBmYWxzZSwgXFx1MDAyNmxpbmtfc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTcwOC1cXHRcXHRwbC1cXHUwMDNlbGlua19jb25maWcuaW50ZXJmYWNlID0gbGlua19zdGF0ZS5pbnRlcmZhY2U7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5ODI9aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzEzMi1cXHRcXHRcXHQgICAgICBcXHUwMDI2cGwtXFx1MDAzZXBoeWxpbmtfZGlzYWJsZV9zdGF0ZSkpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMTMzOlxcdFxcdFxcdHBoeWxpbmtfbWFqb3JfY29uZmlnKHBsLCBmYWxzZSwgXFx1MDAyNmNvbmZpZyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTM0LVxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBjb25maWcuaW50ZXJmYWNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo1NS4yMDk2NDcyOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyNzQzMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGZ1bmN0aW9ucy4gTXkgZmlyc3QgdGhvdWdodCBpcyBhYm91dCBob3cgb25lIGludGVyYWN0cyB3aXRoIGl0LiBDYW4gaXQgYmUgcmVhY2hlZCB2aWEgYGV0aHRvb2xgPyBZZXAsIGl0IGxvb2tzIGxpa2UgdGhhdCdzIHRoZSBwYXRoLiBCdXQgaGVyZSdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgY2FsbCBwYXRoIGhhdmUgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBJcyBpdCBvbmx5IHJlbGV2YW50IHRvIHZlcnkgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zP1xuXG5EaWdnaW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgYnkgZHJpdmVycyB0aGF0IHV0aWxpemUgdGhlIHBoeWxpbmsgZnJhbWV3b3JrLiBOb3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGluIHRoZSBjb250ZXh0IG9mIGZ1enppbmcuIFN5emthbGxlciBoYXMgYSBidW5jaCBvZiB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVycyDigJMgYHZldGhgLCBgdHVuYCwgYG1hY3NlY2AsIHRoaW5ncyBsaWtlIHRoYXQuIFRoZSBrZXkgbm93IGlzOiBhcmUgYW55IG9mIHRob3NlIHZpcnR1YWwgZHJpdmVycyBhY3R1YWxseSB1c2luZyBgcGh5bGlua2A/IElmIHNvLCB0aGlzIGJlY29tZXMgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBmb3IgdGVzdGluZyBhbmQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo0OTo1OC43NzIzOTIxMDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzg5MjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfZXRodG9vbC5jPTIyND1zdGF0aWMgaW50IHRzZV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfZXRodG9vbC5jLTIyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9ldGh0b29sLmM6MjI5OlxcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChwcml2LVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX2V0aHRvb2wuYy0yMzAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz00NzI9c3RhdGljIGludCBhZzcxeHhfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy00NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo0Nzc6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KGFnLVxcdTAwM2VwaHlsaW5rLCBrc2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTQ3OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTM2OTA9c3RhdGljIGludCBtYWNiX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zNjk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzY5NTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoYnAtXFx1MDAzZXBoeWxpbmssIGtzZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzY5Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aHRvb2wuYz02NT1zdGF0aWMgaW50IGRwYWFfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmMtNzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmM6NzE6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KG1hY19kZXYtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGh0b29sLmMtNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYz0xMjc9ZHBhYTJfZXRoX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMTM1LVxcdGlmIChkcGFhMl9ldGhfaXNfdHlwZV9waHkocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYzoxMzY6XFx0XFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocHJpdi1cXHUwMDNlbWFjLVxcdTAwM2VwaHlsaW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMTM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rX3NldHRpbmdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1zd2l0Y2gtZXRodG9vbC5jPTEwMD1kcGFhMl9zd2l0Y2hfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLWV0aHRvb2wuYy0xMTEtXFx0aWYgKGRwYWEyX3N3aXRjaF9wb3J0X2lzX3R5cGVfcGh5KHBvcnRfcHJpdikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItc3dpdGNoLWV0aHRvb2wuYzoxMTI6XFx0XFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydF9wcml2LVxcdTAwM2VtYWMtXFx1MDAzZXBoeWxpbmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXN3aXRjaC1ldGh0b29sLmMtMTEzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rX2tzZXR0aW5ncyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jPTEyNzc9c3RhdGljIGludCBlbmV0Y19zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMtMTI4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jOjEyODU6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHByaXYtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYy0xMjg2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jPTc5Nj1zdGF0aWMgaW50IGZzX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy04MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM6ODAxOlxcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChmZXAtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtODAyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aF9ldGh0b29sLmM9MTEyPXVlY19zZXRfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGhfZXRodG9vbC5jLTExNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGhfZXRodG9vbC5jOjExNzpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodWdldGgtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoX2V0aHRvb2wuYy0xMTgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz00NzAwPW12bmV0YV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNDcwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjQ3MDU6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNDcwNi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYz01NTg1PXN0YXRpYyBpbnQgbXZwcDJfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTU1OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM6NTU5MzpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocG9ydC1cXHUwMDNlcGh5bGluaywgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy01NTk0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfZXRodG9vbC5jPTY0Nj1wcmVzdGVyYV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ldGh0b29sLmMtNjU0LVxcdGlmIChwb3J0LVxcdTAwM2VwaHlfbGluaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2V0aHRvb2wuYzo2NTU6XFx0XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXFx1MDAzZXBoeV9saW5rLCBlY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2V0aHRvb2wuYy02NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTQ1NDc9c3RhdGljIGludCBtdGtfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy00NTU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6NDU1NTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQobWFjLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtNDU1Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmM9MTA5MD1sYW43NDN4X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmMtMTA5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmM6MTA5NTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoYWRhcHRlci1cXHUwMDNlcGh5bGluaywgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuNzQzeF9ldGh0b29sLmMtMTA5Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYz01MTY9c3RhdGljIGludCBsYW45NjZ4X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L2xhbjk2NnhfZXRodG9vbC5jLTUyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9sYW45NjZ4X2V0aHRvb2wuYzo1MjE6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvbGFuOTY2eF9ldGh0b29sLmMtNTIyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYz0xMTUxPXN0YXRpYyBpbnQgc3Bhcng1X3NldF9saW5rX3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfZXRodG9vbC5jLTExNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfZXRodG9vbC5jOjExNTY6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBvcnQtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfZXRodG9vbC5jLTExNTctfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0zMjk9c3RtbWFjX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTMzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjMzNDpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQocHJpdi1cXHUwMDNlcGh5bGluaywgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jLTMzNS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jPTUwNT1hbTY1X2Nwc3dfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LWV0aHRvb2wuYy01MDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvYW02NS1jcHN3LWV0aHRvb2wuYzo1MTA6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHNhbHZlLVxcdTAwM2VwaHlsaW5rLCBlY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctZXRodG9vbC5jLTUxMS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz0yNTY9aW50IHd4X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtMjYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjI2MTpcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQod3gtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtMjYyLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmM9MjI5MT1heGllbmV0X2V0aHRvb2xzX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMjI5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jOjIyOTY6XFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KGxwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMtMjI5Ny19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTI5NTc9c3RhdGljIGJvb2wgcGh5bGlua192YWxpZGF0ZV9wY3NfaW5iYW5kX2F1dG9uZWcoc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTc3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk3ODogKiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCgpIC0gc2V0IHRoZSBsaW5rIHNldHRpbmdzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTc5LSAqIEBwbDogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yOTgxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6Mjk4MjppbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0IHBoeWxpbmsgKnBsLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMTQ0LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjMxNDU6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTg2MT1zdGF0aWMgaW50IGxhbjc4eHhfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE4NjUtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxODY2OlxcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChkZXYtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xODY3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NDk6NTguOTAwMjkwNjY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTUyMTcwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIE5ldHdvcmsgRHJpdmVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IG1ha2luZyB0aGUgY29ubmVjdGlvbiDigJMgdGhpcyBgbGFuNzh4eGAgZHJpdmVyIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCByaWdodD8gQW5kIHdlIGtub3cgU3l6a2FsbGVyIGNhbiBmdXp6IFVTQiBkcml2ZXJzLCBib3RoIHRocm91Z2ggdGhlIGBkdW1teV9oY2RgIGFuZCByYXcgZ2FkZ2V0IGFwcHJvYWNoZXMuIFRoYXQgbWVhbnMgd2UgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGluc3RhbnRpYXRlIHRoaXMgYGxhbjc4eHhgIGRyaXZlciBhbmQgc3RhcnQgZXhlcmNpc2luZyBpdHMgZXRodG9vbCBvcGVyYXRpb25zLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lcywgZG9lcyB0aGlzIGRyaXZlciB1dGlsaXplIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MDIuNjU1NTA5OTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczMTkwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDowMi43MDIyNDY2OTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0OTcwNjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIFVzYWdlKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgcHJldHR5IGNsZWFyOiB0aGUgYGxhbjc4eHhgIGRyaXZlciAqZG9lc24ndCogdXNlIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYC4gVGhhdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gaW52ZXN0aWdhdGUgKndoZXJlKiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgKmlzKiBhY3R1YWxseSBlbXBsb3llZCBpbiB0aGUga2VybmVsJ3MgRXRoZXJuZXQgZHJpdmVyIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgYW5kIHJlbGV2YW5jZS4gSSdsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBhbGwgaW5zdGFuY2VzIG9mIHRoYXQgbWFjcm8gd2l0aGluIHRoZSByZWxldmFudCBkcml2ZXIgc291cmNlIGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMuIEZyb20gdGhlcmUsIEknbGwgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggZGV2aWNlcyBvciBjaGlwc2V0cyBsZXZlcmFnZSB0aGlzIGludGVyZmFjZSBtb2RlIGFuZCB3aHkuIEtub3dpbmcgdGhlIHNwZWNpZmljIGRldmljZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBpdHMgY2hhcmFjdGVyaXN0aWNzIGFuZCBjYXBhYmlsaXRpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBmdWxsZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgbmV0d29yayBpbnRlcmZhY2UgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MDUuODUxOTU1NTAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0NTUwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAxLVxcdFxcdHJldHVybiA0O1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjIwMjpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAzLVxcdFxcdHJldHVybiA1O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Mjk0PXVuc2lnbmVkIGxvbmcgcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOD1zdGF0aWMgaW50IHBoeWxpbmtfaW50ZXJmYWNlX21heF9zcGVlZChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTktXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Nzc0PXN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODA4LVxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6ODA5OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgxMC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzk9c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0Mi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0NC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NDkwPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTQ5LVxcdFxcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUwOlxcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJKSkpXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NTItXFx0XFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1ODY6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODctXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MDUuOTgyNDE0OTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDA4OTUwNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNlIG9mIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUkqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB1c2VkIHdpdGhpbiB0aGUgYHFjYTgwN3guY2AgZmlsZSwgd2hpY2ggaXMgYSBRdWFsY29tbSBQSFkgZHJpdmVyIGluIHRoZSBuZXR3b3JrIGRyaXZlciBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBwYXJ0aWN1bGFyIGludGVyZmFjZSBtb2RlIGV4Y2x1c2l2ZWx5IGZvciBwaHlzaWNhbCBpbnRlcmZhY2VzLCBvciBjb3VsZCBpdCBwb3RlbnRpYWxseSBiZSB1c2VkIGluIGEgdmlydHVhbCBkcml2ZXIgY29udGV4dCBhcyB3ZWxsPyBUaGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGtub3cuIFRvIGFuc3dlciB0aGlzLCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgdXNhZ2UgcGF0dGVybi4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIGFueSBvdGhlciBkcml2ZXJzLCB2aXJ0dWFsIG9yIG90aGVyd2lzZSwgYXJlIGFjdHVhbGx5IGVtcGxveWluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgYXBwbGljYXRpb24gYmVmb3JlIG1ha2luZyBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjA5LjgyMzMxMjEyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjU3NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD0yMzg9U29tZSBvZiB0aGUgaW50ZXJmYWNlIG1vZGVzIGFyZSBkZXNjcmliZWQgYmVsb3c6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zMjUtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6MzI2OmBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWBgXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzI3LSAgICBUaGlzIGlzIHRoZSBQZW50YSBTR01JSSBtb2RlLCBpdCBpcyBzaW1pbGFyIHRvIFFTR01JSSBidXQgaXQgY29tYmluZXMgNVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmM9MTU5PWludCBwaHlfaW50ZXJmYWNlX251bV9wb3J0cyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAxLVxcdFxcdHJldHVybiA0O1xcbmRyaXZlcnMvbmV0L3BoeS9waHktY29yZS5jOjIwMjpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jb3JlLmMtMjAzLVxcdFxcdHJldHVybiA1O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmM9Mjk0PXVuc2lnbmVkIGxvbmcgcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYzozMTE6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jLTMxMi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIzOD1zdGF0aWMgaW50IHBoeWxpbmtfaW50ZXJmYWNlX21heF9zcGVlZChwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yNTktXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyNjA6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjYxLVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1FTR01JSTpcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9Nzc0PXN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtODA4LVxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6ODA5OlxcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTgxMC1cXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTEwMzk9c3RhdGljIGVudW0gaW5iYW5kX3R5cGUgcGh5bGlua19nZXRfaW5iYW5kX3R5cGUocGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0Mi1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjEwNDM6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTA0NC1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NDkwPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTQ5LVxcdFxcdGlmICghc3RyY2FzZWNtcChwYWNrYWdlX21vZGVfbmFtZSxcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6NTUwOlxcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJKSkpXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjU1MTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwYWNrYWdlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01NTItXFx0XFx0ZWxzZSBpZiAoIXN0cmNhc2VjbXAocGFja2FnZV9tb2RlX25hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NTYyPXN0YXRpYyBpbnQgcWNhODA3eF9waHlfcGFja2FnZV9jb25maWdfaW5pdF9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNTg1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo1ODY6XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy01ODctXFx0ZGVmYXVsdDpcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9NTM9ZXh0ZXJuIGNvbnN0IGludCBwaHlfYmFzaWNfcG9ydHNfYXJyYXlbM107XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTg5LSAqIEBQSFlfSU5URVJGQUNFX01PREVfTU9DQTogTXVsdGltZWRpYSBvdmVyIENvYXhcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjkwOiAqIEBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJOiBQZW50YSBTR01JSVxcbmluY2x1ZGUvbGludXgvcGh5LmgtOTEtICogQFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUk6IFF1YWQgU0dNSUlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MTE0PXR5cGVkZWYgZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTEzMi1cXHRQSFlfSU5URVJGQUNFX01PREVfTU9DQSxcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjEzMzpcXHRQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJLFxcbmluY2x1ZGUvbGludXgvcGh5LmgtMTM0LVxcdFBIWV9JTlRFUkZBQ0VfTU9ERV9RU0dNSUksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxMD1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBoeV9tb2RlcyhwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yNDgtXFx0XFx0cmV0dXJuIFxcXCJtb2NhXFxcIjtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjI0OTpcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUk6XFxuaW5jbHVkZS9saW51eC9waHkuaC0yNTAtXFx0XFx0cmV0dXJuIFxcXCJwc2dtaWlcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoxMS4zODk4OTIwNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MTA1MzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgdGhhdCB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIG1vZGUgaXMgb25seSB1c2VkIGJ5IHRoZSBgcWNhODA3eC5jYCBkcml2ZXIsIHdoaWNoIGlzIGEgcGh5c2ljYWwgUEhZIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIFFDQTgwN3guIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBkcml2ZXIsIGl0J3MgcHJldHR5IHVubGlrZWx5IHRoYXQgc3l6a2FsbGVyLCBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGlzIGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRoaXMgY29kZSBwYXRoIGRpcmVjdGx5LiBUaGF0IHNlZW1zIGxpa2UgYSBwcmV0dHkgc2FmZSBhc3N1bXB0aW9uLCBpbml0aWFsbHkuXG5cbkJ1dCB3YWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIENvdWxkIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAgYmUgY2FsbGVkIHdpdGggYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgPyBJIG5lZWQgdG8gY2hlY2sgdGhhdC4gTGV0IG1lIGxvb2sgY2xvc2VyLiBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgIHRha2VzIGEgYGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0YCBhcmd1bWVudC4gTXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBga3NldGAgc3RydWN0dXJlIGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgbW9kZT8gRG9lcyB0aGF0IHN0cnVjdHVyZSBjb250YWluIHRoZSBgUEhZX0lOVEVSRkFDRV9NT0RFYCB2YWx1ZXM/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gYXNjZXJ0YWluLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGlzIGlzIHBvdGVudGlhbGx5IHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGNvdWxkIGJlLCBldmVuIGlmIHRoZSBwcmltYXJ5IGRyaXZlciBpc24ndCBkaXJlY3RseSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoxNS43NjA5NDc0OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjQ0ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yOTU3PXN0YXRpYyBib29sIHBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3Ny0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5Nzg6ICogcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoKSAtIHNldCB0aGUgbGluayBzZXR0aW5nc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk3OS0gKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjk4MS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjI5ODI6aW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTI5ODMtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqa3NldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzE0NC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozMTQ1OkVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMxNDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjE1LjgwNjU5NDc5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTA3NTc3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCBhZnRlciBhIHF1aWNrIHNjYW4sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGRvbWFpbjpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYW1lIHRlbGxzIG1lIGV4YWN0bHkgd2hhdCB0aGlzIGlzIGFpbWluZyB0byBkby4gSXQncyBhIGtlcm5lbCBmdW5jdGlvbiwgb2J2aW91c2x5LiBgcGh5bGlua2Agc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggUEhZIChQaHlzaWNhbCBMYXllcikgZGV2aWNlIGNvbnRyb2wsIHZlcnkgbGlrZWx5IGZvY3VzZWQgb24gRXRoZXJuZXQuIFRoZSBcImV0aHRvb2xcIiBpbmNsdXNpb24gaXMga2V5OyBpdCdzIHRoZSBzdGFuZGFyZCB1dGlsaXR5IGZvciBjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMsIHNvIHRoaXMgZnVuY3Rpb24ncyBqb2IgaXMgdG8gdHJhbnNsYXRlIHRob3NlIHVzZXItc3BhY2UgZXRodG9vbCBzZXR0aW5ncyBpbnRvIHNvbWV0aGluZyB0aGUgUEhZIGl0c2VsZiBjYW4gdW5kZXJzdGFuZCBhbmQgdXRpbGl6ZS4gXCJrc2V0dGluZ3NcIiBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhpcyAtIHdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgc2V0dGluZ3MgdGhhdCBhcmUgaW50ZW5kZWQgdG8gbWFuaXB1bGF0ZSB0aGUgUEhZIHZpYSB0aGUgcGh5bGluayBmcmFtZXdvcmsuIFRoZSBcInNldFwiIGF0IHRoZSBlbmQgY2xlYXJseSBkZWZpbmVzIHRoaXMgZnVuY3Rpb24gYXMgYSBzZXR0ZXIgLSB3ZSdyZSBjaGFuZ2luZyBzb21ldGhpbmcsIG5vdCByZXRyaWV2aW5nIGl0LlxuXG5JbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFdlJ2xsIGJlIHdvcmtpbmcgd2l0aCB0aGUgcGh5bGluayBvYmplY3QgaXRzZWxmLCBjZXJ0YWlubHkuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIHNldHRpbmdzIGFyZSBiZWluZyB0YXJnZXRlZCwgYW5kIGhvdyB0aGF0IGluZm9ybWF0aW9uIGlzIG1hcHBlZCB0byB0aGUgaW50ZXJuYWwgcmVnaXN0ZXJzIG9yIG1lY2hhbmlzbXMgb2YgdGhlIFBIWSBkcml2ZXIuIExpa2VseSwgdGhlcmUncyBhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCB0aGUgcG9zc2libGUgZXRodG9vbCBjb25maWd1cmF0aW9ucywgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBhbmQgdHJhbnNsYXRpbmcgdGhvc2UgcGFyYW1ldGVycy5cblxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBlcnJvciBjb25kaXRpb25zIOKAkyBpbnZhbGlkIHNldHRpbmdzLCB1bnN1cHBvcnRlZCBmZWF0dXJlcywgaGFyZHdhcmUgbGltaXRhdGlvbnMuIFRoZSBmdW5jdGlvbiBuZWVkcyB0byBoYW5kbGUgdGhvc2UgZ3JhY2VmdWxseSwgcmV0dXJuaW5nIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzIGFuZCBwZXJoYXBzIHByb3ZpZGluZyBkZWJ1ZyBtZXNzYWdlcy4gVGhlcmUncyBhbHNvIHRoZSBxdWVzdGlvbiBvZiBzeW5jaHJvbml6YXRpb247IGlmIHRoaXMgZnVuY3Rpb24gaXMgbW9kaWZ5aW5nIGhhcmR3YXJlIHNldHRpbmdzLCBjb25jdXJyZW50IGFjY2VzcyBmcm9tIG90aGVyIHRocmVhZHMgb3IgaW50ZXJydXB0cyBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gcGxhY2UsIGlmIG5vdCBJIHdvdWxkIGhhdmUgdG8gcmV2aWV3IHRob3NlLlxuXG5UaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IGluZmx1ZW5jaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBBIGZsYXdlZCBpbXBsZW1lbnRhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gZHJvcHBlZCBjb25uZWN0aW9ucywgaW5jb3JyZWN0IGxpbmsgc3BlZWRzLCBvciBldmVuIHN5c3RlbSBpbnN0YWJpbGl0eS4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciB2YWxpZGF0aW9uLCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSBhbnRpY2lwYXRlIGl0IHdpbGwgaW50ZXJmYWNlIHdpdGggdGhlIFBIWSBkcml2ZXIsIGNhbGxpbmcgaXRzIGZ1bmN0aW9ucyBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBMZXQncyBzZWUgaG93IGl0IGFjaGlldmVzIHRoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzI2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MjEuOTE0MTc1NDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5ODIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTgyOlxcdGludCBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChzdHJ1Y3QgcGh5bGluayAqcGwsXFxuMjk4MzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICprc2V0KVxcbjI5ODQ6XFx0e1xcbjI5ODU6XFx0XFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc3VwcG9ydCk7XFxuMjk4NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbGlua19jYXBhYmlsaXRpZXMgKmM7XFxuMjk4NzpcXHRcXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlIGNvbmZpZztcXG4yOTg4OlxcdFxcbjI5ODk6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4yOTkwOlxcdFxcbjI5OTE6XFx0XFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpIHtcXG4yOTkyOlxcdFxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIHBoeV9rc2V0ID0gKmtzZXQ7XFxuMjk5MzpcXHRcXG4yOTk0OlxcdFxcdFxcdGxpbmttb2RlX2FuZChwaHlfa3NldC5saW5rX21vZGVzLmFkdmVydGlzaW5nLFxcbjI5OTU6XFx0XFx0XFx0XFx0ICAgICBwaHlfa3NldC5saW5rX21vZGVzLmFkdmVydGlzaW5nLFxcbjI5OTY6XFx0XFx0XFx0XFx0ICAgICBwbC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4yOTk3OlxcdFxcbjI5OTg6XFx0XFx0XFx0LyogV2UgY2FuIHJlbHkgb24gcGh5bGliIGZvciB0aGlzIHVwZGF0ZTsgd2UgYWxzbyBkbyBub3QgbmVlZFxcbjI5OTk6XFx0XFx0XFx0ICogdG8gdXBkYXRlIHRoZSBwbC1cXHUwMDNlbGlua19jb25maWcgc2V0dGluZ3M6XFxuMzAwMDpcXHRcXHRcXHQgKiAtIHRoZSBjb25maWd1cmF0aW9uIHJldHVybmVkIHZpYSBrc2V0dGluZ3NfZ2V0KCkgd2lsbCBjb21lXFxuMzAwMTpcXHRcXHRcXHQgKiAgIGZyb20gcGh5bGliIHdoZW5ldmVyIGEgUEhZIGlzIHByZXNlbnQuXFxuMzAwMjpcXHRcXHRcXHQgKiAtIGxpbmtfY29uZmlnLmludGVyZmFjZSB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIFBIWSBjYWxsaW5nXFxuMzAwMzpcXHRcXHRcXHQgKiAgIGJhY2sgdmlhIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCBhIHN1YnNlcXVlbnQgcmVzb2x2ZS5cXG4zMDA0OlxcdFxcdFxcdCAqIC0gaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24gZm9yIFBIWSBtb2RlIGNvbWVzIGZyb20gdGhlXFxuMzAwNTpcXHRcXHRcXHQgKiAgIGxhc3QgcGh5IHN0YXRlIHVwZGF0ZWQgdmlhIHBoeWxpbmtfcGh5X2NoYW5nZSgpLlxcbjMwMDY6XFx0XFx0XFx0ICogLSBvdGhlciBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGUuZy4gcGF1c2UgbW9kZXMpIGFyZVxcbjMwMDc6XFx0XFx0XFx0ICogICBwZXJmb3JtZWQgZGlyZWN0bHkgdmlhIHBoeWxpYi5cXG4zMDA4OlxcdFxcdFxcdCAqIC0gaWYgaW4gaW4tYmFuZCBtb2RlIHdpdGggYSBQSFksIHRoZSBsaW5rIGNvbmZpZ3VyYXRpb25cXG4zMDA5OlxcdFxcdFxcdCAqICAgaXMgcGFzc2VkIG9uIHRoZSBsaW5rIGZyb20gdGhlIFBIWSwgYW5kIGFsbCBvZlxcbjMwMTA6XFx0XFx0XFx0ICogICBsaW5rX2NvbmZpZy57c3BlZWQsZHVwbGV4LGFuX2VuYWJsZWQscGF1c2V9IGFyZSBub3QgdXNlZC5cXG4zMDExOlxcdFxcdFxcdCAqIC0gdGhlIG9ubHkgcG9zc2libGUgdXNlIHdvdWxkIGJlIGxpbmtfY29uZmlnLmFkdmVydGlzaW5nXFxuMzAxMjpcXHRcXHRcXHQgKiAgIHBhdXNlIG1vZGVzIHdoZW4gaW4gMTAwMGJhc2UtWCBtb2RlIHdpdGggYSBQSFksIGJ1dCBpblxcbjMwMTM6XFx0XFx0XFx0ICogICB0aGUgcHJlc2VuY2Ugb2YgYSBQSFksIHRoaXMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFzIHRoYXRcXG4zMDE0OlxcdFxcdFxcdCAqICAgc2hvdWxkIGJlIGRldGVybWluZWQgZnJvbSB0aGUgbWVkaWEgc2lkZSBhZHZlcnRpc2VtZW50LlxcbjMwMTU6XFx0XFx0XFx0ICovXFxuMzAxNjpcXHRcXHRcXHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwbC1cXHUwMDNlcGh5ZGV2LCBcXHUwMDI2cGh5X2tzZXQpO1xcbjMwMTc6XFx0XFx0fVxcbjMwMTg6XFx0XFxuMzAxOTpcXHRcXHRjb25maWcgPSBwbC1cXHUwMDNlbGlua19jb25maWc7XFxuMzAyMDpcXHRcXHQvKiBNYXNrIG91dCB1bnN1cHBvcnRlZCBhZHZlcnRpc2VtZW50cyAqL1xcbjMwMjE6XFx0XFx0bGlua21vZGVfYW5kKGNvbmZpZy5hZHZlcnRpc2luZywga3NldC1cXHUwMDNlbGlua19tb2Rlcy5hZHZlcnRpc2luZyxcXG4zMDIyOlxcdFxcdFxcdCAgICAgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuMzAyMzpcXHRcXG4zMDI0OlxcdFxcdC8qIEZJWE1FOiBzaG91bGQgd2UgcmVqZWN0IGF1dG9uZWcgaWYgcGh5L21hYyBkb2VzIG5vdCBzdXBwb3J0IGl0PyAqL1xcbjMwMjU6XFx0XFx0c3dpdGNoIChrc2V0LVxcdTAwM2ViYXNlLmF1dG9uZWcpIHtcXG4zMDI2OlxcdFxcdGNhc2UgQVVUT05FR19ESVNBQkxFOlxcbjMwMjc6XFx0XFx0XFx0LyogQXV0b25lZ290aWF0aW9uIGRpc2FibGVkLCBzZWxlY3QgYSBzdWl0YWJsZSBzcGVlZCBhbmRcXG4zMDI4OlxcdFxcdFxcdCAqIGR1cGxleC5cXG4zMDI5OlxcdFxcdFxcdCAqL1xcbjMwMzA6XFx0XFx0XFx0YyA9IHBoeV9jYXBzX2xvb2t1cChrc2V0LVxcdTAwM2ViYXNlLnNwZWVkLCBrc2V0LVxcdTAwM2ViYXNlLmR1cGxleCxcXG4zMDMxOlxcdFxcdFxcdFxcdFxcdCAgICBwbC1cXHUwMDNlc3VwcG9ydGVkLCBmYWxzZSk7XFxuMzAzMjpcXHRcXHRcXHRpZiAoIWMpXFxuMzAzMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMDM0OlxcdFxcbjMwMzU6XFx0XFx0XFx0LyogSWYgd2UgaGF2ZSBhIGZpeGVkIGxpbmssIHJlZnVzZSB0byBjaGFuZ2UgbGluayBwYXJhbWV0ZXJzLlxcbjMwMzY6XFx0XFx0XFx0ICogSWYgdGhlIGxpbmsgcGFyYW1ldGVycyBtYXRjaCwgYWNjZXB0IHRoZW0gYnV0IGRvIG5vdGhpbmcuXFxuMzAzNzpcXHRcXHRcXHQgKi9cXG4zMDM4OlxcdFxcdFxcdGlmIChwbC1cXHUwMDNlcmVxX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHtcXG4zMDM5OlxcdFxcdFxcdFxcdGlmIChjLVxcdTAwM2VzcGVlZCAhPSBwbC1cXHUwMDNlbGlua19jb25maWcuc3BlZWQgfHxcXG4zMDQwOlxcdFxcdFxcdFxcdCAgICBjLVxcdTAwM2VkdXBsZXggIT0gcGwtXFx1MDAzZWxpbmtfY29uZmlnLmR1cGxleClcXG4zMDQxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNDI6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA0MzpcXHRcXHRcXHR9XFxuMzA0NDpcXHRcXG4zMDQ1OlxcdFxcdFxcdGNvbmZpZy5zcGVlZCA9IGMtXFx1MDAzZXNwZWVkO1xcbjMwNDY6XFx0XFx0XFx0Y29uZmlnLmR1cGxleCA9IGMtXFx1MDAzZWR1cGxleDtcXG4zMDQ3OlxcdFxcdFxcdGJyZWFrO1xcbjMwNDg6XFx0XFxuMzA0OTpcXHRcXHRjYXNlIEFVVE9ORUdfRU5BQkxFOlxcbjMwNTA6XFx0XFx0XFx0LyogSWYgd2UgaGF2ZSBhIGZpeGVkIGxpbmssIGFsbG93IGF1dG9uZWdvdGlhdGlvbiAoc2luY2UgdGhhdFxcbjMwNTE6XFx0XFx0XFx0ICogaXMgb3VyIGRlZmF1bHQgY2FzZSkgYnV0IGRvIG5vdCBhbGxvdyB0aGUgYWR2ZXJ0aXNlbWVudCB0b1xcbjMwNTI6XFx0XFx0XFx0ICogYmUgY2hhbmdlZC4gSWYgdGhlIGFkdmVydGlzZW1lbnQgbWF0Y2hlcywgc2ltcGx5IHJldHVybi5cXG4zMDUzOlxcdFxcdFxcdCAqL1xcbjMwNTQ6XFx0XFx0XFx0aWYgKHBsLVxcdTAwM2VyZXFfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCkge1xcbjMwNTU6XFx0XFx0XFx0XFx0aWYgKCFsaW5rbW9kZV9lcXVhbChjb25maWcuYWR2ZXJ0aXNpbmcsXFxuMzA1NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGwtXFx1MDAzZWxpbmtfY29uZmlnLmFkdmVydGlzaW5nKSlcXG4zMDU3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNTg6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA1OTpcXHRcXHRcXHR9XFxuMzA2MDpcXHRcXG4zMDYxOlxcdFxcdFxcdGNvbmZpZy5zcGVlZCA9IFNQRUVEX1VOS05PV047XFxuMzA2MjpcXHRcXHRcXHRjb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuMzA2MzpcXHRcXHRcXHRicmVhaztcXG4zMDY0OlxcdFxcbjMwNjU6XFx0XFx0ZGVmYXVsdDpcXG4zMDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwNjc6XFx0XFx0fVxcbjMwNjg6XFx0XFxuMzA2OTpcXHRcXHQvKiBXZSBoYXZlIHJ1bGVkIG91dCB0aGUgY2FzZSB3aXRoIGEgUEhZIGF0dGFjaGVkLCBhbmQgdGhlXFxuMzA3MDpcXHRcXHQgKiBmaXhlZC1saW5rIGNhc2VzLiAgQWxsIHRoYXQgaXMgbGVmdCBhcmUgaW4tYmFuZCBsaW5rcy5cXG4zMDcxOlxcdFxcdCAqL1xcbjMwNzI6XFx0XFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9BdXRvbmVnX0JJVCwgY29uZmlnLmFkdmVydGlzaW5nLFxcbjMwNzM6XFx0XFx0XFx0XFx0IGtzZXQtXFx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSk7XFxuMzA3NDpcXHRcXG4zMDc1OlxcdFxcdC8qIElmIHRoaXMgbGluayBpcyB3aXRoIGFuIFNGUCwgZW5zdXJlIHRoYXQgY2hhbmdlcyB0byBhZHZlcnRpc2VkIG1vZGVzXFxuMzA3NjpcXHRcXHQgKiBhbHNvIGNhdXNlIHRoZSBhc3NvY2lhdGVkIGludGVyZmFjZSB0byBiZSBzZWxlY3RlZCBzdWNoIHRoYXQgdGhlXFxuMzA3NzpcXHRcXHQgKiBsaW5rIGNhbiBiZSBjb25maWd1cmVkIGNvcnJlY3RseS5cXG4zMDc4OlxcdFxcdCAqL1xcbjMwNzk6XFx0XFx0aWYgKHBsLVxcdTAwM2VzZnBfYnVzKSB7XFxuMzA4MDpcXHRcXHRcXHRpZiAoa3NldC1cXHUwMDNlYmFzZS5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKVxcbjMwODE6XFx0XFx0XFx0XFx0Y29uZmlnLmludGVyZmFjZSA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjIxLjkxNDczNDM1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg5OTYxMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgLiBNeSBpbml0aWFsIHBvaW50IG9mIGludGVyZXN0IGlzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTRlAgYnVzLCBhbmQgSSd2ZSBub3RlZCB0aGF0IHRoZSBpbnRlcmZhY2UgbW9kZSBpcyBzZWxlY3RlZCBoZXJlIHdoZW4gYHBsLVx1MDAzZXNmcF9idXNgIGlzIHNldC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgaXQgbmFycm93cyBkb3duIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGlzIGhhcHBlbmluZy4gTm93LCBJIG5lZWQgdG8gc2VlIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIHNlbGVjdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgUEhZIGxpbmsgc2V0dGluZ3MgbWFuYWdlbWVudC4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoyNS4xMDQ2OTg3ODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzA4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODA6XFx0XFx0XFx0aWYgKGtzZXQtXFx1MDAzZWJhc2UuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSlcXG4zMDgxOlxcdFxcdFxcdFxcdGNvbmZpZy5pbnRlcmZhY2UgPVxcbjMwODI6XFx0XFx0XFx0XFx0XFx0cGh5bGlua19zZnBfc2VsZWN0X2ludGVyZmFjZShwbCxcXG4zMDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbmZpZy5hZHZlcnRpc2luZyk7XFxuMzA4NDpcXHRcXHRcXHRlbHNlXFxuMzA4NTpcXHRcXHRcXHRcXHRjb25maWcuaW50ZXJmYWNlID1cXG4zMDg2OlxcdFxcdFxcdFxcdFxcdHBoeWxpbmtfc2ZwX3NlbGVjdF9pbnRlcmZhY2Vfc3BlZWQocGwsXFxuMzA4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb25maWcuc3BlZWQpO1xcbjMwODg6XFx0XFx0XFx0aWYgKGNvbmZpZy5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxcbjMwODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzA5MDpcXHRcXG4zMDkxOlxcdFxcdFxcdC8qIFJldmFsaWRhdGUgd2l0aCB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlICovXFxuMzA5MjpcXHRcXHRcXHRsaW5rbW9kZV9jb3B5KHN1cHBvcnQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbjMwOTM6XFx0XFx0XFx0aWYgKHBoeWxpbmtfdmFsaWRhdGUocGwsIHN1cHBvcnQsIFxcdTAwMjZjb25maWcpKSB7XFxuMzA5NDpcXHRcXHRcXHRcXHRwaHlsaW5rX2VycihwbCwgXFxcInZhbGlkYXRpb24gb2YgJXMvJXMgd2l0aCBzdXBwb3J0ICUqcGIgZmFpbGVkXFxcXG5cXFwiLFxcbjMwOTU6XFx0XFx0XFx0XFx0XFx0ICAgIHBoeWxpbmtfYW5fbW9kZV9zdHIocGwtXFx1MDAzZXJlcV9saW5rX2FuX21vZGUpLFxcbjMwOTY6XFx0XFx0XFx0XFx0XFx0ICAgIHBoeV9tb2Rlcyhjb25maWcuaW50ZXJmYWNlKSxcXG4zMDk3OlxcdFxcdFxcdFxcdFxcdCAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsIHN1cHBvcnQpO1xcbjMwOTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzA5OTpcXHRcXHRcXHR9XFxuMzEwMDpcXHRcXHR9IGVsc2Uge1xcbjMxMDE6XFx0XFx0XFx0LyogVmFsaWRhdGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgY3VycmVudCBzdXBwb3J0ZWQgbWFzay4gKi9cXG4zMTAyOlxcdFxcdFxcdGxpbmttb2RlX2NvcHkoc3VwcG9ydCwgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuMzEwMzpcXHRcXHRcXHRpZiAocGh5bGlua192YWxpZGF0ZShwbCwgc3VwcG9ydCwgXFx1MDAyNmNvbmZpZykpXFxuMzEwNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTA1OlxcdFxcdH1cXG4zMTA2OlxcdFxcbjMxMDc6XFx0XFx0LyogSWYgYXV0b25lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHdlIG11c3QgaGF2ZSBhbiBhZHZlcnRpc2VtZW50ICovXFxuMzEwODpcXHRcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXV0b25lZ19CSVQsXFxuMzEwOTpcXHRcXHRcXHRcXHQgICAgICBjb25maWcuYWR2ZXJ0aXNpbmcpIFxcdTAwMjZcXHUwMDI2XFxuMzExMDpcXHRcXHQgICAgcGh5bGlua19pc19lbXB0eV9saW5rbW9kZShjb25maWcuYWR2ZXJ0aXNpbmcpKVxcbjMxMTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzExMjpcXHRcXG4zMTEzOlxcdFxcdC8qIFZhbGlkYXRlIHRoZSBhdXRvbmVnb3RpYXRpb24gc3RhdGUuIFdlIGRvbid0IGhhdmUgYSBQSFkgaW4gdGhpc1xcbjMxMTQ6XFx0XFx0ICogc2l0dWF0aW9uLCBzbyB0aGUgUENTIGlzIHRoZSBtZWRpYS1mYWNpbmcgZW50aXR5LlxcbjMxMTU6XFx0XFx0ICovXFxuMzExNjpcXHRcXHRpZiAoIXBoeWxpbmtfdmFsaWRhdGVfcGNzX2luYmFuZF9hdXRvbmVnKHBsLCBjb25maWcuaW50ZXJmYWNlLFxcbjMxMTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNvbmZpZy5hZHZlcnRpc2luZykpXFxuMzExODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTE5OlxcdFxcbjMxMjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4zMTIxOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5zcGVlZCA9IGNvbmZpZy5zcGVlZDtcXG4zMTIyOlxcdFxcdHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5kdXBsZXggPSBjb25maWcuZHVwbGV4O1xcbjMxMjM6XFx0XFxuMzEyNDpcXHRcXHRpZiAocGwtXFx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSAhPSBjb25maWcuaW50ZXJmYWNlKSB7XFxuMzEyNTpcXHRcXHRcXHQvKiBUaGUgaW50ZXJmYWNlIGNoYW5nZWQsIGUuZy4gMTAwMGJhc2UtWCBcXHUwMDNjLVxcdTAwM2UgMjUwMGJhc2UtWCAqL1xcbjMxMjY6XFx0XFx0XFx0LyogV2UgbmVlZCB0byBmb3JjZSB0aGUgbGluayBkb3duLCB0aGVuIGNoYW5nZSB0aGUgaW50ZXJmYWNlICovXFxuMzEyNzpcXHRcXHRcXHRpZiAocGwtXFx1MDAzZW9sZF9saW5rX3N0YXRlKSB7XFxuMzEyODpcXHRcXHRcXHRcXHRwaHlsaW5rX2xpbmtfZG93bihwbCk7XFxuMzEyOTpcXHRcXHRcXHRcXHRwbC1cXHUwMDNlb2xkX2xpbmtfc3RhdGUgPSBmYWxzZTtcXG4zMTMwOlxcdFxcdFxcdH1cXG4zMTMxOlxcdFxcdFxcdGlmICghdGVzdF9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsXFxuMzEzMjpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGwtXFx1MDAzZXBoeWxpbmtfZGlzYWJsZV9zdGF0ZSkpXFxuMzEzMzpcXHRcXHRcXHRcXHRwaHlsaW5rX21ham9yX2NvbmZpZyhwbCwgZmFsc2UsIFxcdTAwMjZjb25maWcpO1xcbjMxMzQ6XFx0XFx0XFx0cGwtXFx1MDAzZWxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7XFxuMzEzNTpcXHRcXHRcXHRsaW5rbW9kZV9jb3B5KHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZywgY29uZmlnLmFkdmVydGlzaW5nKTtcXG4zMTM2OlxcdFxcdH0gZWxzZSBpZiAoIWxpbmttb2RlX2VxdWFsKHBsLVxcdTAwM2VsaW5rX2NvbmZpZy5hZHZlcnRpc2luZyxcXG4zMTM3OlxcdFxcdFxcdFxcdFxcdCAgIGNvbmZpZy5hZHZlcnRpc2luZykpIHtcXG4zMTM4OlxcdFxcdFxcdGxpbmttb2RlX2NvcHkocGwtXFx1MDAzZWxpbmtfY29uZmlnLmFkdmVydGlzaW5nLCBjb25maWcuYWR2ZXJ0aXNpbmcpO1xcbjMxMzk6XFx0XFx0XFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XFxuMzE0MDpcXHRcXHR9XFxuMzE0MTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuMzE0MjpcXHRcXG4zMTQzOlxcdFxcdHJldHVybiAwO1xcbjMxNDQ6XFx0fVxcbjMxNDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQpO1xcbjMxNDY6XFx0XFxuMzE0NzpcXHQvKipcXG4zMTQ4OlxcdCAqIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KCkgLSByZXN0YXJ0IG5lZ290aWF0aW9uXFxuMzE0OTpcXHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4zMTUwOlxcdCAqXFxuMzE1MTpcXHQgKiBSZXN0YXJ0IG5lZ290aWF0aW9uIGZvciB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsLiBUaGlzIHdpbGxcXG4zMTUyOlxcdCAqIGNhdXNlIGFueSBhdHRhY2hlZCBwaHkgdG8gcmVzdGFydCBuZWdvdGlhdGlvbiB3aXRoIHRoZSBsaW5rIHBhcnRuZXIsIGFuZFxcbjMxNTM6XFx0ICogaWYgdGhlIE1BQyBpcyBpbiBhIEJhc2VYIG1vZGUsIHRoZSBNQUMgd2lsbCBhbHNvIGJlIHJlcXVlc3RlZCB0byByZXN0YXJ0XFxuMzE1NDpcXHQgKiBuZWdvdGlhdGlvbi5cXG4zMTU1OlxcdCAqXFxuMzE1NjpcXHQgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZS5cXG4zMTU3OlxcdCAqL1xcbjMxNTg6XFx0aW50IHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4zMTU5OlxcdHtcXG4zMTYwOlxcdFxcdGludCByZXQgPSAwO1xcbjMxNjE6XFx0XFxuMzE2MjpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjMxNjM6XFx0XFxuMzE2NDpcXHRcXHRpZiAocGwtXFx1MDAzZXBoeWRldilcXG4zMTY1OlxcdFxcdFxcdHJldCA9IHBoeV9yZXN0YXJ0X2FuZWcocGwtXFx1MDAzZXBoeWRldik7XFxuMzE2NjpcXHRcXHRwaHlsaW5rX3Bjc19hbl9yZXN0YXJ0KHBsKTtcXG4zMTY3OlxcdFxcbjMxNjg6XFx0XFx0cmV0dXJuIHJldDtcXG4zMTY5OlxcdH1cXG4zMTcwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KTtcXG4zMTcxOlxcdFxcbjMxNzI6XFx0LyoqXFxuMzE3MzpcXHQgKiBwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oKSAtIGdldCB0aGUgY3VycmVudCBwYXVzZSBwYXJhbWV0ZXJzXFxuMzE3NDpcXHQgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4zMTc1OlxcdCAqIEBwYXVzZTogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW1cXG4zMTc2OlxcdCAqL1xcbjMxNzc6XFx0dm9pZCBwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxcbjMxNzg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbjMxNzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDoyNS4xMDQ5NTQ1NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4Nzg0MTAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQSFkgSW50ZXJmYWNlIE1vZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaW50ZXJmYWNlIG1vZGUgaGFuZGxpbmcgYW5kIGl0IHNlZW1zIHRoZSBpbnRlcmZhY2UgbW9kZSBpc24ndCBkaXJlY3RseSBzZXQgYnkgYGtzZXRgLiBJdCdzIGVpdGhlciBsZWZ0IGFzIGlzIG9yIHNlbGVjdGVkIHRocm91Z2ggYHBoeWxpbmtfc2ZwX3NlbGVjdF9pbnRlcmZhY2VgIGlmIHRoZSBgcGwtXHUwMDNlc2ZwX2J1c2AgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCB0aGUgaGFyZHdhcmUgb3IgdGhlIGRldmljZSB0cmVlIGlzIHNldHRpbmcgdGhlIGludGVyZmFjZSBtb2RlLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgYFBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlgIGNvbWVzIGludG8gcGxheS4gU2luY2UgaXQncyBvbmx5IHVzZWQgYnkgdGhlIGBxY2E4MDd4YCBkcml2ZXIsIHdoaWNoIGlzIGEgcGh5c2ljYWwgUEhZIGRyaXZlciwgaXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGhpdCB0aGlzIGNvZGUgcGF0aCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5CdXQgd2FpdCwgY2FuIGBwaHlsaW5rX2NyZWF0ZWAgZXZlbiBiZSBjYWxsZWQgd2l0aCBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWA/IExldCBtZSBzZWXigKYgaXQgdGFrZXMgYSBgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWdgLiBUaGUgaW50ZXJmYWNlIG1vZGUgaXNuJ3QgYSBkaXJlY3QgYXJndW1lbnQgYnV0IGlzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlIHRyZWUuIFRpbWUgdG8gY2hlY2sgZm9yIGFueSB2aXJ0dWFsIGRyaXZlcnMgdGhhdCB1c2UgYHBoeWxpbmtgLiBXZSBhbHJlYWR5IGtub3cgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0YCB1c2VzIGBsYW43OHh4YCAoVVNCKS4gT2theSwgYnV0IGRvZXMgYGxhbjc4eHhgIHVzZSBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWA/IE5vcGUuIEFuZCBhcmUgdGhlcmUgYW55IG90aGVycz8gSSBhbHJlYWR5IGRpZCBhIGdyZXAgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCBhbmQgaXQgb25seSBzaG93cyB1cCBpbiBgcGh5LWNvcmUuY2AsIGBwaHlfY2Fwcy5jYCwgYHBoeWxpbmsuY2AsIGBxY2E4MDd4LmNgLCBhbmQgYHBoeS5oYC4gU28gbm8gbmV0d29yayBkcml2ZXJzIHVzZSBpdCBkaXJlY3RseS4gSXTigJlzIG9ubHkgaW4gdGhlIGBxY2E4MDd4YCBQSFkgZHJpdmVyLlxuXG5UaGUgYHFjYTgwN3hgIGRyaXZlciBpcyBmb3IgUXVhbGNvbW0gUUNBODA3eCBQSFlzLiBJcyBpdCBldmVuICpwb3NzaWJsZSogdG8gaW5zdGFudGlhdGUgdGhpcyBQSFkgZHJpdmVyIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFuZCBob3cgd291bGQgZnV6emluZyB3b3JrPyBTeXprYWxsZXIgY2FuIGZ1enogUEhZIGRyaXZlcnMgKmlmKiB0aGV5J3JlIGF0dGFjaGVkIHRvIGEgdmlydHVhbCBNRElPIGJ1cy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzdXBwb3J0IGZvciBNRElPIGZ1enppbmc/IE5vLCBpdCBkb2Vzbid0IGhhdmUgYSB2aXJ0dWFsIE1ESU8gYnVzIGRyaXZlciB0byBpbnN0YW50aWF0ZSBhcmJpdHJhcnkgUEhZcy4gRXZlbiBpZiBpdCBkaWQsIHRoZSBwcm9wb3NlZCBjaGFuZ2UgaGVyZSBpcyBwcmV0dHkgbWlub3Ig4oCTIGl0IGp1c3QgYWRkcyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gYSBzd2l0Y2ggc3RhdGVtZW50IHRvIHJldHVybiBgSU5CQU5EX0NJU0NPX1NHTUlJYCBpbnN0ZWFkIG9mIGBJTkJBTkRfTk9ORWAuIEl04oCZcyBmdW5jdGlvbmFsbHkgYSBzbWFsbCBjaGFuZ2UuXG5cbklmIGBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZWAgcmV0dXJucyBgSU5CQU5EX0NJU0NPX1NHTUlJYCwgaXQncyBnb2luZyB0byBhZmZlY3QgYHBoeWxpbmtfcGNzX25lZ19tb2RlYCBhbmQgYHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsYC4gU28sIEkgbmVlZCB0byBsb29rIGludG8gYHBoeWxpbmtfcGNzX25lZ19tb2RlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDozNC41OTI3OTc4NTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5MDpcXHRzdGF0aWMgdm9pZCBwaHlsaW5rX3Bjc19uZWdfbW9kZShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbjEwOTE6XFx0XFx0XFx0XFx0XFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXFxuMTA5MjpcXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcpXFxuMTA5MzpcXHR7XFxuMTA5NDpcXHRcXHR1bnNpZ25lZCBpbnQgcGNzX2liX2NhcHMgPSAwO1xcbjEwOTU6XFx0XFx0dW5zaWduZWQgaW50IHBoeV9pYl9jYXBzID0gMDtcXG4xMDk2OlxcdFxcdHVuc2lnbmVkIGludCBuZWdfbW9kZSwgbW9kZTtcXG4xMDk3OlxcdFxcdGVudW0gaW5iYW5kX3R5cGUgdHlwZTtcXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0dHlwZSA9IHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlKGludGVyZmFjZSk7XFxuMTEwMDpcXHRcXHRpZiAodHlwZSA9PSBJTkJBTkRfTk9ORSkge1xcbjExMDE6XFx0XFx0XFx0cGwtXFx1MDAzZXBjc19uZWdfbW9kZSA9IFBIWUxJTktfUENTX05FR19OT05FO1xcbjExMDI6XFx0XFx0XFx0cGwtXFx1MDAzZWFjdF9saW5rX2FuX21vZGUgPSBwbC1cXHUwMDNlcmVxX2xpbmtfYW5fbW9kZTtcXG4xMTAzOlxcdFxcdFxcdHJldHVybjtcXG4xMTA0OlxcdFxcdH1cXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0bW9kZSA9IHBsLVxcdTAwM2VyZXFfbGlua19hbl9tb2RlO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRwbC1cXHUwMDNlcGh5X2liX21vZGUgPSAwO1xcbjExMDk6XFx0XFxuMTExMDpcXHRcXHRpZiAocGNzKVxcbjExMTE6XFx0XFx0XFx0cGNzX2liX2NhcHMgPSBwaHlsaW5rX3Bjc19pbmJhbmRfY2FwcyhwY3MsIGludGVyZmFjZSk7XFxuMTExMjpcXHRcXG4xMTEzOlxcdFxcdGlmIChwbC1cXHUwMDNlcGh5ZGV2KVxcbjExMTQ6XFx0XFx0XFx0cGh5X2liX2NhcHMgPSBwaHlfaW5iYW5kX2NhcHMocGwtXFx1MDAzZXBoeWRldiwgaW50ZXJmYWNlKTtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0cGh5bGlua19kYmcocGwsIFxcXCJpbnRlcmZhY2UgJXMgaW5iYW5kIG1vZGVzOiBwY3M9JTAyeCBwaHk9JTAyeFxcXFxuXFxcIixcXG4xMTE3OlxcdFxcdFxcdCAgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSwgcGNzX2liX2NhcHMsIHBoeV9pYl9jYXBzKTtcXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0aWYgKCFwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKG1vZGUpKSB7XFxuMTEyMDpcXHRcXHRcXHRib29sIHBjc19pYl9vbmx5ID0gZmFsc2U7XFxuMTEyMTpcXHRcXHRcXHRib29sIHBoeV9pYl9vbmx5ID0gZmFsc2U7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdFxcdGlmIChwY3NfaWJfY2FwcyBcXHUwMDI2XFx1MDAyNiBwY3NfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XFxuMTEyNDpcXHRcXHRcXHRcXHQvKiBQQ1Mgc3VwcG9ydHMgcmVwb3J0aW5nIGluLWJhbmQgY2FwYWJpbGl0aWVzLCBhbmRcXG4xMTI1OlxcdFxcdFxcdFxcdCAqIHN1cHBvcnRzIG1vcmUgdGhhbiBkaXNhYmxlIG1vZGUuXFxuMTEyNjpcXHRcXHRcXHRcXHQgKi9cXG4xMTI3OlxcdFxcdFxcdFxcdGlmIChwY3NfaWJfY2FwcyBcXHUwMDI2IExJTktfSU5CQU5EX0RJU0FCTEUpXFxuMTEyODpcXHRcXHRcXHRcXHRcXHRuZWdfbW9kZSA9IFBIWUxJTktfUENTX05FR19PVVRCQU5EO1xcbjExMjk6XFx0XFx0XFx0XFx0ZWxzZSBpZiAocGNzX2liX2NhcHMgXFx1MDAyNiBMSU5LX0lOQkFORF9FTkFCTEUpXFxuMTEzMDpcXHRcXHRcXHRcXHRcXHRwY3NfaWJfb25seSA9IHRydWU7XFxuMTEzMTpcXHRcXHRcXHR9XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdFxcdGlmIChwaHlfaWJfY2FwcyBcXHUwMDI2XFx1MDAyNiBwaHlfaWJfY2FwcyAhPSBMSU5LX0lOQkFORF9ESVNBQkxFKSB7XFxuMTEzNDpcXHRcXHRcXHRcXHQvKiBQSFkgc3VwcG9ydHMgaW4tYmFuZCBjYXBhYmlsaXRpZXMsIGFuZCBzdXBwb3J0c1xcbjExMzU6XFx0XFx0XFx0XFx0ICogbW9yZSB0aGFuIGRpc2FibGUgbW9kZS5cXG4xMTM2OlxcdFxcdFxcdFxcdCAqL1xcbjExMzc6XFx0XFx0XFx0XFx0aWYgKHBoeV9pYl9jYXBzIFxcdTAwMjYgTElOS19JTkJBTkRfRElTQUJMRSlcXG4xMTM4OlxcdFxcdFxcdFxcdFxcdHBsLVxcdTAwM2VwaHlfaWJfbW9kZSA9IExJTktfSU5CQU5EX0RJU0FCTEU7XFxuMTEzOTpcXHRcXHRcXHRcXHRlbHNlIGlmIChwaHlfaWJfY2FwcyBcXHUwMDI2IExJTktfSU5CQU5EX0JZUEFTUylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MzQuNTkyOTk1NjQ0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzI2MTY2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCBvZiBhIFJlY2VudCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBkaWZmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgLSBqdXN0IGFkZGluZyBgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSWAgdG8gdGhhdCBzd2l0Y2ggc3RhdGVtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwibWVoLCBub3Qgd29ydGggZnV6emluZy5cIiBJdCBsb29rcyBsaWtlIHRoaXMgc3BlY2lmaWMgbW9kZSBpcyBvbmx5IHJlbGV2YW50IHRvIHRoZSBgcWNhODA3eGAgUEhZIGRyaXZlciwgYW5kIHRoZXJlJ3Mgbm8gd2F5IGluIGhlbGwgSSdtIGdvaW5nIHRvIHNlZSB0aGF0IGhhcmR3YXJlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGNvZGUgcGF0aCBqdXN0IGlzbid0IHJlYWNoYWJsZSB3aXRob3V0IGl0LiBJdCBzZWVtcyBsaWtlIGEgZGVhZCBlbmQgZm9yIG5vdy5cblxuV2FpdCBhIHNlY29uZCB0aG91Z2guLi4gaXMgaXQgKmFjdHVhbGx5KiB0aGF0IHNpbXBsZT8gQ2FuIEkgZm9yY2UgdGhlIGludGVyZmFjZSBtb2RlIHRvIGBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJYCB0aHJvdWdoIG5ldGxpbmsgb3IgYnkgcGxheWluZyB3aXRoIHN5c2ZzPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIElmIEkgKmNhbiogY29udHJvbCBpdCBmcm9tIHVzZXJzcGFjZSwgZXZlbiB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50LCB0aGVuIHRoaXMgYmVjb21lcyBmdXp6YWJsZSwgYW5kIEkgc2hvdWxkIHJlYWxseSBjaGVjay4gSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIExldCdzIHNlZSBpZiB0aGlzIG1vZGUgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBzb21laG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM2OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDAyOjUwOjM4Ljc2NTYxNDg4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2ODUzNTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBIWV9JTlRFUkZBQ0VfTU9ERV9QU0dNSUlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6MzguODMwMzA3MTYzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjMzNTU5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBNb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbnRlcmZhY2UgbW9kZSwgYnV0IEknbSBkcmF3aW5nIGEgYmxhbmsgaW4gYG5ldC9gLiBJIHZhZ3VlbHkgcmVjYWxsIGNoZWNraW5nIGBkcml2ZXJzL25ldC9gIHByZXZpb3VzbHksIHNwZWNpZmljYWxseSB0aG9zZSBwaHktcmVsYXRlZCBmaWxlcyDigJMgYHBoeS1jb3JlLmNgLCBgcGh5X2NhcHMuY2AsIGBwaHlsaW5rLmNgLCBhbmQgYHFjYTgwN3guY2AuIE15IGVhcmxpZXIgZXhhbWluYXRpb24gY29uZmlybXMgdGhhdCB0aGUgaW50ZXJmYWNlIG1vZGUgaXNuJ3QgYmVpbmcgc2V0IGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyB0aGUga2V5IHRha2Vhd2F5LiBJdCdzIGRpY3RhdGVkIGVpdGhlciBieSB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBvciB0aGUgZGV2aWNlIHRyZWUuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdmlydHVhbGl6YXRpb24gd29ya3Mg4oCTIHNwZWNpZmljYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSDigJMgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBpcyBzaW1wbHkgaW5hY2Nlc3NpYmxlLiBUaGVyZSdzIG5vIHdheSB0byB0cmlnZ2VyIHRoZSBjb25kaXRpb25zIEknbSB0cnlpbmcgdG8gYW5hbHl6ZS5cblxuSSd2ZSBnb3QgdG8gY29uY2x1ZGUgdGhpcyBpcyBub3QgYSBmcnVpdGZ1bCBhdmVudWUgZm9yIGZ1enppbmcsIGFuZCBJIHdpbGwgYmUgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc3MCwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDI6NTA6NDMuNjkzNjY2NzI4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQSFlfSU5URVJGQUNFX01PREVfUFNHTUlJIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGluIHBoeWxpbmtfZ2V0X2luYmFuZF90eXBlLiBUaGlzIGludGVyZmFjZSBtb2RlIGlzIG9ubHkgdXNlZCBieSB0aGUgUXVhbGNvbW0gUUNBODA3eCBwaHlzaWNhbCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIG9yIHZpcnR1YWxpemVkIG5ldHdvcmsgZHJpdmVycy4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUEhZX0lOVEVSRkFDRV9NT0RFX1BTR01JSSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCBpbiBwaHlsaW5rX2dldF9pbmJhbmRfdHlwZS4gVGhpcyBpbnRlcmZhY2UgbW9kZSBpcyBvbmx5IHVzZWQgYnkgdGhlIFF1YWxjb21tIFFDQTgwN3ggcGh5c2ljYWwgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBvciB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlcnMuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwMjo1MDo0My42OTM2OTMzMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowbqwzn[1] Phase: Running StartedAt: 2026-08-08 02:50:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqwzn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-08 02:50:55 +0000 UTC FinishedAt: 2026-08-08 02:51:00 +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,}