Name: series-workflowrrvbm Phase: Failed StartedAt: 2026-07-01 21:22:49 +0000 UTC FinishedAt: 2026-07-01 21:38:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrvbm[0] Phase: Succeeded StartedAt: 2026-07-01 21:22:49 +0000 UTC FinishedAt: 2026-07-01 21:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrvbm[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 21:22:49 +0000 UTC FinishedAt: 2026-07-01 21:37:29 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTAzYWZjYjYwYjcyMmFhZmM0M2YzMTRjYWE3OWIxMDliZDE2OWM1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMjE6MzU6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuaW5kZXggYzMwZTI3YmJmZTZlMjUuLjA3ZTIwMTZmYjk0ODFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtNjYsOCAmIzQzOzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4gZXJyX2RlZl90eDpcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuJiM0MztcdC8qIGtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzIChzZWUgcmVsZWFzZV9lbnYpICovXG4mIzQzO1x0aWYgKCEodXBsaW5rX3ZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSlcbiYjNDM7XHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuJiM0MztcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuIGVycl9kZWZfcng6XG4gXHRpY2VfdnNpX2RlbF92bGFuX3plcm8odXBsaW5rX3ZzaSk7XG4gZXJyX3ZsYW5femVybzpcbkBAIC0yNzYsOCAmIzQzOzI3OCwxNiBAQCBzdGF0aWMgdm9pZCBpY2VfZXN3aXRjaF9yZWxlYXNlX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdHZsYW5fb3BzLVx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodXBsaW5rX3ZzaSk7XG4gXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4gXHRcdFx0IElDRV9GTFRSX1RYKTtcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91czsgaXQgbXVzdCBvdXRsaXZlXG4mIzQzO1x0ICogdGhlIHNlc3Npb24uIFRlc3QgdGhlIGxpdmUgbmV0ZGV2LVx1MDAzZWZsYWdzLCB0aGUgc2FtZSB2YWx1ZVxuJiM0MztcdCAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cbiYjNDM7XHQgKiBvbiwgc28gdGhlIHByZXNlcnZlZCBERkxUIHJ1bGUgYW5kIHRoZSBwcnVuaW5nIHN0YXRlIHN0YXkgY29uc2lzdGVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoISh1cGxpbmtfdnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpKVxuJiM0MztcdFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsXG4mIzQzO1x0XHRcdFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XG4mIzQzO1xuIFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXG4gXHRcdFx0XHQgICAgICAgdXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbWFjLnBlcm1fYWRkcixcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmZDJkYWIwM2UzNjMuLjFjMThhNWNiZjU5ZTc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMjc0LDcgJiM0MzsyNzQsOCBAQCBzdGF0aWMgaW50IGljZV9zZXRfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgIT0gSUNFX1ZTSV9QRilcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xuJiM0MztcdC8qIHNraXAgcGVyLVZJRCBleHBhbnNpb247IHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgZXZlcnkgVklEICovXG4mIzQzO1x0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXHUwMDI2XHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4gXHRcdFx0XHRcdFx0ICAgICAgIHByb21pc2NfbSk7XG5AQCAtMzA0LDkgJiM0MzszMDUsMjAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcbi1cdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4mIzQzO1x0XHR1OCB2bGFuX3Byb21pc2NfbSA9IHByb21pc2NfbSB8IElDRV9QUk9NSVNDX1ZMQU5fUlggfFxuJiM0MztcdFx0XHRcdCAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYO1xuJiM0MztcdFx0aW50IHZpZDBfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNldCB0aW1lIHVzZWQgZWl0aGVyIHJlY2lwZSAocGVyLVZJRCBQUk9NSVNDX1ZMQU4sIG9yIHZpZD0wXG4mIzQzO1x0XHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxuJiM0MztcdFx0ICogYm90aDsgY2xlYXJpbmcgYW4gYWJzZW50IHJ1bGUgc3VjY2VlZHNcbiYjNDM7XHRcdCAqL1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4tXHRcdFx0XHRcdFx0XHQgcHJvbWlzY19tKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgdmxhbl9wcm9taXNjX20pO1xuJiM0MztcdFx0dmlkMF9zdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgdnNpLVx1MDAzZWlkeCwgcHJvbWlzY19tLCAwKTtcbiYjNDM7XHRcdGlmICghc3RhdHVzKVxuJiM0MztcdFx0XHRzdGF0dXMgPSB2aWQwX3N0YXR1cztcbiBcdH0gZWxzZSB7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ktXHUwMDNlaWR4LFxuIFx0XHRcdFx0XHRcdCAgICBwcm9taXNjX20sIDApO1xuQEAgLTMxNyw2ICYjNDM7MzI5LDU5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjIC0gZHJvcCB0aGUgZGVmYXVsdCBWU0kgUnggcnVsZSBvbiBwcm9taXNjIG9mZlxuJiM0MzsgKiBAdnNpOiB0aGUgVlNJIGxlYXZpbmcgcHJvbWlzY3VvdXMgbW9kZVxuJiM0MzsgKlxuJiM0MzsgKiBGb3IgYW4gSUZGX0FMTE1VTFRJIFZTSSB3aXRoIFZMQU5zIHRoZSBwZXItVklEIG11bHRpY2FzdCBydWxlcyBhcmVcbiYjNDM7ICogcmVpbnN0YXRlZCBiZWZvcmUgdGhlIGRlZmF1bHQgcnVsZSBpcyBjbGVhcmVkIHNvIGNvdmVyYWdlIG5ldmVyIGxhcHNlcztcbiYjNDM7ICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nXG4mIzQzOyAqIHRoZWlyIG93biBmYWlsdXJlcywgc28gZXJyb3IgcmV0dXJucyBhcmUgbm90IHJlLWxvZ2dlZCBoZXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfdnNpX3ZsYW5fb3BzICp2bGFuX29wcyA9IGljZV9nZXRfY29tcGF0X3ZzaV92bGFuX29wcyh2c2kpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2c2ktXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHc7XG4mIzQzO1x0Ym9vbCByZXN0b3JlX21jO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHJlc3RvcmVfbWMgPSAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzdG9yZV9tYykge1xuJiM0MztcdFx0ZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVFWElTVClcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4mIzQzO1x0XHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXN0b3JlX21jKVxuJiM0MztcdFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoaHcsIHZzaS1cdTAwM2VpZHgsIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsXG4mIzQzO1x0XHRcdFx0XHQgICAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIERyb3AgdGhlIHBlci1WSUQgbXVsdGljYXN0IHByb21pc2MgcnVsZXMsIHJlZHVuZGFudCBvbmNlIHRoZSBkZWZhdWx0XG4mIzQzOyAqIFZTSSBSeCBydWxlIGNvdmVycyBldmVyeSBWSUQuIEEgbm8tb3Agd2hlbiB0aGUgVlNJIGhhcyBubyBWTEFOcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGljZV92c2lfY2xlYXJfdmxhbl9tY19wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSlcbiYjNDM7XHRcdGljZV9mbHRyX2NsZWFyX3ZsYW5fdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaSxcbiYjNDM7XHRcdFx0XHRcdFx0SUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX3N5bmNfZmx0ciAtIFVwZGF0ZSB0aGUgVlNJIGZpbHRlciBsaXN0IHRvIHRoZSBIV1xuICAqIEB2c2k6IHB0ciB0byB0aGUgVlNJXG5AQCAtNDI5LDMwICYjNDM7NDk0LDM1IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9zeW5jX2ZsdHIoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHR2bGFuX29wcy1cdTAwM2VkaXNfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXG4tXHRcdFx0XHQvKiBwcm9taXNjdW91cyBtb2RlIGltcGxpZXMgYWxsbXVsdGljYXN0IHNvXG4tXHRcdFx0XHQgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmVcbi1cdFx0XHRcdCAqIHN1YnNjcmliZWQgdG8gbXVsdGljYXN0IHBhY2tldHMgY29taW5nIHRvXG4tXHRcdFx0XHQgKiB0aGUgcG9ydFxuJiM0MztcdFx0XHRcdC8qIERGTFQgbm93IGNvdmVycyBldmVyeSBWSUQ7IGRyb3AgdGhlIHBlci1WSURcbiYjNDM7XHRcdFx0XHQgKiBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcyBhIHByaW9yIElGRl9BTExNVUxUSVxuJiM0MztcdFx0XHRcdCAqIHBhc3MgbWF5IGhhdmUgaW5zdGFsbGVkIChzZXBhcmF0ZSBwYXNzZXMgb24gYVxuJiM0MztcdFx0XHRcdCAqIGJyaWRnZSBqb2luKSBzbyB0aGV5IGRvIG5vdCBsaW5nZXIgYW5kIGV4aGF1c3RcbiYjNDM7XHRcdFx0XHQgKiB0aGUgRkxVIHBvb2wuIGV4aXRfZGZsdF9wcm9taXNjKCkgcmVpbnN0YXRlc1xuJiM0MztcdFx0XHRcdCAqIHRoZW0gb24gcHJvbWlzYyBvZmYuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGVyciA9IGljZV9zZXRfcHJvbWlzYyh2c2ksXG4tXHRcdFx0XHRcdFx0ICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuJiM0MztcdFx0XHRcdGljZV92c2lfY2xlYXJfdmxhbl9tY19wcm9taXNjKHZzaSk7XG4gXHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogUHJvbWlzY3VvdXMgbW9kZSBpbXBsaWVzIGFsbG11bHRpY2FzdC4gU3Vic2NyaWJlXG4mIzQzO1x0XHRcdCAqIHRoZSBWU0kgdG8gYWxsIG11bHRpY2FzdCBldmVuIHdoZW4gdGhlIGRlZmF1bHQgVlNJXG4mIzQzO1x0XHRcdCAqIHJ1bGUgaXMgYWxyZWFkeSBpbiB1c2UgYW5kIHRoZSBibG9jayBhYm92ZSBpc1xuJiM0MztcdFx0XHQgKiBza2lwcGVkIChpdCBtYXkgYmUgb3duZWQgYnkgYW5vdGhlciBWU0ksIG9yXG4mIzQzO1x0XHRcdCAqIHByZXNlcnZlZCBhY3Jvc3MgYSBzd2l0Y2hkZXYgc2Vzc2lvbik7IHRoZSB1bmljYXN0XG4mIzQzO1x0XHRcdCAqIGNhdGNoLWFsbCBkb2VzIG5vdCBjb3ZlciB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbi5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGVyciA9IGljZV9zZXRfcHJvbWlzYyh2c2ksIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3Byb21pc2M7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqL1xuIFx0XHRcdGlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbi1cdFx0XHRcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuJiM0MztcdFx0XHRcdGVyciA9IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2ModnNpKTtcbiBcdFx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0Vycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcXG5cJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgZXJyLCB2c2ktXHUwMDNldnNpX251bSk7XG4gXHRcdFx0XHRcdHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyB8PVxuIFx0XHRcdFx0XHRcdElGRl9QUk9NSVNDO1xuIFx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2XG4tXHRcdFx0XHQgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuLVx0XHRcdFx0XHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90XG5AQCAtMzY3NSwxMCAmIzQzOzM3NDUsOSBAQCBpbnQgaWNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4gXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChJQ0VfQ0ZHX0JVU1ksIHZzaS1cdTAwM2VzdGF0ZSkpXG4gXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcbi1cdC8qIEFkZCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlIGZvciB0aGUgVkxBTiBJRCB0byBiZSBhZGRlZCBpZlxuLVx0ICogYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZC5cbi1cdCAqL1xuLVx0aWYgKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSB7XG4mIzQzO1x0Lyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqL1xuJiM0MztcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4gXHRcdHJldCA9IGljZV9mbHRyX3NldF92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0ICAgICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyxcbiBcdFx0XHRcdFx0ICAgICAgIHZpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIGFuZCBpbml0aWFsaXplLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGRldmljZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEwM2FmY2I2MGI3MjJhYWZjNDNmMzE0Y2FhNzliMTA5YmQxNjljNWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDIxOjM1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYwppbmRleCBjMzBlMjdiYmZlNmUyNS4uMDdlMjAxNmZiOTQ4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCkBAIC02Niw4ICYjNDM7NjYsMTAgQEAgc3RhdGljIGludCBpY2VfZXN3aXRjaF9zZXR1cF9lbnYoc3RydWN0IGljZV9wZiAqcGYpCiAJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCiAJCQkgSUNFX0ZMVFJfVFgpOwogZXJyX2RlZl90eDoKLQlpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktJmd0O3BvcnRfaW5mbywgdXBsaW5rX3ZzaS0mZ3Q7aWR4LCBmYWxzZSwKLQkJCSBJQ0VfRkxUUl9SWCk7CiYjNDM7CS8qIGtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzIChzZWUgcmVsZWFzZV9lbnYpICovCiYjNDM7CWlmICghKHVwbGlua192c2ktJmd0O25ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1BST01JU0MpKQomIzQzOwkJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwKJiM0MzsJCQkJIGZhbHNlLCBJQ0VfRkxUUl9SWCk7CiBlcnJfZGVmX3J4OgogCWljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTsKIGVycl92bGFuX3plcm86CkBAIC0yNzYsOCAmIzQzOzI3OCwxNiBAQCBzdGF0aWMgdm9pZCBpY2VfZXN3aXRjaF9yZWxlYXNlX2VudihzdHJ1Y3QgaWNlX3BmICpwZikKIAl2bGFuX29wcy0mZ3Q7ZW5hX3J4X2ZpbHRlcmluZyh1cGxpbmtfdnNpKTsKIAlpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktJmd0O3BvcnRfaW5mbywgdXBsaW5rX3ZzaS0mZ3Q7aWR4LCBmYWxzZSwKIAkJCSBJQ0VfRkxUUl9UWCk7Ci0JaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCi0JCQkgSUNFX0ZMVFJfUlgpOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91czsgaXQgbXVzdCBvdXRsaXZlCiYjNDM7CSAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi0mZ3Q7ZmxhZ3MsIHRoZSBzYW1lIHZhbHVlCiYjNDM7CSAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtJmd0OyBpY2VfY2ZnX3ZsYW5fcHJ1bmluZygpIGFib3ZlIGtleXMgaXRzIGRlY2lzaW9uCiYjNDM7CSAqIG9uLCBzbyB0aGUgcHJlc2VydmVkIERGTFQgcnVsZSBhbmQgdGhlIHBydW5pbmcgc3RhdGUgc3RheSBjb25zaXN0ZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKCEodXBsaW5rX3ZzaS0mZ3Q7bmV0ZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfUFJPTUlTQykpCiYjNDM7CQlpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktJmd0O3BvcnRfaW5mbywgdXBsaW5rX3ZzaS0mZ3Q7aWR4LAomIzQzOwkJCQkgZmFsc2UsIElDRV9GTFRSX1JYKTsKJiM0MzsKIAlpY2VfZmx0cl9hZGRfbWFjX2FuZF9icm9hZGNhc3QodXBsaW5rX3ZzaSwKIAkJCQkgICAgICAgdXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLSZndDttYWMucGVybV9hZGRyLAogCQkJCSAgICAgICBJQ0VfRldEX1RPX1ZTSSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGUyZmQyZGFiMDNlMzYzLi4xYzE4YTVjYmY1OWU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKQEAgLTI3NCw3ICYjNDM7Mjc0LDggQEAgc3RhdGljIGludCBpY2Vfc2V0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKQogCWlmICh2c2ktJmd0O3R5cGUgIT0gSUNFX1ZTSV9QRikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkgewomIzQzOwkvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqLwomIzQzOwlpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSAmYW1wOyZhbXA7ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHsKIAkJcHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7CiAJCXN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLAogCQkJCQkJICAgICAgIHByb21pc2NfbSk7CkBAIC0zMDQsOSAmIzQzOzMwNSwyMCBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkgewotCQlwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTsKJiM0MzsJCXU4IHZsYW5fcHJvbWlzY19tID0gcHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8CiYjNDM7CQkJCSAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYOwomIzQzOwkJaW50IHZpZDBfc3RhdHVzOwomIzQzOwomIzQzOwkJLyogc2V0IHRpbWUgdXNlZCBlaXRoZXIgcmVjaXBlIChwZXItVklEIFBST01JU0NfVkxBTiwgb3IgdmlkPTAKJiM0MzsJCSAqIFBST01JU0MgdmlhIHRoZSBpY2Vfc2V0X3Byb21pc2MoKSBlbHNlIGJyYW5jaCksIHNvIGNsZWFyCiYjNDM7CQkgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkcwomIzQzOwkJICovCiAJCXN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZsYW5fdnNpX3Byb21pc2MoJmFtcDt2c2ktJmd0O2JhY2stJmd0O2h3LCB2c2ksCi0JCQkJCQkJIHByb21pc2NfbSk7CiYjNDM7CQkJCQkJCSB2bGFuX3Byb21pc2NfbSk7CiYjNDM7CQl2aWQwX3N0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywKJiM0MzsJCQkJCQkJIHZzaS0mZ3Q7aWR4LCBwcm9taXNjX20sIDApOwomIzQzOwkJaWYgKCFzdGF0dXMpCiYjNDM7CQkJc3RhdHVzID0gdmlkMF9zdGF0dXM7CiAJfSBlbHNlIHsKIAkJc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoJmFtcDt2c2ktJmd0O2JhY2stJmd0O2h3LCB2c2ktJmd0O2lkeCwKIAkJCQkJCSAgICBwcm9taXNjX20sIDApOwpAQCAtMzE3LDYgJiM0MzszMjksNTkgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pCiAJcmV0dXJuIHN0YXR1czsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2MgLSBkcm9wIHRoZSBkZWZhdWx0IFZTSSBSeCBydWxlIG9uIHByb21pc2Mgb2ZmCiYjNDM7ICogQHZzaTogdGhlIFZTSSBsZWF2aW5nIHByb21pc2N1b3VzIG1vZGUKJiM0MzsgKgomIzQzOyAqIEZvciBhbiBJRkZfQUxMTVVMVEkgVlNJIHdpdGggVkxBTnMgdGhlIHBlci1WSUQgbXVsdGljYXN0IHJ1bGVzIGFyZQomIzQzOyAqIHJlaW5zdGF0ZWQgYmVmb3JlIHRoZSBkZWZhdWx0IHJ1bGUgaXMgY2xlYXJlZCBzbyBjb3ZlcmFnZSBuZXZlciBsYXBzZXM7CiYjNDM7ICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nCiYjNDM7ICogdGhlaXIgb3duIGZhaWx1cmVzLCBzbyBlcnJvciByZXR1cm5zIGFyZSBub3QgcmUtbG9nZ2VkIGhlcmUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHZzaS0mZ3Q7bmV0ZGV2OwomIzQzOwlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7dnNpLSZndDtiYWNrLSZndDtodzsKJiM0MzsJYm9vbCByZXN0b3JlX21jOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlyZXN0b3JlX21jID0gKHZzaS0mZ3Q7Y3VycmVudF9uZXRkZXZfZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSk7CiYjNDM7CiYjNDM7CWlmIChyZXN0b3JlX21jKSB7CiYjNDM7CQllcnIgPSBpY2VfZmx0cl9zZXRfdmxhbl92c2lfcHJvbWlzYyhodywgdnNpLAomIzQzOwkJCQkJCSAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUVYSVNUKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpCiYjNDM7CQl2bGFuX29wcy0mZ3Q7ZW5hX3J4X2ZpbHRlcmluZyh2c2kpOwomIzQzOwomIzQzOwlpZiAocmVzdG9yZV9tYykKJiM0MzsJCWljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktJmd0O2lkeCwgSUNFX01DQVNUX1BST01JU0NfQklUUywKJiM0MzsJCQkJCSAgIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRHJvcCB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcywgcmVkdW5kYW50IG9uY2UgdGhlIGRlZmF1bHQKJiM0MzsgKiBWU0kgUnggcnVsZSBjb3ZlcnMgZXZlcnkgVklELiBBIG5vLW9wIHdoZW4gdGhlIFZTSSBoYXMgbm8gVkxBTnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSkKJiM0Mzt7CiYjNDM7CWlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKQomIzQzOwkJaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaSwKJiM0MzsJCQkJCQlJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFcKICAqIEB2c2k6IHB0ciB0byB0aGUgVlNJCkBAIC00MjksMzAgJiM0Mzs0OTQsMzUgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQkJCWVyciA9IDA7CiAJCQkJdmxhbl9vcHMtJmd0O2Rpc19yeF9maWx0ZXJpbmcodnNpKTsKIAotCQkJCS8qIHByb21pc2N1b3VzIG1vZGUgaW1wbGllcyBhbGxtdWx0aWNhc3Qgc28KLQkJCQkgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmUKLQkJCQkgKiBzdWJzY3JpYmVkIHRvIG11bHRpY2FzdCBwYWNrZXRzIGNvbWluZyB0bwotCQkJCSAqIHRoZSBwb3J0CiYjNDM7CQkJCS8qIERGTFQgbm93IGNvdmVycyBldmVyeSBWSUQ7IGRyb3AgdGhlIHBlci1WSUQKJiM0MzsJCQkJICogbXVsdGljYXN0IHByb21pc2MgcnVsZXMgYSBwcmlvciBJRkZfQUxMTVVMVEkKJiM0MzsJCQkJICogcGFzcyBtYXkgaGF2ZSBpbnN0YWxsZWQgKHNlcGFyYXRlIHBhc3NlcyBvbiBhCiYjNDM7CQkJCSAqIGJyaWRnZSBqb2luKSBzbyB0aGV5IGRvIG5vdCBsaW5nZXIgYW5kIGV4aGF1c3QKJiM0MzsJCQkJICogdGhlIEZMVSBwb29sLiBleGl0X2RmbHRfcHJvbWlzYygpIHJlaW5zdGF0ZXMKJiM0MzsJCQkJICogdGhlbSBvbiBwcm9taXNjIG9mZi4KIAkJCQkgKi8KLQkJCQllcnIgPSBpY2Vfc2V0X3Byb21pc2ModnNpLAotCQkJCQkJICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBvdXRfcHJvbWlzYzsKJiM0MzsJCQkJaWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2ModnNpKTsKIAkJCX0KJiM0MzsKJiM0MzsJCQkvKiBQcm9taXNjdW91cyBtb2RlIGltcGxpZXMgYWxsbXVsdGljYXN0LiBTdWJzY3JpYmUKJiM0MzsJCQkgKiB0aGUgVlNJIHRvIGFsbCBtdWx0aWNhc3QgZXZlbiB3aGVuIHRoZSBkZWZhdWx0IFZTSQomIzQzOwkJCSAqIHJ1bGUgaXMgYWxyZWFkeSBpbiB1c2UgYW5kIHRoZSBibG9jayBhYm92ZSBpcwomIzQzOwkJCSAqIHNraXBwZWQgKGl0IG1heSBiZSBvd25lZCBieSBhbm90aGVyIFZTSSwgb3IKJiM0MzsJCQkgKiBwcmVzZXJ2ZWQgYWNyb3NzIGEgc3dpdGNoZGV2IHNlc3Npb24pOyB0aGUgdW5pY2FzdAomIzQzOwkJCSAqIGNhdGNoLWFsbCBkb2VzIG5vdCBjb3ZlciB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQllcnIgPSBpY2Vfc2V0X3Byb21pc2ModnNpLCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIG91dF9wcm9taXNjOwogCQl9IGVsc2UgewogCQkJLyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqLwogCQkJaWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSkgewotCQkJCWVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpOwomIzQzOwkJCQllcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7CiAJCQkJaWYgKGVycikgewotCQkJCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXG4mIzM0OywKLQkJCQkJCSAgIGVyciwgdnNpLSZndDt2c2lfbnVtKTsKIAkJCQkJdnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyB8PQogCQkJCQkJSUZGX1BST01JU0M7CiAJCQkJCWdvdG8gb3V0X3Byb21pc2M7CiAJCQkJfQotCQkJCWlmICh2c2ktJmd0O25ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsKLQkJCQkgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKQotCQkJCQl2bGFuX29wcy0mZ3Q7ZW5hX3J4X2ZpbHRlcmluZyh2c2kpOwogCQkJfQogCiAJCQkvKiBkaXNhYmxlIGFsbG11bHRpIGhlcmUsIGJ1dCBvbmx5IGlmIGFsbG11bHRpIGlzIG5vdApAQCAtMzY3NSwxMCAmIzQzOzM3NDUsOSBAQCBpbnQgaWNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktJmd0O3N0YXRlKSkKIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCi0JLyogQWRkIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIHRoZSBWTEFOIElEIHRvIGJlIGFkZGVkIGlmCi0JICogYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4KLQkgKi8KLQlpZiAodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHsKJiM0MzsJLyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqLwomIzQzOwlpZiAoKHZzaS0mZ3Q7Y3VycmVudF9uZXRkZXZfZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7CiAJCXJldCA9IGljZV9mbHRyX3NldF92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaS0mZ3Q7aWR4LAogCQkJCQkgICAgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLAogCQkJCQkgICAgICAgdmlkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBUaGlzIElDRSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBpY2VgIGRyaXZlciDigJMgdGhhdCYjMzk7cyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgaWNlX2Vzd2l0Y2guY2AgYW5kIGBpY2VfbWFpbi5jYC4gSXQmIzM5O3MgYWJvdXQgaG93IHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gZmlsdGVyaW5nIHBsYXkgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSBmb3IgdGhhdCBkZWZhdWx0IFZTSSByZWNlaXZlIHJ1bGUuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB0ZXN0YWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IFRoZSBgaWNlYCBkcml2ZXIgaXMsIG9mIGNvdXJzZSwgZGVzaWduZWQgZm9yIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgbmV0d29yayBjYXJkcy4gVHlwaWNhbGx5LCB0ZXN0aW5nIFBDSWUgaGFyZHdhcmUgZHJpdmVycyB1bmRlciBRRU1VIGlzIHRyaWNreSB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3IgZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgb3Igd2UgcmVzb3J0IHRvIFBDSSBwYXNzdGhyb3VnaC4gQW5kIHN5emthbGxlciwgd2hpY2ggaXMgdXN1YWxseSBvdXIgZ28tdG8sIGlzbiYjMzk7dCBrbm93biB0byBoYXZlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lmaWMgSW50ZWwgTklDIHN1cHBvcnQuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApiBkb2VzIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlIHRoZSBgaWNlYCBoYXJkd2FyZT8gSSBkb27igJl0IHRoaW5rIHNvLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZS4gTXkgYnJhaW4gaXMgcmF0dGxpbmcgb2ZmIHRoZSB1c3VhbCBzdXNwZWN0czogYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgcGNuZXRgLCBgbmUya19wY2lgLCBgdHVsaXBgLi4uIGJ1dCBubyBgaWNlYC4gTm9wZS4KCkFscmlnaHQsIHRpbWUgdG8gdmVyaWZ5IGlmIHdlIGNhbiBldmVuIGZ1enogdGhpcyB0aGluZyBlZmZlY3RpdmVseS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHRyZWUgYW5kIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgaWNlYC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZ29pbmcgb24gYW55d2hlcmUgb3IgaWYgaXQmIzM5O3MgcHVyZWx5IGEgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlci4gVGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IGZlYXNpYmxlIGZ1enppbmcgdGhpcyBpcyBnb2luZyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1FFTVUuKmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ3MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkNoZWNraW5nIGZvciBJQ0UgTW9jay9WaXJ0dWFsIERldmljZSBTdXBwb3J0KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW4sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgcmVpbnZlbnRpbmcgdGhlIHdoZWVsLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgdmlydHVhbCBkZXZpY2Ugb3IgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGBpY2VgIGNvbXBvbmVudCBhbHJlYWR5IGF2YWlsYWJsZS4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZGV2ZWxvcG1lbnQgdGltZTsgYW5kIHNvLCBpZiB0aGVyZSYjMzk7cyBhIHByZS1idWlsdCBzb2x1dGlvbiB0aGF0IHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIEkmIzM5O2xsIGxldmVyYWdlIHRoYXQuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzaW11bGF0ZXMgdGhlIGBpY2VgIGJlaGF2aW9yIGZvciB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHB1cnBvc2VzLiBFZmZpY2llbmN5IGlzIGtleSwgYW5kIEkgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgdGltZSBidWlsZGluZyBzb21ldGhpbmcgZnJvbSBzY3JhdGNoIGlmIGl0JiMzOTtzIGFscmVhZHkgcmVhZGlseSBhdmFpbGFibGUgb3IsIGNvbnZlcnNlbHksIHRvIHNwZW5kIHRpbWUgbG9va2luZyBmb3IgYSBzb2x1dGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnQuKmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM9NDg4PXZvaWQgaWNlX2RldmxpbmtfZGVzdHJveV92Zl9wb3J0KHN0cnVjdCBpY2VfdmYgKnZmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy00OTctICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo0OTg6ICogUmVnaXN0ZXIgdmlydHVhbCBmbGF2b3VyIGRldmxpbmsgcG9ydCBmb3IgdGhlIHN1YmZ1bmN0aW9uIGF1eGlsaWFyeSBkZXZpY2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy00OTktICogY3JlYXRlZCBhZnRlciBhY3RpdmF0aW5nIGEgZHluYW1pY2FsbHkgYWRkZWQgZGV2bGluayBwb3J0LlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmM9MjM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYzoyNDppY2VfaW5pdF92aXJ0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgYmFzZSwgdTMyIG51bV9lbnRyaWVzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYz00MD1zdGF0aWMgdm9pZCBpY2VfZGVpbml0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjQ1OnN0YXRpYyB2b2lkIGljZV9kZWluaXRfdmlydF9pcnFfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtNDYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmM9MjE5PXZvaWQgaWNlX2ZyZWVfaXJxKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbXNpX21hcCBtYXApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjI1MTppbnQgaWNlX3ZpcnRfZ2V0X2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBuZWVkZWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jLTI1Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNzEtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjI3Mjp2b2lkIGljZV92aXJ0X2ZyZWVfaXJxcyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTMyIGluZGV4LCB1MzIgaXJxcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtMjczLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oPTMyPXZvaWQgaWNlX2ZyZWVfaXJxKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbXNpX21hcCBtYXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuaC0zMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmg6MzQ6aW50IGljZV92aXJ0X2dldF9pcnFzKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgbmVlZGVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmg6MzU6dm9pZCBpY2VfdmlydF9mcmVlX2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBpbmRleCwgdTMyIGlycXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuaC0zNi0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jPTEwNDc9dm9pZCBpY2VfZGlzX3ZmX3FzKHN0cnVjdCBpY2VfdmYgKnZmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtMTA2Mi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmM6MTA2MzplbnVtIHZpcnRjaG5sX3N0YXR1c19jb2RlIGljZV9lcnJfdG9fdmlydF9lcnIoaW50IGVycilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtMTA2NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWJfcHJpdmF0ZS5oPTI5PWludCBpY2VfY2hlY2tfdmZfaW5pdChzdHJ1Y3QgaWNlX3ZmICp2Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYl9wcml2YXRlLmg6MzA6ZW51bSB2aXJ0Y2hubF9zdGF0dXNfY29kZSBpY2VfZXJyX3RvX3ZpcnRfZXJyKGludCBlcnIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWJfcHJpdmF0ZS5oLTMxLXN0cnVjdCBpY2VfcG9ydF9pbmZvICppY2VfdmZfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYz01OD1pY2Vfc2V0X3BmZV9saW5rKHN0cnVjdCBpY2VfdmYgKnZmLCBzdHJ1Y3QgdmlydGNobmxfcGZfZXZlbnQgKnBmZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTY0LVx0XHRwZmUtXHUwMDNlZXZlbnRfZGF0YS5saW5rX2V2ZW50X2Fkdi5saW5rX3NwZWVkID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM6NjU6XHRcdFx0aWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubCh0cnVlLCBpY2VfbGlua19zcGVlZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTY2LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTcwLVx0XHRcdChlbnVtIHZpcnRjaG5sX2xpbmtfc3BlZWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjcxOlx0XHRcdGljZV9jb252X2xpbmtfc3BlZWRfdG9fdmlydGNobmwoZmFsc2UsIGljZV9saW5rX3NwZWVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtNzItXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYz0xNzM3PWljZV92Y192YWxpZGF0ZV92bGFuX2ZpbHRlcl9saXN0KHN0cnVjdCB2aXJ0Y2hubF92bGFuX2ZpbHRlcmluZ19jYXBzICp2ZmMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0xNzgyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoxNzgzOiAqIGljZV92Y190b192bGFuIC0gdHJhbnNmb3JtIGZyb20gc3RydWN0IHZpcnRjaG5sX3ZsYW4gdG8gc3RydWN0IGljZV92bGFuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTE3ODQtICogQHZjX3ZsYW46IHN0cnVjdCB2aXJ0Y2hubF92bGFuIHRvIHRyYW5zZm9ybVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM9MjQ2Nz1zdGF0aWMgaW50IGljZV92Y19nZXRfcGhjX3RpbWUoc3RydWN0IGljZV92ZiAqdmYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNDk3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNDk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3ZpcnRjaG5sX29wcyBpY2VfdmlydGNobmxfZGZsdF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI0OTktXHQuZ2V0X3Zlcl9tc2cgPSBpY2VfdmNfZ2V0X3Zlcl9tc2csXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNTQ1OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9kZmx0X29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjU0Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI1NDc6XHR2Zi1cdTAwM2V2aXJ0Y2hubF9vcHMgPSBcdTAwMjZpY2VfdmlydGNobmxfZGZsdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI1NDgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM9MjYyNT1pY2VfdmNfcmVwcl9jZmdfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTggX19hbHdheXNfdW51c2VkICptc2cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNjM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3ZpcnRjaG5sX29wcyBpY2VfdmlydGNobmxfcmVwcl9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI2MzYtXHQuZ2V0X3Zlcl9tc2cgPSBpY2VfdmNfZ2V0X3Zlcl9tc2csXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNjc4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjc5OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9yZXByX29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY4MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI2ODE6XHR2Zi1cdTAwM2V2aXJ0Y2hubF9vcHMgPSBcdTAwMjZpY2VfdmlydGNobmxfcmVwcl9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI2ODItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg9NDE9c3RydWN0IGljZV92aXJ0Y2hubF9vcHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtODMtI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjg0OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9kZmx0X29wcyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjg1OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9yZXByX29wcyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTg2LXZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oPTk5PWJvb2wgaWNlX2lzX3ZsYW5fcHJvbWlzY19hbGxvd2VkKHN0cnVjdCBpY2VfdmYgKnZmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtMTAwLSNlbHNlIC8qIENPTkZJR19QQ0lfSU9WICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjEwMTpzdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZpcnRjaG5sX3NldF9kZmx0X29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjEwMjpzdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZpcnRjaG5sX3NldF9yZXByX29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTEwMy1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKSB7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzI4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSWNlIERyaXZlciBmb3IgU3l6a2FsbGVyIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGZvciBJbnRlbCYjMzk7cyBFODAwIHNlcmllcyBoYXJkd2FyZS4gVGhlIHByb2JsZW0gaXMsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSYjMzk7cyBubyB2aXJ0dWFsIGNvdW50ZXJwYXJ0IGluIFFFTVUg4oCTIG5vIHZpcnR1YWwgZGV2aWNlIHRvIGhvb2sgaW50by4gSXTigJlzIG5vdCBsaWtlIHdlIGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG8gYG1hYzgwMjExX2h3c2ltYCBvciBgdmttc2AgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUuIFRoZSBjb2RlIGNoYW5nZXMgSSYjMzk7bSBzZWVpbmcgc2VlbSB0byByZXZvbHZlIGFyb3VuZCBwcm9taXNjdW91cyBtb2RlIGFuZCBWTEFOIGZpbHRlcmluZywgd2hpY2ggYXJlIGNyaXRpY2FsIGFyZWFzIGJ1dCBhcmUgbGlrZWx5IHRvIGJlIGhhcmR3YXJlLWRlcGVuZGVudC4KCkdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgaXMgdGllZCB0byBhY3R1YWwgaGFyZHdhcmUgYW5kIGNhbiYjMzk7dCBiZSByZWFkaWx5IGFjY2Vzc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEU4MDAgc2VyaWVzLCBmdXp6aW5nIGl0IGRpcmVjdGx5IGluIHN5emthbGxlciBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuIFdhaXQgYSBtaW51dGUuLi4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGV2ZW4gKmhhdmUqIHRoYXQgc3BlY2lmaWMgSW50ZWwgRTgwMCBoYXJkd2FyZSBpbiBpdHMgdGVzdGJlZHMsIHNvIGl04oCZcyBhIGRlZmluaXRlIG5vLWdvLgoKU3RpbGwsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgdGhlcmUgKmFueXRoaW5nKiByZXNlbWJsaW5nIGEgbW9jayBkcml2ZXIsIG9yIGEgd2F5IHRvIHRyaWdnZXIgaXQgd2l0aCBzb21lIGtpbmQgb2YgZHVtbXkgbmV0ZGV2PyBUaGUgYGljZWAgZHJpdmVyIGRvZXMgcmVnaXN0ZXIgYSBuZXRkZXYsIHdoaWNoIGlzIGEga2V5IHBhcnQsIGJ1dCBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYSBzdWNjZXNzZnVsIFBDSSBkZXZpY2UgcHJvYmUuIEkgbmVlZCB0byBjb25maXJtLiBJIHNob3VsZCBsb29rIGludG8gYGljZV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNzE9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTg2OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTg3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjE2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTIxNzogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIxOC0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MjIzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyMjQ6aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMjUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUzMDgtXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTMwOTpcdFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUzMTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTkwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01OTEwLVx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1OTExOlx0LnByb2JlID0gaWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTkxMi1cdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjYKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgcGF0Y2gsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgUENJIGRyaXZlcnMsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O20gZGVhbGluZyB3aXRoIGFuIGBpY2VgIGRyaXZlciDigJMgaXQmIzM5O3MgZ29pbmcgdG8gYmUgdXNlbGVzcyB3aXRob3V0IGEgUENJIGRldmljZSBwcmVzZW50LiBTcGVjaWZpY2FsbHksIGBpY2VfcHJvYmVgIHdvbiYjMzk7dCBleGVjdXRlLCBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIHdvbiYjMzk7dCBnZXQgcmVnaXN0ZXJlZC4gVGhhdCBkaXJlY3RseSB0ZWxscyBtZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBzZXR1cCwgcmlnaHQ/IEdDRSwgUUVNVSwgYW55IG9mIHRoZW0uIE5vIGRpY2UuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7bSB3b3JraW5nIHdpdGgsIEkgbmVlZCB0byBmbGFnIHRoaXMgYXMgdW5mdXp6YWJsZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZ3VpZGVsaW5lcy4uLiBZdXA6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7LiBCaW5nbyEgVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgY2F0ZXJpbmcgc3BlY2lmaWNhbGx5IHRvIEludGVsIEU4MDAgc2VyaWVzIG5ldHdvcmsgY2FyZHMsIGFuZCBpdCBpcyBpbXBvc3NpYmxlIHRvIGJlIHRlc3RlZCB3aXRob3V0IHRoYXQgaGFyZHdhcmUuIEl0IGlzIHRoZSBwZXJmZWN0IHNjZW5hcmlvIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEkmIzM5O2xsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBnZXQgdGhpcyBkb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGluaXRpYWxpemUuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgZGV2aWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjA2LjM4NjgzMDEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5ODQ1NTA1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNTowNi4zODY4NDAyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4OTM5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTAzYWZjYjYwYjcyMmFhZmM0M2YzMTRjYWE3OWIxMDliZDE2OWM1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDIxOjM1OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG5pbmRleCBjMzBlMjdiYmZlNmUyNS4uMDdlMjAxNmZiOTQ4MWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbkBAIC02Niw4ICs2NiwxMCBAQCBzdGF0aWMgaW50IGljZV9lc3dpdGNoX3NldHVwX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXFx1MDAzZWlkeCwgZmFsc2UsXFxuIFxcdFxcdFxcdCBJQ0VfRkxUUl9UWCk7XFxuIGVycl9kZWZfdHg6XFxuLVxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbi1cXHRcXHRcXHQgSUNFX0ZMVFJfUlgpO1xcbitcXHQvKiBrZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91cyAoc2VlIHJlbGVhc2VfZW52KSAqL1xcbitcXHRpZiAoISh1cGxpbmtfdnNpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpKVxcbitcXHRcXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LFxcbitcXHRcXHRcXHRcXHQgZmFsc2UsIElDRV9GTFRSX1JYKTtcXG4gZXJyX2RlZl9yeDpcXG4gXFx0aWNlX3ZzaV9kZWxfdmxhbl96ZXJvKHVwbGlua192c2kpO1xcbiBlcnJfdmxhbl96ZXJvOlxcbkBAIC0yNzYsOCArMjc4LDE2IEBAIHN0YXRpYyB2b2lkIGljZV9lc3dpdGNoX3JlbGVhc2VfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHR2bGFuX29wcy1cXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh1cGxpbmtfdnNpKTtcXG4gXFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXFx1MDAzZWlkeCwgZmFsc2UsXFxuIFxcdFxcdFxcdCBJQ0VfRkxUUl9UWCk7XFxuLVxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbi1cXHRcXHRcXHQgSUNFX0ZMVFJfUlgpO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXM7IGl0IG11c3Qgb3V0bGl2ZVxcbitcXHQgKiB0aGUgc2Vzc2lvbi4gVGVzdCB0aGUgbGl2ZSBuZXRkZXYtXFx1MDAzZWZsYWdzLCB0aGUgc2FtZSB2YWx1ZVxcbitcXHQgKiBlbmFfcnhfZmlsdGVyaW5nKCkgLVxcdTAwM2UgaWNlX2NmZ192bGFuX3BydW5pbmcoKSBhYm92ZSBrZXlzIGl0cyBkZWNpc2lvblxcbitcXHQgKiBvbiwgc28gdGhlIHByZXNlcnZlZCBERkxUIHJ1bGUgYW5kIHRoZSBwcnVuaW5nIHN0YXRlIHN0YXkgY29uc2lzdGVudC5cXG4rXFx0ICovXFxuK1xcdGlmICghKHVwbGlua192c2ktXFx1MDAzZW5ldGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykpXFxuK1xcdFxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsXFxuK1xcdFxcdFxcdFxcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xcbitcXG4gXFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8tXFx1MDAzZW1hYy5wZXJtX2FkZHIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBlMmZkMmRhYjAzZTM2My4uMWMxOGE1Y2JmNTllNzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0yNzQsNyArMjc0LDggQEAgc3RhdGljIGludCBpY2Vfc2V0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxcbiBcXHRpZiAodnNpLVxcdTAwM2V0eXBlICE9IElDRV9WU0lfUEYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcXG4rXFx0Lyogc2tpcCBwZXItVklEIGV4cGFuc2lvbjsgdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyBldmVyeSBWSUQgKi9cXG4rXFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXFx1MDAyNlxcdTAwMjYgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xcbiBcXHRcXHRwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlaHcsIHZzaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHByb21pc2NfbSk7XFxuQEAgLTMwNCw5ICszMDUsMjAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcXG4tXFx0XFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XFxuK1xcdFxcdHU4IHZsYW5fcHJvbWlzY19tID0gcHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8XFxuK1xcdFxcdFxcdFxcdCAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYO1xcbitcXHRcXHRpbnQgdmlkMF9zdGF0dXM7XFxuK1xcbitcXHRcXHQvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MFxcbitcXHRcXHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxcbitcXHRcXHQgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkc1xcbitcXHRcXHQgKi9cXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgcHJvbWlzY19tKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHZsYW5fcHJvbWlzY19tKTtcXG4rXFx0XFx0dmlkMF9zdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHZzaS1cXHUwMDNlaWR4LCBwcm9taXNjX20sIDApO1xcbitcXHRcXHRpZiAoIXN0YXR1cylcXG4rXFx0XFx0XFx0c3RhdHVzID0gdmlkMF9zdGF0dXM7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LCB2c2ktXFx1MDAzZWlkeCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHByb21pc2NfbSwgMCk7XFxuQEAgLTMxNyw2ICszMjksNTkgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXFxuIFxcdHJldHVybiBzdGF0dXM7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjIC0gZHJvcCB0aGUgZGVmYXVsdCBWU0kgUnggcnVsZSBvbiBwcm9taXNjIG9mZlxcbisgKiBAdnNpOiB0aGUgVlNJIGxlYXZpbmcgcHJvbWlzY3VvdXMgbW9kZVxcbisgKlxcbisgKiBGb3IgYW4gSUZGX0FMTE1VTFRJIFZTSSB3aXRoIFZMQU5zIHRoZSBwZXItVklEIG11bHRpY2FzdCBydWxlcyBhcmVcXG4rICogcmVpbnN0YXRlZCBiZWZvcmUgdGhlIGRlZmF1bHQgcnVsZSBpcyBjbGVhcmVkIHNvIGNvdmVyYWdlIG5ldmVyIGxhcHNlcztcXG4rICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nXFxuKyAqIHRoZWlyIG93biBmYWlsdXJlcywgc28gZXJyb3IgcmV0dXJucyBhcmUgbm90IHJlLWxvZ2dlZCBoZXJlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHZzaS1cXHUwMDNlbmV0ZGV2O1xcbitcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3O1xcbitcXHRib29sIHJlc3RvcmVfbWM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRyZXN0b3JlX21jID0gKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKTtcXG4rXFxuK1xcdGlmIChyZXN0b3JlX21jKSB7XFxuK1xcdFxcdGVyciA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKGh3LCB2c2ksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUVYSVNUKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxcbitcXHRcXHR2bGFuX29wcy1cXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xcbitcXG4rXFx0aWYgKHJlc3RvcmVfbWMpXFxuK1xcdFxcdGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktXFx1MDAzZWlkeCwgSUNFX01DQVNUX1BST01JU0NfQklUUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogRHJvcCB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcywgcmVkdW5kYW50IG9uY2UgdGhlIGRlZmF1bHRcXG4rICogVlNJIFJ4IHJ1bGUgY292ZXJzIGV2ZXJ5IFZJRC4gQSBuby1vcCB3aGVuIHRoZSBWU0kgaGFzIG5vIFZMQU5zLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcXG4re1xcbitcXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSlcXG4rXFx0XFx0aWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcXG4gICogQHZzaTogcHRyIHRvIHRoZSBWU0lcXG5AQCAtNDI5LDMwICs0OTQsMzUgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRcXHR2bGFuX29wcy1cXHUwMDNlZGlzX3J4X2ZpbHRlcmluZyh2c2kpO1xcbiBcXG4tXFx0XFx0XFx0XFx0LyogcHJvbWlzY3VvdXMgbW9kZSBpbXBsaWVzIGFsbG11bHRpY2FzdCBzb1xcbi1cXHRcXHRcXHRcXHQgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmVcXG4tXFx0XFx0XFx0XFx0ICogc3Vic2NyaWJlZCB0byBtdWx0aWNhc3QgcGFja2V0cyBjb21pbmcgdG9cXG4tXFx0XFx0XFx0XFx0ICogdGhlIHBvcnRcXG4rXFx0XFx0XFx0XFx0LyogREZMVCBub3cgY292ZXJzIGV2ZXJ5IFZJRDsgZHJvcCB0aGUgcGVyLVZJRFxcbitcXHRcXHRcXHRcXHQgKiBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcyBhIHByaW9yIElGRl9BTExNVUxUSVxcbitcXHRcXHRcXHRcXHQgKiBwYXNzIG1heSBoYXZlIGluc3RhbGxlZCAoc2VwYXJhdGUgcGFzc2VzIG9uIGFcXG4rXFx0XFx0XFx0XFx0ICogYnJpZGdlIGpvaW4pIHNvIHRoZXkgZG8gbm90IGxpbmdlciBhbmQgZXhoYXVzdFxcbitcXHRcXHRcXHRcXHQgKiB0aGUgRkxVIHBvb2wuIGV4aXRfZGZsdF9wcm9taXNjKCkgcmVpbnN0YXRlc1xcbitcXHRcXHRcXHRcXHQgKiB0aGVtIG9uIHByb21pc2Mgb2ZmLlxcbiBcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0ZXJyID0gaWNlX3NldF9wcm9taXNjKHZzaSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3Byb21pc2M7XFxuK1xcdFxcdFxcdFxcdGljZV92c2lfY2xlYXJfdmxhbl9tY19wcm9taXNjKHZzaSk7XFxuIFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qIFByb21pc2N1b3VzIG1vZGUgaW1wbGllcyBhbGxtdWx0aWNhc3QuIFN1YnNjcmliZVxcbitcXHRcXHRcXHQgKiB0aGUgVlNJIHRvIGFsbCBtdWx0aWNhc3QgZXZlbiB3aGVuIHRoZSBkZWZhdWx0IFZTSVxcbitcXHRcXHRcXHQgKiBydWxlIGlzIGFscmVhZHkgaW4gdXNlIGFuZCB0aGUgYmxvY2sgYWJvdmUgaXNcXG4rXFx0XFx0XFx0ICogc2tpcHBlZCAoaXQgbWF5IGJlIG93bmVkIGJ5IGFub3RoZXIgVlNJLCBvclxcbitcXHRcXHRcXHQgKiBwcmVzZXJ2ZWQgYWNyb3NzIGEgc3dpdGNoZGV2IHNlc3Npb24pOyB0aGUgdW5pY2FzdFxcbitcXHRcXHRcXHQgKiBjYXRjaC1hbGwgZG9lcyBub3QgY292ZXIgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRlcnIgPSBpY2Vfc2V0X3Byb21pc2ModnNpLCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfcHJvbWlzYztcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqL1xcbiBcXHRcXHRcXHRpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XFxuLVxcdFxcdFxcdFxcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7XFxuIFxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBlcnIsIHZzaS1cXHUwMDNldnNpX251bSk7XFxuIFxcdFxcdFxcdFxcdFxcdHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgfD1cXG4gXFx0XFx0XFx0XFx0XFx0XFx0SUZGX1BST01JU0M7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3Byb21pc2M7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKHZzaS1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXFxuLVxcdFxcdFxcdFxcdFxcdHZsYW5fb3BzLVxcdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90XFxuQEAgLTM2NzUsMTAgKzM3NDUsOSBAQCBpbnQgaWNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuIFxcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KElDRV9DRkdfQlVTWSwgdnNpLVxcdTAwM2VzdGF0ZSkpXFxuIFxcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4gXFxuLVxcdC8qIEFkZCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlIGZvciB0aGUgVkxBTiBJRCB0byBiZSBhZGRlZCBpZlxcbi1cXHQgKiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4rXFx0Lyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqL1xcbitcXHRpZiAoKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XFxuIFxcdFxcdHJldCA9IGljZV9mbHRyX3NldF92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLVxcdTAwM2VpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB2aWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNTowNy4wMTc4OTkwMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzUzNDQ0NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGluaXRpYWxpemUuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDNhZmNiNjBiNzIyYWFmYzQzZjMxNGNhYTc5YjEwOWJkMTY5YzVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMTozNTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbmluZGV4IGMzMGUyN2JiZmU2ZTI1Li4wN2UyMDE2ZmI5NDgxZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuQEAgLTY2LDggKzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4gZXJyX2RlZl90eDpcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuK1x0Lyoga2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXMgKHNlZSByZWxlYXNlX2VudikgKi9cbitcdGlmICghKHVwbGlua192c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykpXG4rXHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuK1x0XHRcdFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XG4gZXJyX2RlZl9yeDpcbiBcdGljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTtcbiBlcnJfdmxhbl96ZXJvOlxuQEAgLTI3Niw4ICsyNzgsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHVwbGlua192c2kpO1xuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbitcbitcdC8qIEtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzOyBpdCBtdXN0IG91dGxpdmVcbitcdCAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi1cdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcbitcdCAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cbitcdCAqIG9uLCBzbyB0aGUgcHJlc2VydmVkIERGTFQgcnVsZSBhbmQgdGhlIHBydW5pbmcgc3RhdGUgc3RheSBjb25zaXN0ZW50LlxuK1x0ICovXG4rXHRpZiAoISh1cGxpbmtfdnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpKVxuK1x0XHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCxcbitcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuK1xuIFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXG4gXHRcdFx0XHQgICAgICAgdXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbWFjLnBlcm1fYWRkcixcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmZDJkYWIwM2UzNjMuLjFjMThhNWNiZjU5ZTc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMjc0LDcgKzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4rXHQvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqL1xuK1x0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXHUwMDI2XHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4gXHRcdFx0XHRcdFx0ICAgICAgIHByb21pc2NfbSk7XG5AQCAtMzA0LDkgKzMwNSwyMCBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xuLVx0XHRwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcbitcdFx0dTggdmxhbl9wcm9taXNjX20gPSBwcm9taXNjX20gfCBJQ0VfUFJPTUlTQ19WTEFOX1JYIHxcbitcdFx0XHRcdCAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYO1xuK1x0XHRpbnQgdmlkMF9zdGF0dXM7XG4rXG4rXHRcdC8qIHNldCB0aW1lIHVzZWQgZWl0aGVyIHJlY2lwZSAocGVyLVZJRCBQUk9NSVNDX1ZMQU4sIG9yIHZpZD0wXG4rXHRcdCAqIFBST01JU0MgdmlhIHRoZSBpY2Vfc2V0X3Byb21pc2MoKSBlbHNlIGJyYW5jaCksIHNvIGNsZWFyXG4rXHRcdCAqIGJvdGg7IGNsZWFyaW5nIGFuIGFic2VudCBydWxlIHN1Y2NlZWRzXG4rXHRcdCAqL1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4tXHRcdFx0XHRcdFx0XHQgcHJvbWlzY19tKTtcbitcdFx0XHRcdFx0XHRcdCB2bGFuX3Byb21pc2NfbSk7XG4rXHRcdHZpZDBfc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsXG4rXHRcdFx0XHRcdFx0XHQgdnNpLVx1MDAzZWlkeCwgcHJvbWlzY19tLCAwKTtcbitcdFx0aWYgKCFzdGF0dXMpXG4rXHRcdFx0c3RhdHVzID0gdmlkMF9zdGF0dXM7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0XHQgICAgcHJvbWlzY19tLCAwKTtcbkBAIC0zMTcsNiArMzI5LDU5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4rLyoqXG4rICogaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyAtIGRyb3AgdGhlIGRlZmF1bHQgVlNJIFJ4IHJ1bGUgb24gcHJvbWlzYyBvZmZcbisgKiBAdnNpOiB0aGUgVlNJIGxlYXZpbmcgcHJvbWlzY3VvdXMgbW9kZVxuKyAqXG4rICogRm9yIGFuIElGRl9BTExNVUxUSSBWU0kgd2l0aCBWTEFOcyB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcnVsZXMgYXJlXG4rICogcmVpbnN0YXRlZCBiZWZvcmUgdGhlIGRlZmF1bHQgcnVsZSBpcyBjbGVhcmVkIHNvIGNvdmVyYWdlIG5ldmVyIGxhcHNlcztcbisgKiB0aGUgdGhlbiByZWR1bmRhbnQgdmlkPTAgcnVsZSBpcyBkcm9wcGVkIGJlc3QtZWZmb3J0LiBUaGUgY2FsbGVlcyBsb2dcbisgKiB0aGVpciBvd24gZmFpbHVyZXMsIHNvIGVycm9yIHJldHVybnMgYXJlIG5vdCByZS1sb2dnZWQgaGVyZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvciB3aXRoIHRoZSBkZWZhdWx0IHJ1bGUgbGVmdCBpbiBwbGFjZS5cbisgKi9cbitzdGF0aWMgaW50IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcbit7XG4rXHRzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2c2ktXHUwMDNlbmV0ZGV2O1xuK1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodztcbitcdGJvb2wgcmVzdG9yZV9tYztcbitcdGludCBlcnI7XG4rXG4rXHRyZXN0b3JlX21jID0gKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpO1xuK1xuK1x0aWYgKHJlc3RvcmVfbWMpIHtcbitcdFx0ZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSxcbitcdFx0XHRcdFx0XHQgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTtcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcbitcdFx0dmxhbl9vcHMtXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xuK1xuK1x0aWYgKHJlc3RvcmVfbWMpXG4rXHRcdGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktXHUwMDNlaWR4LCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTLFxuK1x0XHRcdFx0XHQgICAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBEcm9wIHRoZSBwZXItVklEIG11bHRpY2FzdCBwcm9taXNjIHJ1bGVzLCByZWR1bmRhbnQgb25jZSB0aGUgZGVmYXVsdFxuKyAqIFZTSSBSeCBydWxlIGNvdmVycyBldmVyeSBWSUQuIEEgbm8tb3Agd2hlbiB0aGUgVlNJIGhhcyBubyBWTEFOcy5cbisgKi9cbitzdGF0aWMgdm9pZCBpY2VfdnNpX2NsZWFyX3ZsYW5fbWNfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuK3tcbitcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKVxuK1x0XHRpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4rXHRcdFx0XHRcdFx0SUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcbiAgKiBAdnNpOiBwdHIgdG8gdGhlIFZTSVxuQEAgLTQyOSwzMCArNDk0LDM1IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9zeW5jX2ZsdHIoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHR2bGFuX29wcy1cdTAwM2VkaXNfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXG4tXHRcdFx0XHQvKiBwcm9taXNjdW91cyBtb2RlIGltcGxpZXMgYWxsbXVsdGljYXN0IHNvXG4tXHRcdFx0XHQgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmVcbi1cdFx0XHRcdCAqIHN1YnNjcmliZWQgdG8gbXVsdGljYXN0IHBhY2tldHMgY29taW5nIHRvXG4tXHRcdFx0XHQgKiB0aGUgcG9ydFxuK1x0XHRcdFx0LyogREZMVCBub3cgY292ZXJzIGV2ZXJ5IFZJRDsgZHJvcCB0aGUgcGVyLVZJRFxuK1x0XHRcdFx0ICogbXVsdGljYXN0IHByb21pc2MgcnVsZXMgYSBwcmlvciBJRkZfQUxMTVVMVElcbitcdFx0XHRcdCAqIHBhc3MgbWF5IGhhdmUgaW5zdGFsbGVkIChzZXBhcmF0ZSBwYXNzZXMgb24gYVxuK1x0XHRcdFx0ICogYnJpZGdlIGpvaW4pIHNvIHRoZXkgZG8gbm90IGxpbmdlciBhbmQgZXhoYXVzdFxuK1x0XHRcdFx0ICogdGhlIEZMVSBwb29sLiBleGl0X2RmbHRfcHJvbWlzYygpIHJlaW5zdGF0ZXNcbitcdFx0XHRcdCAqIHRoZW0gb24gcHJvbWlzYyBvZmYuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGVyciA9IGljZV9zZXRfcHJvbWlzYyh2c2ksXG4tXHRcdFx0XHRcdFx0ICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuK1x0XHRcdFx0aWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2ModnNpKTtcbiBcdFx0XHR9XG4rXG4rXHRcdFx0LyogUHJvbWlzY3VvdXMgbW9kZSBpbXBsaWVzIGFsbG11bHRpY2FzdC4gU3Vic2NyaWJlXG4rXHRcdFx0ICogdGhlIFZTSSB0byBhbGwgbXVsdGljYXN0IGV2ZW4gd2hlbiB0aGUgZGVmYXVsdCBWU0lcbitcdFx0XHQgKiBydWxlIGlzIGFscmVhZHkgaW4gdXNlIGFuZCB0aGUgYmxvY2sgYWJvdmUgaXNcbitcdFx0XHQgKiBza2lwcGVkIChpdCBtYXkgYmUgb3duZWQgYnkgYW5vdGhlciBWU0ksIG9yXG4rXHRcdFx0ICogcHJlc2VydmVkIGFjcm9zcyBhIHN3aXRjaGRldiBzZXNzaW9uKTsgdGhlIHVuaWNhc3RcbitcdFx0XHQgKiBjYXRjaC1hbGwgZG9lcyBub3QgY292ZXIgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0ZXJyID0gaWNlX3NldF9wcm9taXNjKHZzaSwgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gb3V0X3Byb21pc2M7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqL1xuIFx0XHRcdGlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbi1cdFx0XHRcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuK1x0XHRcdFx0ZXJyID0gaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyh2c2kpO1xuIFx0XHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXFxuXCIsXG4tXHRcdFx0XHRcdFx0ICAgZXJyLCB2c2ktXHUwMDNldnNpX251bSk7XG4gXHRcdFx0XHRcdHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyB8PVxuIFx0XHRcdFx0XHRcdElGRl9QUk9NSVNDO1xuIFx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2XG4tXHRcdFx0XHQgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuLVx0XHRcdFx0XHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90XG5AQCAtMzY3NSwxMCArMzc0NSw5IEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KElDRV9DRkdfQlVTWSwgdnNpLVx1MDAzZXN0YXRlKSlcbiBcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFxuLVx0LyogQWRkIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIHRoZSBWTEFOIElEIHRvIGJlIGFkZGVkIGlmXG4tXHQgKiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkLlxuLVx0ICovXG4tXHRpZiAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcbitcdC8qIHNraXAgdGhlIHBlci1WSUQgcnVsZSB3aGVuIHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgdGhpcyBWSUQgKi9cbitcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cmV0ID0gaWNlX2ZsdHJfc2V0X3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ktXHUwMDNlaWR4LFxuIFx0XHRcdFx0XHQgICAgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLFxuIFx0XHRcdFx0XHQgICAgICAgdmlkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjA3LjAxNzkwNDQ5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDU4NzM2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgVGhpcyBJQ0UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGljZWAgZHJpdmVyIOKAkyB0aGF0J3MgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX21haW4uY2AuIEl0J3MgYWJvdXQgaG93IHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gZmlsdGVyaW5nIHBsYXkgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSBmb3IgdGhhdCBkZWZhdWx0IFZTSSByZWNlaXZlIHJ1bGUuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhpcyBldmVuIHRlc3RhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gVGhlIGBpY2VgIGRyaXZlciBpcywgb2YgY291cnNlLCBkZXNpZ25lZCBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBUeXBpY2FsbHksIHRlc3RpbmcgUENJZSBoYXJkd2FyZSBkcml2ZXJzIHVuZGVyIFFFTVUgaXMgdHJpY2t5IHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIGZvciB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIG9yIHdlIHJlc29ydCB0byBQQ0kgcGFzc3Rocm91Z2guIEFuZCBzeXprYWxsZXIsIHdoaWNoIGlzIHVzdWFsbHkgb3VyIGdvLXRvLCBpc24ndCBrbm93biB0byBoYXZlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lmaWMgSW50ZWwgTklDIHN1cHBvcnQuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmIGRvZXMgUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgdGhlIGBpY2VgIGhhcmR3YXJlPyBJIGRvbuKAmXQgdGhpbmsgc28sIGJ1dCBsZXQncyBtYWtlIHN1cmUuIE15IGJyYWluIGlzIHJhdHRsaW5nIG9mZiB0aGUgdXN1YWwgc3VzcGVjdHM6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYHJ0bDgxMzlgLCBgdmlydGlvLW5ldGAsIGB2bXhuZXQzYCwgYHBjbmV0YCwgYG5lMmtfcGNpYCwgYHR1bGlwYC4uLiBidXQgbm8gYGljZWAuIE5vcGUuXG5cbkFscmlnaHQsIHRpbWUgdG8gdmVyaWZ5IGlmIHdlIGNhbiBldmVuIGZ1enogdGhpcyB0aGluZyBlZmZlY3RpdmVseS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHRyZWUgYW5kIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgaWNlYC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBzb3J0IG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBnb2luZyBvbiBhbnl3aGVyZSBvciBpZiBpdCdzIHB1cmVseSBhIGhhcmR3YXJlLWRlcGVuZGVudCBkcml2ZXIuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyBmZWFzaWJsZSBmdXp6aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToxMy4xNjM3ODMzNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NzU3OTA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJRRU1VLippY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToxMy4zMTE1NjU3NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODI0MzI1NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHByb2Zlc3Npb25hbCdzIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIGZvciBJQ0UgTW9jay9WaXJ0dWFsIERldmljZSBTdXBwb3J0KipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IHJlaW52ZW50aW5nIHRoZSB3aGVlbC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdmlydHVhbCBkZXZpY2Ugb3IgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGBpY2VgIGNvbXBvbmVudCBhbHJlYWR5IGF2YWlsYWJsZS4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZGV2ZWxvcG1lbnQgdGltZTsgYW5kIHNvLCBpZiB0aGVyZSdzIGEgcHJlLWJ1aWx0IHNvbHV0aW9uIHRoYXQgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgSSdsbCBsZXZlcmFnZSB0aGF0LiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzaW11bGF0ZXMgdGhlIGBpY2VgIGJlaGF2aW9yIGZvciB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHB1cnBvc2VzLiBFZmZpY2llbmN5IGlzIGtleSwgYW5kIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGJ1aWxkaW5nIHNvbWV0aGluZyBmcm9tIHNjcmF0Y2ggaWYgaXQncyBhbHJlYWR5IHJlYWRpbHkgYXZhaWxhYmxlIG9yLCBjb252ZXJzZWx5LCB0byBzcGVuZCB0aW1lIGxvb2tpbmcgZm9yIGEgc29sdXRpb24gdGhhdCBkb2VzIG5vdCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjE2LjEzNTg5NTE3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUyMjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0LippY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz00ODg9dm9pZCBpY2VfZGV2bGlua19kZXN0cm95X3ZmX3BvcnQoc3RydWN0IGljZV92ZiAqdmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtNDk3LSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjQ5ODogKiBSZWdpc3RlciB2aXJ0dWFsIGZsYXZvdXIgZGV2bGluayBwb3J0IGZvciB0aGUgc3ViZnVuY3Rpb24gYXV4aWxpYXJ5IGRldmljZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy00OTktICogY3JlYXRlZCBhZnRlciBhY3RpdmF0aW5nIGEgZHluYW1pY2FsbHkgYWRkZWQgZGV2bGluayBwb3J0Llxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYz0yMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYzoyNDppY2VfaW5pdF92aXJ0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgYmFzZSwgdTMyIG51bV9lbnRyaWVzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtMjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYz00MD1zdGF0aWMgdm9pZCBpY2VfZGVpbml0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjQ1OnN0YXRpYyB2b2lkIGljZV9kZWluaXRfdmlydF9pcnFfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jLTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmM9MjE5PXZvaWQgaWNlX2ZyZWVfaXJxKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbXNpX21hcCBtYXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jLTI1MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjI1MTppbnQgaWNlX3ZpcnRfZ2V0X2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBuZWVkZWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNzEtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYzoyNzI6dm9pZCBpY2VfdmlydF9mcmVlX2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBpbmRleCwgdTMyIGlycXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuaD0zMj12b2lkIGljZV9mcmVlX2lycShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IG1zaV9tYXAgbWFwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oLTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmg6MzQ6aW50IGljZV92aXJ0X2dldF9pcnFzKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgbmVlZGVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oOjM1OnZvaWQgaWNlX3ZpcnRfZnJlZV9pcnFzKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgaW5kZXgsIHUzMiBpcnFzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oLTM2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYz0xMDQ3PXZvaWQgaWNlX2Rpc192Zl9xcyhzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtMTA2Mi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jOjEwNjM6ZW51bSB2aXJ0Y2hubF9zdGF0dXNfY29kZSBpY2VfZXJyX3RvX3ZpcnRfZXJyKGludCBlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYy0xMDY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliX3ByaXZhdGUuaD0yOT1pbnQgaWNlX2NoZWNrX3ZmX2luaXQoc3RydWN0IGljZV92ZiAqdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliX3ByaXZhdGUuaDozMDplbnVtIHZpcnRjaG5sX3N0YXR1c19jb2RlIGljZV9lcnJfdG9fdmlydF9lcnIoaW50IGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWJfcHJpdmF0ZS5oLTMxLXN0cnVjdCBpY2VfcG9ydF9pbmZvICppY2VfdmZfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jPTU4PWljZV9zZXRfcGZlX2xpbmsoc3RydWN0IGljZV92ZiAqdmYsIHN0cnVjdCB2aXJ0Y2hubF9wZl9ldmVudCAqcGZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy02NC1cXHRcXHRwZmUtXFx1MDAzZWV2ZW50X2RhdGEubGlua19ldmVudF9hZHYubGlua19zcGVlZCA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzo2NTpcXHRcXHRcXHRpY2VfY29udl9saW5rX3NwZWVkX3RvX3ZpcnRjaG5sKHRydWUsIGljZV9saW5rX3NwZWVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTY2LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTcwLVxcdFxcdFxcdChlbnVtIHZpcnRjaG5sX2xpbmtfc3BlZWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzo3MTpcXHRcXHRcXHRpY2VfY29udl9saW5rX3NwZWVkX3RvX3ZpcnRjaG5sKGZhbHNlLCBpY2VfbGlua19zcGVlZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy03Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jPTE3Mzc9aWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fZmlsdGVyX2xpc3Qoc3RydWN0IHZpcnRjaG5sX3ZsYW5fZmlsdGVyaW5nX2NhcHMgKnZmYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMTc4Mi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjE3ODM6ICogaWNlX3ZjX3RvX3ZsYW4gLSB0cmFuc2Zvcm0gZnJvbSBzdHJ1Y3QgdmlydGNobmxfdmxhbiB0byBzdHJ1Y3QgaWNlX3ZsYW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTE3ODQtICogQHZjX3ZsYW46IHN0cnVjdCB2aXJ0Y2hubF92bGFuIHRvIHRyYW5zZm9ybVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYz0yNDY3PXN0YXRpYyBpbnQgaWNlX3ZjX2dldF9waGNfdGltZShzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjQ5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI0OTg6c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfdmlydGNobmxfb3BzIGljZV92aXJ0Y2hubF9kZmx0X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI0OTktXFx0LmdldF92ZXJfbXNnID0gaWNlX3ZjX2dldF92ZXJfbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM6MjU0NTp2b2lkIGljZV92aXJ0Y2hubF9zZXRfZGZsdF9vcHMoc3RydWN0IGljZV92ZiAqdmYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI1NDc6XFx0dmYtXFx1MDAzZXZpcnRjaG5sX29wcyA9IFxcdTAwMjZpY2VfdmlydGNobmxfZGZsdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM9MjYyNT1pY2VfdmNfcmVwcl9jZmdfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTggX19hbHdheXNfdW51c2VkICptc2cpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI2MzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3ZpcnRjaG5sX29wcyBpY2VfdmlydGNobmxfcmVwcl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNjM2LVxcdC5nZXRfdmVyX21zZyA9IGljZV92Y19nZXRfdmVyX21zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY3OC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI2Nzk6dm9pZCBpY2VfdmlydGNobmxfc2V0X3JlcHJfb3BzKHN0cnVjdCBpY2VfdmYgKnZmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY4MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjgxOlxcdHZmLVxcdTAwM2V2aXJ0Y2hubF9vcHMgPSBcXHUwMDI2aWNlX3ZpcnRjaG5sX3JlcHJfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY4Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oPTQxPXN0cnVjdCBpY2VfdmlydGNobmxfb3BzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtODMtI2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuaDo4NDp2b2lkIGljZV92aXJ0Y2hubF9zZXRfZGZsdF9vcHMoc3RydWN0IGljZV92ZiAqdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg6ODU6dm9pZCBpY2VfdmlydGNobmxfc2V0X3JlcHJfb3BzKHN0cnVjdCBpY2VfdmYgKnZmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTg2LXZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg9OTk9Ym9vbCBpY2VfaXNfdmxhbl9wcm9taXNjX2FsbG93ZWQoc3RydWN0IGljZV92ZiAqdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtMTAwLSNlbHNlIC8qIENPTkZJR19QQ0lfSU9WICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuaDoxMDE6c3RhdGljIGlubGluZSB2b2lkIGljZV92aXJ0Y2hubF9zZXRfZGZsdF9vcHMoc3RydWN0IGljZV92ZiAqdmYpIHsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg6MTAyOnN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfdmlydGNobmxfc2V0X3JlcHJfb3BzKHN0cnVjdCBpY2VfdmYgKnZmKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTEwMy1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKSB7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MzU6MTYuMjM0NDI5NTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMjE2NTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEljZSBEcml2ZXIgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCB3aGljaCBpcyBzcGVjaWZpY2FsbHkgZm9yIEludGVsJ3MgRTgwMCBzZXJpZXMgaGFyZHdhcmUuIFRoZSBwcm9ibGVtIGlzLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlcmUncyBubyB2aXJ0dWFsIGNvdW50ZXJwYXJ0IGluIFFFTVUg4oCTIG5vIHZpcnR1YWwgZGV2aWNlIHRvIGhvb2sgaW50by4gSXTigJlzIG5vdCBsaWtlIHdlIGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG8gYG1hYzgwMjExX2h3c2ltYCBvciBgdmttc2AgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUuIFRoZSBjb2RlIGNoYW5nZXMgSSdtIHNlZWluZyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gZmlsdGVyaW5nLCB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMgYnV0IGFyZSBsaWtlbHkgdG8gYmUgaGFyZHdhcmUtZGVwZW5kZW50LlxuXG5HaXZlbiB0aGF0IHRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gYWN0dWFsIGhhcmR3YXJlIGFuZCBjYW4ndCBiZSByZWFkaWx5IGFjY2Vzc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEU4MDAgc2VyaWVzLCBmdXp6aW5nIGl0IGRpcmVjdGx5IGluIHN5emthbGxlciBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuIFdhaXQgYSBtaW51dGUuLi4gU3l6a2FsbGVyIGRvZXNuJ3QgZXZlbiAqaGF2ZSogdGhhdCBzcGVjaWZpYyBJbnRlbCBFODAwIGhhcmR3YXJlIGluIGl0cyB0ZXN0YmVkcywgc28gaXTigJlzIGEgZGVmaW5pdGUgbm8tZ28uXG5cblN0aWxsLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIHRoZXJlICphbnl0aGluZyogcmVzZW1ibGluZyBhIG1vY2sgZHJpdmVyLCBvciBhIHdheSB0byB0cmlnZ2VyIGl0IHdpdGggc29tZSBraW5kIG9mIGR1bW15IG5ldGRldj8gVGhlIGBpY2VgIGRyaXZlciBkb2VzIHJlZ2lzdGVyIGEgbmV0ZGV2LCB3aGljaCBpcyBhIGtleSBwYXJ0LCBidXQgaXQncyBkZXBlbmRlbnQgb24gYSBzdWNjZXNzZnVsIFBDSSBkZXZpY2UgcHJvYmUuIEkgbmVlZCB0byBjb25maXJtLiBJIHNob3VsZCBsb29rIGludG8gYGljZV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjIyLjA0NjU5ODcxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY5NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpY2VfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTE3MT12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxODY6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMTYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTIxNzogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMTgtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MjIzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjI0OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIyNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MzA4LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTMwOTpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUzMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01OTA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTkxMC1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1OTExOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01OTEyLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToyMi4xMzgzMDQwMDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMyOTg2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBTdWl0YWJpbGl0eSBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFBDSSBkcml2ZXJzLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gZGVhbGluZyB3aXRoIGFuIGBpY2VgIGRyaXZlciDigJMgaXQncyBnb2luZyB0byBiZSB1c2VsZXNzIHdpdGhvdXQgYSBQQ0kgZGV2aWNlIHByZXNlbnQuIFNwZWNpZmljYWxseSwgYGljZV9wcm9iZWAgd29uJ3QgZXhlY3V0ZSwgYW5kIHRoZSBuZXR3b3JrIGRldmljZSB3b24ndCBnZXQgcmVnaXN0ZXJlZC4gVGhhdCBkaXJlY3RseSB0ZWxscyBtZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBzZXR1cCwgcmlnaHQ/IEdDRSwgUUVNVSwgYW55IG9mIHRoZW0uIE5vIGRpY2UuXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJJ20gd29ya2luZyB3aXRoLCBJIG5lZWQgdG8gZmxhZyB0aGlzIGFzIHVuZnV6emFibGUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGd1aWRlbGluZXMuLi4gWXVwOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIi4gQmluZ28hIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIGNhdGVyaW5nIHNwZWNpZmljYWxseSB0byBJbnRlbCBFODAwIHNlcmllcyBuZXR3b3JrIGNhcmRzLCBhbmQgaXQgaXMgaW1wb3NzaWJsZSB0byBiZSB0ZXN0ZWQgd2l0aG91dCB0aGF0IGhhcmR3YXJlLiBJdCBpcyB0aGUgcGVyZmVjdCBzY2VuYXJpbyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgZ2V0IHRoaXMgZG9jdW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NiwiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToyNy4zNzEyOTQzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGluaXRpYWxpemUuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrrvbm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 21:22:49 +0000 UTC FinishedAt: 2026-07-01 21:35:28 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTAzYWZjYjYwYjcyMmFhZmM0M2YzMTRjYWE3OWIxMDliZDE2OWM1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMjE6MzU6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuaW5kZXggYzMwZTI3YmJmZTZlMjUuLjA3ZTIwMTZmYjk0ODFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtNjYsOCAmIzQzOzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4gZXJyX2RlZl90eDpcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuJiM0MztcdC8qIGtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzIChzZWUgcmVsZWFzZV9lbnYpICovXG4mIzQzO1x0aWYgKCEodXBsaW5rX3ZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSlcbiYjNDM7XHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuJiM0MztcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuIGVycl9kZWZfcng6XG4gXHRpY2VfdnNpX2RlbF92bGFuX3plcm8odXBsaW5rX3ZzaSk7XG4gZXJyX3ZsYW5femVybzpcbkBAIC0yNzYsOCAmIzQzOzI3OCwxNiBAQCBzdGF0aWMgdm9pZCBpY2VfZXN3aXRjaF9yZWxlYXNlX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdHZsYW5fb3BzLVx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodXBsaW5rX3ZzaSk7XG4gXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4gXHRcdFx0IElDRV9GTFRSX1RYKTtcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91czsgaXQgbXVzdCBvdXRsaXZlXG4mIzQzO1x0ICogdGhlIHNlc3Npb24uIFRlc3QgdGhlIGxpdmUgbmV0ZGV2LVx1MDAzZWZsYWdzLCB0aGUgc2FtZSB2YWx1ZVxuJiM0MztcdCAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cbiYjNDM7XHQgKiBvbiwgc28gdGhlIHByZXNlcnZlZCBERkxUIHJ1bGUgYW5kIHRoZSBwcnVuaW5nIHN0YXRlIHN0YXkgY29uc2lzdGVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoISh1cGxpbmtfdnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpKVxuJiM0MztcdFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsXG4mIzQzO1x0XHRcdFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XG4mIzQzO1xuIFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXG4gXHRcdFx0XHQgICAgICAgdXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbWFjLnBlcm1fYWRkcixcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmZDJkYWIwM2UzNjMuLjFjMThhNWNiZjU5ZTc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMjc0LDcgJiM0MzsyNzQsOCBAQCBzdGF0aWMgaW50IGljZV9zZXRfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgIT0gSUNFX1ZTSV9QRilcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xuJiM0MztcdC8qIHNraXAgcGVyLVZJRCBleHBhbnNpb247IHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgZXZlcnkgVklEICovXG4mIzQzO1x0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXHUwMDI2XHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4gXHRcdFx0XHRcdFx0ICAgICAgIHByb21pc2NfbSk7XG5AQCAtMzA0LDkgJiM0MzszMDUsMjAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcbi1cdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4mIzQzO1x0XHR1OCB2bGFuX3Byb21pc2NfbSA9IHByb21pc2NfbSB8IElDRV9QUk9NSVNDX1ZMQU5fUlggfFxuJiM0MztcdFx0XHRcdCAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYO1xuJiM0MztcdFx0aW50IHZpZDBfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNldCB0aW1lIHVzZWQgZWl0aGVyIHJlY2lwZSAocGVyLVZJRCBQUk9NSVNDX1ZMQU4sIG9yIHZpZD0wXG4mIzQzO1x0XHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxuJiM0MztcdFx0ICogYm90aDsgY2xlYXJpbmcgYW4gYWJzZW50IHJ1bGUgc3VjY2VlZHNcbiYjNDM7XHRcdCAqL1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4tXHRcdFx0XHRcdFx0XHQgcHJvbWlzY19tKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgdmxhbl9wcm9taXNjX20pO1xuJiM0MztcdFx0dmlkMF9zdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgdnNpLVx1MDAzZWlkeCwgcHJvbWlzY19tLCAwKTtcbiYjNDM7XHRcdGlmICghc3RhdHVzKVxuJiM0MztcdFx0XHRzdGF0dXMgPSB2aWQwX3N0YXR1cztcbiBcdH0gZWxzZSB7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ktXHUwMDNlaWR4LFxuIFx0XHRcdFx0XHRcdCAgICBwcm9taXNjX20sIDApO1xuQEAgLTMxNyw2ICYjNDM7MzI5LDU5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjIC0gZHJvcCB0aGUgZGVmYXVsdCBWU0kgUnggcnVsZSBvbiBwcm9taXNjIG9mZlxuJiM0MzsgKiBAdnNpOiB0aGUgVlNJIGxlYXZpbmcgcHJvbWlzY3VvdXMgbW9kZVxuJiM0MzsgKlxuJiM0MzsgKiBGb3IgYW4gSUZGX0FMTE1VTFRJIFZTSSB3aXRoIFZMQU5zIHRoZSBwZXItVklEIG11bHRpY2FzdCBydWxlcyBhcmVcbiYjNDM7ICogcmVpbnN0YXRlZCBiZWZvcmUgdGhlIGRlZmF1bHQgcnVsZSBpcyBjbGVhcmVkIHNvIGNvdmVyYWdlIG5ldmVyIGxhcHNlcztcbiYjNDM7ICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nXG4mIzQzOyAqIHRoZWlyIG93biBmYWlsdXJlcywgc28gZXJyb3IgcmV0dXJucyBhcmUgbm90IHJlLWxvZ2dlZCBoZXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfdnNpX3ZsYW5fb3BzICp2bGFuX29wcyA9IGljZV9nZXRfY29tcGF0X3ZzaV92bGFuX29wcyh2c2kpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2c2ktXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHc7XG4mIzQzO1x0Ym9vbCByZXN0b3JlX21jO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHJlc3RvcmVfbWMgPSAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzdG9yZV9tYykge1xuJiM0MztcdFx0ZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVFWElTVClcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4mIzQzO1x0XHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXN0b3JlX21jKVxuJiM0MztcdFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoaHcsIHZzaS1cdTAwM2VpZHgsIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsXG4mIzQzO1x0XHRcdFx0XHQgICAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIERyb3AgdGhlIHBlci1WSUQgbXVsdGljYXN0IHByb21pc2MgcnVsZXMsIHJlZHVuZGFudCBvbmNlIHRoZSBkZWZhdWx0XG4mIzQzOyAqIFZTSSBSeCBydWxlIGNvdmVycyBldmVyeSBWSUQuIEEgbm8tb3Agd2hlbiB0aGUgVlNJIGhhcyBubyBWTEFOcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGljZV92c2lfY2xlYXJfdmxhbl9tY19wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSlcbiYjNDM7XHRcdGljZV9mbHRyX2NsZWFyX3ZsYW5fdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaSxcbiYjNDM7XHRcdFx0XHRcdFx0SUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX3N5bmNfZmx0ciAtIFVwZGF0ZSB0aGUgVlNJIGZpbHRlciBsaXN0IHRvIHRoZSBIV1xuICAqIEB2c2k6IHB0ciB0byB0aGUgVlNJXG5AQCAtNDI5LDMwICYjNDM7NDk0LDM1IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9zeW5jX2ZsdHIoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHR2bGFuX29wcy1cdTAwM2VkaXNfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXG4tXHRcdFx0XHQvKiBwcm9taXNjdW91cyBtb2RlIGltcGxpZXMgYWxsbXVsdGljYXN0IHNvXG4tXHRcdFx0XHQgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmVcbi1cdFx0XHRcdCAqIHN1YnNjcmliZWQgdG8gbXVsdGljYXN0IHBhY2tldHMgY29taW5nIHRvXG4tXHRcdFx0XHQgKiB0aGUgcG9ydFxuJiM0MztcdFx0XHRcdC8qIERGTFQgbm93IGNvdmVycyBldmVyeSBWSUQ7IGRyb3AgdGhlIHBlci1WSURcbiYjNDM7XHRcdFx0XHQgKiBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcyBhIHByaW9yIElGRl9BTExNVUxUSVxuJiM0MztcdFx0XHRcdCAqIHBhc3MgbWF5IGhhdmUgaW5zdGFsbGVkIChzZXBhcmF0ZSBwYXNzZXMgb24gYVxuJiM0MztcdFx0XHRcdCAqIGJyaWRnZSBqb2luKSBzbyB0aGV5IGRvIG5vdCBsaW5nZXIgYW5kIGV4aGF1c3RcbiYjNDM7XHRcdFx0XHQgKiB0aGUgRkxVIHBvb2wuIGV4aXRfZGZsdF9wcm9taXNjKCkgcmVpbnN0YXRlc1xuJiM0MztcdFx0XHRcdCAqIHRoZW0gb24gcHJvbWlzYyBvZmYuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGVyciA9IGljZV9zZXRfcHJvbWlzYyh2c2ksXG4tXHRcdFx0XHRcdFx0ICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuJiM0MztcdFx0XHRcdGljZV92c2lfY2xlYXJfdmxhbl9tY19wcm9taXNjKHZzaSk7XG4gXHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogUHJvbWlzY3VvdXMgbW9kZSBpbXBsaWVzIGFsbG11bHRpY2FzdC4gU3Vic2NyaWJlXG4mIzQzO1x0XHRcdCAqIHRoZSBWU0kgdG8gYWxsIG11bHRpY2FzdCBldmVuIHdoZW4gdGhlIGRlZmF1bHQgVlNJXG4mIzQzO1x0XHRcdCAqIHJ1bGUgaXMgYWxyZWFkeSBpbiB1c2UgYW5kIHRoZSBibG9jayBhYm92ZSBpc1xuJiM0MztcdFx0XHQgKiBza2lwcGVkIChpdCBtYXkgYmUgb3duZWQgYnkgYW5vdGhlciBWU0ksIG9yXG4mIzQzO1x0XHRcdCAqIHByZXNlcnZlZCBhY3Jvc3MgYSBzd2l0Y2hkZXYgc2Vzc2lvbik7IHRoZSB1bmljYXN0XG4mIzQzO1x0XHRcdCAqIGNhdGNoLWFsbCBkb2VzIG5vdCBjb3ZlciB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbi5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGVyciA9IGljZV9zZXRfcHJvbWlzYyh2c2ksIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3Byb21pc2M7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqL1xuIFx0XHRcdGlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbi1cdFx0XHRcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuJiM0MztcdFx0XHRcdGVyciA9IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2ModnNpKTtcbiBcdFx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0Vycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcXG5cJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgZXJyLCB2c2ktXHUwMDNldnNpX251bSk7XG4gXHRcdFx0XHRcdHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyB8PVxuIFx0XHRcdFx0XHRcdElGRl9QUk9NSVNDO1xuIFx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2XG4tXHRcdFx0XHQgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuLVx0XHRcdFx0XHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90XG5AQCAtMzY3NSwxMCAmIzQzOzM3NDUsOSBAQCBpbnQgaWNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4gXHR3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChJQ0VfQ0ZHX0JVU1ksIHZzaS1cdTAwM2VzdGF0ZSkpXG4gXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcbi1cdC8qIEFkZCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlIGZvciB0aGUgVkxBTiBJRCB0byBiZSBhZGRlZCBpZlxuLVx0ICogYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZC5cbi1cdCAqL1xuLVx0aWYgKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSB7XG4mIzQzO1x0Lyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqL1xuJiM0MztcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4gXHRcdHJldCA9IGljZV9mbHRyX3NldF92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0ICAgICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyxcbiBcdFx0XHRcdFx0ICAgICAgIHZpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRvIHByb2JlIGFuZCBpbml0aWFsaXplLiBUaGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGRldmljZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDEwM2FmY2I2MGI3MjJhYWZjNDNmMzE0Y2FhNzliMTA5YmQxNjljNWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDIxOjM1OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYwppbmRleCBjMzBlMjdiYmZlNmUyNS4uMDdlMjAxNmZiOTQ4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCkBAIC02Niw4ICYjNDM7NjYsMTAgQEAgc3RhdGljIGludCBpY2VfZXN3aXRjaF9zZXR1cF9lbnYoc3RydWN0IGljZV9wZiAqcGYpCiAJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCiAJCQkgSUNFX0ZMVFJfVFgpOwogZXJyX2RlZl90eDoKLQlpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktJmd0O3BvcnRfaW5mbywgdXBsaW5rX3ZzaS0mZ3Q7aWR4LCBmYWxzZSwKLQkJCSBJQ0VfRkxUUl9SWCk7CiYjNDM7CS8qIGtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzIChzZWUgcmVsZWFzZV9lbnYpICovCiYjNDM7CWlmICghKHVwbGlua192c2ktJmd0O25ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1BST01JU0MpKQomIzQzOwkJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwKJiM0MzsJCQkJIGZhbHNlLCBJQ0VfRkxUUl9SWCk7CiBlcnJfZGVmX3J4OgogCWljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTsKIGVycl92bGFuX3plcm86CkBAIC0yNzYsOCAmIzQzOzI3OCwxNiBAQCBzdGF0aWMgdm9pZCBpY2VfZXN3aXRjaF9yZWxlYXNlX2VudihzdHJ1Y3QgaWNlX3BmICpwZikKIAl2bGFuX29wcy0mZ3Q7ZW5hX3J4X2ZpbHRlcmluZyh1cGxpbmtfdnNpKTsKIAlpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktJmd0O3BvcnRfaW5mbywgdXBsaW5rX3ZzaS0mZ3Q7aWR4LCBmYWxzZSwKIAkJCSBJQ0VfRkxUUl9UWCk7Ci0JaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCi0JCQkgSUNFX0ZMVFJfUlgpOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91czsgaXQgbXVzdCBvdXRsaXZlCiYjNDM7CSAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi0mZ3Q7ZmxhZ3MsIHRoZSBzYW1lIHZhbHVlCiYjNDM7CSAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtJmd0OyBpY2VfY2ZnX3ZsYW5fcHJ1bmluZygpIGFib3ZlIGtleXMgaXRzIGRlY2lzaW9uCiYjNDM7CSAqIG9uLCBzbyB0aGUgcHJlc2VydmVkIERGTFQgcnVsZSBhbmQgdGhlIHBydW5pbmcgc3RhdGUgc3RheSBjb25zaXN0ZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKCEodXBsaW5rX3ZzaS0mZ3Q7bmV0ZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfUFJPTUlTQykpCiYjNDM7CQlpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktJmd0O3BvcnRfaW5mbywgdXBsaW5rX3ZzaS0mZ3Q7aWR4LAomIzQzOwkJCQkgZmFsc2UsIElDRV9GTFRSX1JYKTsKJiM0MzsKIAlpY2VfZmx0cl9hZGRfbWFjX2FuZF9icm9hZGNhc3QodXBsaW5rX3ZzaSwKIAkJCQkgICAgICAgdXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLSZndDttYWMucGVybV9hZGRyLAogCQkJCSAgICAgICBJQ0VfRldEX1RPX1ZTSSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGUyZmQyZGFiMDNlMzYzLi4xYzE4YTVjYmY1OWU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKQEAgLTI3NCw3ICYjNDM7Mjc0LDggQEAgc3RhdGljIGludCBpY2Vfc2V0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKQogCWlmICh2c2ktJmd0O3R5cGUgIT0gSUNFX1ZTSV9QRikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkgewomIzQzOwkvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqLwomIzQzOwlpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSAmYW1wOyZhbXA7ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHsKIAkJcHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7CiAJCXN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLAogCQkJCQkJICAgICAgIHByb21pc2NfbSk7CkBAIC0zMDQsOSAmIzQzOzMwNSwyMCBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkgewotCQlwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTsKJiM0MzsJCXU4IHZsYW5fcHJvbWlzY19tID0gcHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8CiYjNDM7CQkJCSAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYOwomIzQzOwkJaW50IHZpZDBfc3RhdHVzOwomIzQzOwomIzQzOwkJLyogc2V0IHRpbWUgdXNlZCBlaXRoZXIgcmVjaXBlIChwZXItVklEIFBST01JU0NfVkxBTiwgb3IgdmlkPTAKJiM0MzsJCSAqIFBST01JU0MgdmlhIHRoZSBpY2Vfc2V0X3Byb21pc2MoKSBlbHNlIGJyYW5jaCksIHNvIGNsZWFyCiYjNDM7CQkgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkcwomIzQzOwkJICovCiAJCXN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZsYW5fdnNpX3Byb21pc2MoJmFtcDt2c2ktJmd0O2JhY2stJmd0O2h3LCB2c2ksCi0JCQkJCQkJIHByb21pc2NfbSk7CiYjNDM7CQkJCQkJCSB2bGFuX3Byb21pc2NfbSk7CiYjNDM7CQl2aWQwX3N0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywKJiM0MzsJCQkJCQkJIHZzaS0mZ3Q7aWR4LCBwcm9taXNjX20sIDApOwomIzQzOwkJaWYgKCFzdGF0dXMpCiYjNDM7CQkJc3RhdHVzID0gdmlkMF9zdGF0dXM7CiAJfSBlbHNlIHsKIAkJc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoJmFtcDt2c2ktJmd0O2JhY2stJmd0O2h3LCB2c2ktJmd0O2lkeCwKIAkJCQkJCSAgICBwcm9taXNjX20sIDApOwpAQCAtMzE3LDYgJiM0MzszMjksNTkgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pCiAJcmV0dXJuIHN0YXR1czsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2MgLSBkcm9wIHRoZSBkZWZhdWx0IFZTSSBSeCBydWxlIG9uIHByb21pc2Mgb2ZmCiYjNDM7ICogQHZzaTogdGhlIFZTSSBsZWF2aW5nIHByb21pc2N1b3VzIG1vZGUKJiM0MzsgKgomIzQzOyAqIEZvciBhbiBJRkZfQUxMTVVMVEkgVlNJIHdpdGggVkxBTnMgdGhlIHBlci1WSUQgbXVsdGljYXN0IHJ1bGVzIGFyZQomIzQzOyAqIHJlaW5zdGF0ZWQgYmVmb3JlIHRoZSBkZWZhdWx0IHJ1bGUgaXMgY2xlYXJlZCBzbyBjb3ZlcmFnZSBuZXZlciBsYXBzZXM7CiYjNDM7ICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nCiYjNDM7ICogdGhlaXIgb3duIGZhaWx1cmVzLCBzbyBlcnJvciByZXR1cm5zIGFyZSBub3QgcmUtbG9nZ2VkIGhlcmUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHZzaS0mZ3Q7bmV0ZGV2OwomIzQzOwlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7dnNpLSZndDtiYWNrLSZndDtodzsKJiM0MzsJYm9vbCByZXN0b3JlX21jOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlyZXN0b3JlX21jID0gKHZzaS0mZ3Q7Y3VycmVudF9uZXRkZXZfZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSk7CiYjNDM7CiYjNDM7CWlmIChyZXN0b3JlX21jKSB7CiYjNDM7CQllcnIgPSBpY2VfZmx0cl9zZXRfdmxhbl92c2lfcHJvbWlzYyhodywgdnNpLAomIzQzOwkJCQkJCSAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUVYSVNUKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlpZiAobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpCiYjNDM7CQl2bGFuX29wcy0mZ3Q7ZW5hX3J4X2ZpbHRlcmluZyh2c2kpOwomIzQzOwomIzQzOwlpZiAocmVzdG9yZV9tYykKJiM0MzsJCWljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktJmd0O2lkeCwgSUNFX01DQVNUX1BST01JU0NfQklUUywKJiM0MzsJCQkJCSAgIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRHJvcCB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcywgcmVkdW5kYW50IG9uY2UgdGhlIGRlZmF1bHQKJiM0MzsgKiBWU0kgUnggcnVsZSBjb3ZlcnMgZXZlcnkgVklELiBBIG5vLW9wIHdoZW4gdGhlIFZTSSBoYXMgbm8gVkxBTnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSkKJiM0Mzt7CiYjNDM7CWlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKQomIzQzOwkJaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaSwKJiM0MzsJCQkJCQlJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFcKICAqIEB2c2k6IHB0ciB0byB0aGUgVlNJCkBAIC00MjksMzAgJiM0Mzs0OTQsMzUgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQkJCWVyciA9IDA7CiAJCQkJdmxhbl9vcHMtJmd0O2Rpc19yeF9maWx0ZXJpbmcodnNpKTsKIAotCQkJCS8qIHByb21pc2N1b3VzIG1vZGUgaW1wbGllcyBhbGxtdWx0aWNhc3Qgc28KLQkJCQkgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmUKLQkJCQkgKiBzdWJzY3JpYmVkIHRvIG11bHRpY2FzdCBwYWNrZXRzIGNvbWluZyB0bwotCQkJCSAqIHRoZSBwb3J0CiYjNDM7CQkJCS8qIERGTFQgbm93IGNvdmVycyBldmVyeSBWSUQ7IGRyb3AgdGhlIHBlci1WSUQKJiM0MzsJCQkJICogbXVsdGljYXN0IHByb21pc2MgcnVsZXMgYSBwcmlvciBJRkZfQUxMTVVMVEkKJiM0MzsJCQkJICogcGFzcyBtYXkgaGF2ZSBpbnN0YWxsZWQgKHNlcGFyYXRlIHBhc3NlcyBvbiBhCiYjNDM7CQkJCSAqIGJyaWRnZSBqb2luKSBzbyB0aGV5IGRvIG5vdCBsaW5nZXIgYW5kIGV4aGF1c3QKJiM0MzsJCQkJICogdGhlIEZMVSBwb29sLiBleGl0X2RmbHRfcHJvbWlzYygpIHJlaW5zdGF0ZXMKJiM0MzsJCQkJICogdGhlbSBvbiBwcm9taXNjIG9mZi4KIAkJCQkgKi8KLQkJCQllcnIgPSBpY2Vfc2V0X3Byb21pc2ModnNpLAotCQkJCQkJICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBvdXRfcHJvbWlzYzsKJiM0MzsJCQkJaWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2ModnNpKTsKIAkJCX0KJiM0MzsKJiM0MzsJCQkvKiBQcm9taXNjdW91cyBtb2RlIGltcGxpZXMgYWxsbXVsdGljYXN0LiBTdWJzY3JpYmUKJiM0MzsJCQkgKiB0aGUgVlNJIHRvIGFsbCBtdWx0aWNhc3QgZXZlbiB3aGVuIHRoZSBkZWZhdWx0IFZTSQomIzQzOwkJCSAqIHJ1bGUgaXMgYWxyZWFkeSBpbiB1c2UgYW5kIHRoZSBibG9jayBhYm92ZSBpcwomIzQzOwkJCSAqIHNraXBwZWQgKGl0IG1heSBiZSBvd25lZCBieSBhbm90aGVyIFZTSSwgb3IKJiM0MzsJCQkgKiBwcmVzZXJ2ZWQgYWNyb3NzIGEgc3dpdGNoZGV2IHNlc3Npb24pOyB0aGUgdW5pY2FzdAomIzQzOwkJCSAqIGNhdGNoLWFsbCBkb2VzIG5vdCBjb3ZlciB0aGUgbXVsdGljYXN0IHN1YnNjcmlwdGlvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQllcnIgPSBpY2Vfc2V0X3Byb21pc2ModnNpLCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIG91dF9wcm9taXNjOwogCQl9IGVsc2UgewogCQkJLyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqLwogCQkJaWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSkgewotCQkJCWVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpOwomIzQzOwkJCQllcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7CiAJCQkJaWYgKGVycikgewotCQkJCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXG4mIzM0OywKLQkJCQkJCSAgIGVyciwgdnNpLSZndDt2c2lfbnVtKTsKIAkJCQkJdnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyB8PQogCQkJCQkJSUZGX1BST01JU0M7CiAJCQkJCWdvdG8gb3V0X3Byb21pc2M7CiAJCQkJfQotCQkJCWlmICh2c2ktJmd0O25ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsKLQkJCQkgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKQotCQkJCQl2bGFuX29wcy0mZ3Q7ZW5hX3J4X2ZpbHRlcmluZyh2c2kpOwogCQkJfQogCiAJCQkvKiBkaXNhYmxlIGFsbG11bHRpIGhlcmUsIGJ1dCBvbmx5IGlmIGFsbG11bHRpIGlzIG5vdApAQCAtMzY3NSwxMCAmIzQzOzM3NDUsOSBAQCBpbnQgaWNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktJmd0O3N0YXRlKSkKIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCi0JLyogQWRkIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIHRoZSBWTEFOIElEIHRvIGJlIGFkZGVkIGlmCi0JICogYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZC4KLQkgKi8KLQlpZiAodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHsKJiM0MzsJLyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqLwomIzQzOwlpZiAoKHZzaS0mZ3Q7Y3VycmVudF9uZXRkZXZfZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7CiAJCXJldCA9IGljZV9mbHRyX3NldF92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaS0mZ3Q7aWR4LAogCQkJCQkgICAgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLAogCQkJCQkgICAgICAgdmlkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBUaGlzIElDRSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBpY2VgIGRyaXZlciDigJMgdGhhdCYjMzk7cyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgaWNlX2Vzd2l0Y2guY2AgYW5kIGBpY2VfbWFpbi5jYC4gSXQmIzM5O3MgYWJvdXQgaG93IHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gZmlsdGVyaW5nIHBsYXkgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSBmb3IgdGhhdCBkZWZhdWx0IFZTSSByZWNlaXZlIHJ1bGUuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB0ZXN0YWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IFRoZSBgaWNlYCBkcml2ZXIgaXMsIG9mIGNvdXJzZSwgZGVzaWduZWQgZm9yIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgbmV0d29yayBjYXJkcy4gVHlwaWNhbGx5LCB0ZXN0aW5nIFBDSWUgaGFyZHdhcmUgZHJpdmVycyB1bmRlciBRRU1VIGlzIHRyaWNreSB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3IgZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgb3Igd2UgcmVzb3J0IHRvIFBDSSBwYXNzdGhyb3VnaC4gQW5kIHN5emthbGxlciwgd2hpY2ggaXMgdXN1YWxseSBvdXIgZ28tdG8sIGlzbiYjMzk7dCBrbm93biB0byBoYXZlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lmaWMgSW50ZWwgTklDIHN1cHBvcnQuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApiBkb2VzIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlIHRoZSBgaWNlYCBoYXJkd2FyZT8gSSBkb27igJl0IHRoaW5rIHNvLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZS4gTXkgYnJhaW4gaXMgcmF0dGxpbmcgb2ZmIHRoZSB1c3VhbCBzdXNwZWN0czogYGUxMDAwYCwgYGUxMDAwZWAsIGBpZ2JgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgcGNuZXRgLCBgbmUya19wY2lgLCBgdHVsaXBgLi4uIGJ1dCBubyBgaWNlYC4gTm9wZS4KCkFscmlnaHQsIHRpbWUgdG8gdmVyaWZ5IGlmIHdlIGNhbiBldmVuIGZ1enogdGhpcyB0aGluZyBlZmZlY3RpdmVseS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHRyZWUgYW5kIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgaWNlYC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZ29pbmcgb24gYW55d2hlcmUgb3IgaWYgaXQmIzM5O3MgcHVyZWx5IGEgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlci4gVGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IGZlYXNpYmxlIGZ1enppbmcgdGhpcyBpcyBnb2luZyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1FFTVUuKmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMjE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ3MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkNoZWNraW5nIGZvciBJQ0UgTW9jay9WaXJ0dWFsIERldmljZSBTdXBwb3J0KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW4sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgcmVpbnZlbnRpbmcgdGhlIHdoZWVsLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgdmlydHVhbCBkZXZpY2Ugb3IgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGBpY2VgIGNvbXBvbmVudCBhbHJlYWR5IGF2YWlsYWJsZS4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZGV2ZWxvcG1lbnQgdGltZTsgYW5kIHNvLCBpZiB0aGVyZSYjMzk7cyBhIHByZS1idWlsdCBzb2x1dGlvbiB0aGF0IHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIEkmIzM5O2xsIGxldmVyYWdlIHRoYXQuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzaW11bGF0ZXMgdGhlIGBpY2VgIGJlaGF2aW9yIGZvciB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHB1cnBvc2VzLiBFZmZpY2llbmN5IGlzIGtleSwgYW5kIEkgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgdGltZSBidWlsZGluZyBzb21ldGhpbmcgZnJvbSBzY3JhdGNoIGlmIGl0JiMzOTtzIGFscmVhZHkgcmVhZGlseSBhdmFpbGFibGUgb3IsIGNvbnZlcnNlbHksIHRvIHNwZW5kIHRpbWUgbG9va2luZyBmb3IgYSBzb2x1dGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnQuKmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmM9NDg4PXZvaWQgaWNlX2RldmxpbmtfZGVzdHJveV92Zl9wb3J0KHN0cnVjdCBpY2VfdmYgKnZmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy00OTctICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYzo0OTg6ICogUmVnaXN0ZXIgdmlydHVhbCBmbGF2b3VyIGRldmxpbmsgcG9ydCBmb3IgdGhlIHN1YmZ1bmN0aW9uIGF1eGlsaWFyeSBkZXZpY2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy00OTktICogY3JlYXRlZCBhZnRlciBhY3RpdmF0aW5nIGEgZHluYW1pY2FsbHkgYWRkZWQgZGV2bGluayBwb3J0LlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmM9MjM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYzoyNDppY2VfaW5pdF92aXJ0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgYmFzZSwgdTMyIG51bV9lbnRyaWVzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYz00MD1zdGF0aWMgdm9pZCBpY2VfZGVpbml0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjQ1OnN0YXRpYyB2b2lkIGljZV9kZWluaXRfdmlydF9pcnFfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtNDYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmM9MjE5PXZvaWQgaWNlX2ZyZWVfaXJxKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbXNpX21hcCBtYXApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjI1MTppbnQgaWNlX3ZpcnRfZ2V0X2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBuZWVkZWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jLTI1Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNzEtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjI3Mjp2b2lkIGljZV92aXJ0X2ZyZWVfaXJxcyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTMyIGluZGV4LCB1MzIgaXJxcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtMjczLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oPTMyPXZvaWQgaWNlX2ZyZWVfaXJxKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbXNpX21hcCBtYXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuaC0zMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmg6MzQ6aW50IGljZV92aXJ0X2dldF9pcnFzKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgbmVlZGVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmg6MzU6dm9pZCBpY2VfdmlydF9mcmVlX2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBpbmRleCwgdTMyIGlycXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuaC0zNi0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jPTEwNDc9dm9pZCBpY2VfZGlzX3ZmX3FzKHN0cnVjdCBpY2VfdmYgKnZmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtMTA2Mi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmM6MTA2MzplbnVtIHZpcnRjaG5sX3N0YXR1c19jb2RlIGljZV9lcnJfdG9fdmlydF9lcnIoaW50IGVycilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtMTA2NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWJfcHJpdmF0ZS5oPTI5PWludCBpY2VfY2hlY2tfdmZfaW5pdChzdHJ1Y3QgaWNlX3ZmICp2Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYl9wcml2YXRlLmg6MzA6ZW51bSB2aXJ0Y2hubF9zdGF0dXNfY29kZSBpY2VfZXJyX3RvX3ZpcnRfZXJyKGludCBlcnIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWJfcHJpdmF0ZS5oLTMxLXN0cnVjdCBpY2VfcG9ydF9pbmZvICppY2VfdmZfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYz01OD1pY2Vfc2V0X3BmZV9saW5rKHN0cnVjdCBpY2VfdmYgKnZmLCBzdHJ1Y3QgdmlydGNobmxfcGZfZXZlbnQgKnBmZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTY0LVx0XHRwZmUtXHUwMDNlZXZlbnRfZGF0YS5saW5rX2V2ZW50X2Fkdi5saW5rX3NwZWVkID1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM6NjU6XHRcdFx0aWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubCh0cnVlLCBpY2VfbGlua19zcGVlZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTY2LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTcwLVx0XHRcdChlbnVtIHZpcnRjaG5sX2xpbmtfc3BlZWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjcxOlx0XHRcdGljZV9jb252X2xpbmtfc3BlZWRfdG9fdmlydGNobmwoZmFsc2UsIGljZV9saW5rX3NwZWVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtNzItXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYz0xNzM3PWljZV92Y192YWxpZGF0ZV92bGFuX2ZpbHRlcl9saXN0KHN0cnVjdCB2aXJ0Y2hubF92bGFuX2ZpbHRlcmluZ19jYXBzICp2ZmMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0xNzgyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoxNzgzOiAqIGljZV92Y190b192bGFuIC0gdHJhbnNmb3JtIGZyb20gc3RydWN0IHZpcnRjaG5sX3ZsYW4gdG8gc3RydWN0IGljZV92bGFuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTE3ODQtICogQHZjX3ZsYW46IHN0cnVjdCB2aXJ0Y2hubF92bGFuIHRvIHRyYW5zZm9ybVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM9MjQ2Nz1zdGF0aWMgaW50IGljZV92Y19nZXRfcGhjX3RpbWUoc3RydWN0IGljZV92ZiAqdmYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNDk3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNDk4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3ZpcnRjaG5sX29wcyBpY2VfdmlydGNobmxfZGZsdF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI0OTktXHQuZ2V0X3Zlcl9tc2cgPSBpY2VfdmNfZ2V0X3Zlcl9tc2csXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNTQ1OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9kZmx0X29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjU0Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI1NDc6XHR2Zi1cdTAwM2V2aXJ0Y2hubF9vcHMgPSBcdTAwMjZpY2VfdmlydGNobmxfZGZsdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI1NDgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM9MjYyNT1pY2VfdmNfcmVwcl9jZmdfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTggX19hbHdheXNfdW51c2VkICptc2cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNjM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3ZpcnRjaG5sX29wcyBpY2VfdmlydGNobmxfcmVwcl9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI2MzYtXHQuZ2V0X3Zlcl9tc2cgPSBpY2VfdmNfZ2V0X3Zlcl9tc2csXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNjc4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjc5OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9yZXByX29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY4MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI2ODE6XHR2Zi1cdTAwM2V2aXJ0Y2hubF9vcHMgPSBcdTAwMjZpY2VfdmlydGNobmxfcmVwcl9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI2ODItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg9NDE9c3RydWN0IGljZV92aXJ0Y2hubF9vcHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtODMtI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjg0OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9kZmx0X29wcyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjg1OnZvaWQgaWNlX3ZpcnRjaG5sX3NldF9yZXByX29wcyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTg2LXZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oPTk5PWJvb2wgaWNlX2lzX3ZsYW5fcHJvbWlzY19hbGxvd2VkKHN0cnVjdCBpY2VfdmYgKnZmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtMTAwLSNlbHNlIC8qIENPTkZJR19QQ0lfSU9WICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjEwMTpzdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZpcnRjaG5sX3NldF9kZmx0X29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oOjEwMjpzdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZpcnRjaG5sX3NldF9yZXByX29wcyhzdHJ1Y3QgaWNlX3ZmICp2ZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTEwMy1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKSB7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzI4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSWNlIERyaXZlciBmb3IgU3l6a2FsbGVyIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpY2VgIGRyaXZlciwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGZvciBJbnRlbCYjMzk7cyBFODAwIHNlcmllcyBoYXJkd2FyZS4gVGhlIHByb2JsZW0gaXMsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSYjMzk7cyBubyB2aXJ0dWFsIGNvdW50ZXJwYXJ0IGluIFFFTVUg4oCTIG5vIHZpcnR1YWwgZGV2aWNlIHRvIGhvb2sgaW50by4gSXTigJlzIG5vdCBsaWtlIHdlIGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG8gYG1hYzgwMjExX2h3c2ltYCBvciBgdmttc2AgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUuIFRoZSBjb2RlIGNoYW5nZXMgSSYjMzk7bSBzZWVpbmcgc2VlbSB0byByZXZvbHZlIGFyb3VuZCBwcm9taXNjdW91cyBtb2RlIGFuZCBWTEFOIGZpbHRlcmluZywgd2hpY2ggYXJlIGNyaXRpY2FsIGFyZWFzIGJ1dCBhcmUgbGlrZWx5IHRvIGJlIGhhcmR3YXJlLWRlcGVuZGVudC4KCkdpdmVuIHRoYXQgdGhpcyBkcml2ZXIgaXMgdGllZCB0byBhY3R1YWwgaGFyZHdhcmUgYW5kIGNhbiYjMzk7dCBiZSByZWFkaWx5IGFjY2Vzc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEU4MDAgc2VyaWVzLCBmdXp6aW5nIGl0IGRpcmVjdGx5IGluIHN5emthbGxlciBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuIFdhaXQgYSBtaW51dGUuLi4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGV2ZW4gKmhhdmUqIHRoYXQgc3BlY2lmaWMgSW50ZWwgRTgwMCBoYXJkd2FyZSBpbiBpdHMgdGVzdGJlZHMsIHNvIGl04oCZcyBhIGRlZmluaXRlIG5vLWdvLgoKU3RpbGwsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgdGhlcmUgKmFueXRoaW5nKiByZXNlbWJsaW5nIGEgbW9jayBkcml2ZXIsIG9yIGEgd2F5IHRvIHRyaWdnZXIgaXQgd2l0aCBzb21lIGtpbmQgb2YgZHVtbXkgbmV0ZGV2PyBUaGUgYGljZWAgZHJpdmVyIGRvZXMgcmVnaXN0ZXIgYSBuZXRkZXYsIHdoaWNoIGlzIGEga2V5IHBhcnQsIGJ1dCBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYSBzdWNjZXNzZnVsIFBDSSBkZXZpY2UgcHJvYmUuIEkgbmVlZCB0byBjb25maXJtLiBJIHNob3VsZCBsb29rIGludG8gYGljZV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNzE9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTg2OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTg3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjE2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTIxNzogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIxOC0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MjIzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyMjQ6aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMjUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUzMDgtXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTMwOTpcdFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUzMTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTkwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01OTEwLVx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1OTExOlx0LnByb2JlID0gaWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTkxMi1cdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDIxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjYKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgcGF0Y2gsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgUENJIGRyaXZlcnMsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O20gZGVhbGluZyB3aXRoIGFuIGBpY2VgIGRyaXZlciDigJMgaXQmIzM5O3MgZ29pbmcgdG8gYmUgdXNlbGVzcyB3aXRob3V0IGEgUENJIGRldmljZSBwcmVzZW50LiBTcGVjaWZpY2FsbHksIGBpY2VfcHJvYmVgIHdvbiYjMzk7dCBleGVjdXRlLCBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIHdvbiYjMzk7dCBnZXQgcmVnaXN0ZXJlZC4gVGhhdCBkaXJlY3RseSB0ZWxscyBtZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBzZXR1cCwgcmlnaHQ/IEdDRSwgUUVNVSwgYW55IG9mIHRoZW0uIE5vIGRpY2UuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7bSB3b3JraW5nIHdpdGgsIEkgbmVlZCB0byBmbGFnIHRoaXMgYXMgdW5mdXp6YWJsZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZ3VpZGVsaW5lcy4uLiBZdXA6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7LiBCaW5nbyEgVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgY2F0ZXJpbmcgc3BlY2lmaWNhbGx5IHRvIEludGVsIEU4MDAgc2VyaWVzIG5ldHdvcmsgY2FyZHMsIGFuZCBpdCBpcyBpbXBvc3NpYmxlIHRvIGJlIHRlc3RlZCB3aXRob3V0IHRoYXQgaGFyZHdhcmUuIEl0IGlzIHRoZSBwZXJmZWN0IHNjZW5hcmlvIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEkmIzM5O2xsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBnZXQgdGhpcyBkb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAyMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGluaXRpYWxpemUuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgZGV2aWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjA2LjM4NjgzMDEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5ODQ1NTA1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNTowNi4zODY4NDAyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4OTM5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTAzYWZjYjYwYjcyMmFhZmM0M2YzMTRjYWE3OWIxMDliZDE2OWM1ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDIxOjM1OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG5pbmRleCBjMzBlMjdiYmZlNmUyNS4uMDdlMjAxNmZiOTQ4MWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbkBAIC02Niw4ICs2NiwxMCBAQCBzdGF0aWMgaW50IGljZV9lc3dpdGNoX3NldHVwX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXFx1MDAzZWlkeCwgZmFsc2UsXFxuIFxcdFxcdFxcdCBJQ0VfRkxUUl9UWCk7XFxuIGVycl9kZWZfdHg6XFxuLVxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbi1cXHRcXHRcXHQgSUNFX0ZMVFJfUlgpO1xcbitcXHQvKiBrZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91cyAoc2VlIHJlbGVhc2VfZW52KSAqL1xcbitcXHRpZiAoISh1cGxpbmtfdnNpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpKVxcbitcXHRcXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LFxcbitcXHRcXHRcXHRcXHQgZmFsc2UsIElDRV9GTFRSX1JYKTtcXG4gZXJyX2RlZl9yeDpcXG4gXFx0aWNlX3ZzaV9kZWxfdmxhbl96ZXJvKHVwbGlua192c2kpO1xcbiBlcnJfdmxhbl96ZXJvOlxcbkBAIC0yNzYsOCArMjc4LDE2IEBAIHN0YXRpYyB2b2lkIGljZV9lc3dpdGNoX3JlbGVhc2VfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHR2bGFuX29wcy1cXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh1cGxpbmtfdnNpKTtcXG4gXFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXFx1MDAzZWlkeCwgZmFsc2UsXFxuIFxcdFxcdFxcdCBJQ0VfRkxUUl9UWCk7XFxuLVxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbi1cXHRcXHRcXHQgSUNFX0ZMVFJfUlgpO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXM7IGl0IG11c3Qgb3V0bGl2ZVxcbitcXHQgKiB0aGUgc2Vzc2lvbi4gVGVzdCB0aGUgbGl2ZSBuZXRkZXYtXFx1MDAzZWZsYWdzLCB0aGUgc2FtZSB2YWx1ZVxcbitcXHQgKiBlbmFfcnhfZmlsdGVyaW5nKCkgLVxcdTAwM2UgaWNlX2NmZ192bGFuX3BydW5pbmcoKSBhYm92ZSBrZXlzIGl0cyBkZWNpc2lvblxcbitcXHQgKiBvbiwgc28gdGhlIHByZXNlcnZlZCBERkxUIHJ1bGUgYW5kIHRoZSBwcnVuaW5nIHN0YXRlIHN0YXkgY29uc2lzdGVudC5cXG4rXFx0ICovXFxuK1xcdGlmICghKHVwbGlua192c2ktXFx1MDAzZW5ldGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykpXFxuK1xcdFxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsXFxuK1xcdFxcdFxcdFxcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xcbitcXG4gXFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8tXFx1MDAzZW1hYy5wZXJtX2FkZHIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBlMmZkMmRhYjAzZTM2My4uMWMxOGE1Y2JmNTllNzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0yNzQsNyArMjc0LDggQEAgc3RhdGljIGludCBpY2Vfc2V0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxcbiBcXHRpZiAodnNpLVxcdTAwM2V0eXBlICE9IElDRV9WU0lfUEYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcXG4rXFx0Lyogc2tpcCBwZXItVklEIGV4cGFuc2lvbjsgdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyBldmVyeSBWSUQgKi9cXG4rXFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXFx1MDAyNlxcdTAwMjYgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xcbiBcXHRcXHRwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlaHcsIHZzaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHByb21pc2NfbSk7XFxuQEAgLTMwNCw5ICszMDUsMjAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcXG4tXFx0XFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XFxuK1xcdFxcdHU4IHZsYW5fcHJvbWlzY19tID0gcHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8XFxuK1xcdFxcdFxcdFxcdCAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYO1xcbitcXHRcXHRpbnQgdmlkMF9zdGF0dXM7XFxuK1xcbitcXHRcXHQvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MFxcbitcXHRcXHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxcbitcXHRcXHQgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkc1xcbitcXHRcXHQgKi9cXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgcHJvbWlzY19tKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHZsYW5fcHJvbWlzY19tKTtcXG4rXFx0XFx0dmlkMF9zdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHZzaS1cXHUwMDNlaWR4LCBwcm9taXNjX20sIDApO1xcbitcXHRcXHRpZiAoIXN0YXR1cylcXG4rXFx0XFx0XFx0c3RhdHVzID0gdmlkMF9zdGF0dXM7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LCB2c2ktXFx1MDAzZWlkeCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHByb21pc2NfbSwgMCk7XFxuQEAgLTMxNyw2ICszMjksNTkgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pXFxuIFxcdHJldHVybiBzdGF0dXM7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjIC0gZHJvcCB0aGUgZGVmYXVsdCBWU0kgUnggcnVsZSBvbiBwcm9taXNjIG9mZlxcbisgKiBAdnNpOiB0aGUgVlNJIGxlYXZpbmcgcHJvbWlzY3VvdXMgbW9kZVxcbisgKlxcbisgKiBGb3IgYW4gSUZGX0FMTE1VTFRJIFZTSSB3aXRoIFZMQU5zIHRoZSBwZXItVklEIG11bHRpY2FzdCBydWxlcyBhcmVcXG4rICogcmVpbnN0YXRlZCBiZWZvcmUgdGhlIGRlZmF1bHQgcnVsZSBpcyBjbGVhcmVkIHNvIGNvdmVyYWdlIG5ldmVyIGxhcHNlcztcXG4rICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nXFxuKyAqIHRoZWlyIG93biBmYWlsdXJlcywgc28gZXJyb3IgcmV0dXJucyBhcmUgbm90IHJlLWxvZ2dlZCBoZXJlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHZzaS1cXHUwMDNlbmV0ZGV2O1xcbitcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3O1xcbitcXHRib29sIHJlc3RvcmVfbWM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRyZXN0b3JlX21jID0gKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKTtcXG4rXFxuK1xcdGlmIChyZXN0b3JlX21jKSB7XFxuK1xcdFxcdGVyciA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKGh3LCB2c2ksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUVYSVNUKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGlmIChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxcbitcXHRcXHR2bGFuX29wcy1cXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xcbitcXG4rXFx0aWYgKHJlc3RvcmVfbWMpXFxuK1xcdFxcdGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktXFx1MDAzZWlkeCwgSUNFX01DQVNUX1BST01JU0NfQklUUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogRHJvcCB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcywgcmVkdW5kYW50IG9uY2UgdGhlIGRlZmF1bHRcXG4rICogVlNJIFJ4IHJ1bGUgY292ZXJzIGV2ZXJ5IFZJRC4gQSBuby1vcCB3aGVuIHRoZSBWU0kgaGFzIG5vIFZMQU5zLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcXG4re1xcbitcXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSlcXG4rXFx0XFx0aWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcXG4gICogQHZzaTogcHRyIHRvIHRoZSBWU0lcXG5AQCAtNDI5LDMwICs0OTQsMzUgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRcXHR2bGFuX29wcy1cXHUwMDNlZGlzX3J4X2ZpbHRlcmluZyh2c2kpO1xcbiBcXG4tXFx0XFx0XFx0XFx0LyogcHJvbWlzY3VvdXMgbW9kZSBpbXBsaWVzIGFsbG11bHRpY2FzdCBzb1xcbi1cXHRcXHRcXHRcXHQgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmVcXG4tXFx0XFx0XFx0XFx0ICogc3Vic2NyaWJlZCB0byBtdWx0aWNhc3QgcGFja2V0cyBjb21pbmcgdG9cXG4tXFx0XFx0XFx0XFx0ICogdGhlIHBvcnRcXG4rXFx0XFx0XFx0XFx0LyogREZMVCBub3cgY292ZXJzIGV2ZXJ5IFZJRDsgZHJvcCB0aGUgcGVyLVZJRFxcbitcXHRcXHRcXHRcXHQgKiBtdWx0aWNhc3QgcHJvbWlzYyBydWxlcyBhIHByaW9yIElGRl9BTExNVUxUSVxcbitcXHRcXHRcXHRcXHQgKiBwYXNzIG1heSBoYXZlIGluc3RhbGxlZCAoc2VwYXJhdGUgcGFzc2VzIG9uIGFcXG4rXFx0XFx0XFx0XFx0ICogYnJpZGdlIGpvaW4pIHNvIHRoZXkgZG8gbm90IGxpbmdlciBhbmQgZXhoYXVzdFxcbitcXHRcXHRcXHRcXHQgKiB0aGUgRkxVIHBvb2wuIGV4aXRfZGZsdF9wcm9taXNjKCkgcmVpbnN0YXRlc1xcbitcXHRcXHRcXHRcXHQgKiB0aGVtIG9uIHByb21pc2Mgb2ZmLlxcbiBcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0ZXJyID0gaWNlX3NldF9wcm9taXNjKHZzaSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3Byb21pc2M7XFxuK1xcdFxcdFxcdFxcdGljZV92c2lfY2xlYXJfdmxhbl9tY19wcm9taXNjKHZzaSk7XFxuIFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qIFByb21pc2N1b3VzIG1vZGUgaW1wbGllcyBhbGxtdWx0aWNhc3QuIFN1YnNjcmliZVxcbitcXHRcXHRcXHQgKiB0aGUgVlNJIHRvIGFsbCBtdWx0aWNhc3QgZXZlbiB3aGVuIHRoZSBkZWZhdWx0IFZTSVxcbitcXHRcXHRcXHQgKiBydWxlIGlzIGFscmVhZHkgaW4gdXNlIGFuZCB0aGUgYmxvY2sgYWJvdmUgaXNcXG4rXFx0XFx0XFx0ICogc2tpcHBlZCAoaXQgbWF5IGJlIG93bmVkIGJ5IGFub3RoZXIgVlNJLCBvclxcbitcXHRcXHRcXHQgKiBwcmVzZXJ2ZWQgYWNyb3NzIGEgc3dpdGNoZGV2IHNlc3Npb24pOyB0aGUgdW5pY2FzdFxcbitcXHRcXHRcXHQgKiBjYXRjaC1hbGwgZG9lcyBub3QgY292ZXIgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRlcnIgPSBpY2Vfc2V0X3Byb21pc2ModnNpLCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfcHJvbWlzYztcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqL1xcbiBcXHRcXHRcXHRpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XFxuLVxcdFxcdFxcdFxcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7XFxuIFxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBlcnIsIHZzaS1cXHUwMDNldnNpX251bSk7XFxuIFxcdFxcdFxcdFxcdFxcdHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgfD1cXG4gXFx0XFx0XFx0XFx0XFx0XFx0SUZGX1BST01JU0M7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X3Byb21pc2M7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKHZzaS1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXFxuLVxcdFxcdFxcdFxcdFxcdHZsYW5fb3BzLVxcdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90XFxuQEAgLTM2NzUsMTAgKzM3NDUsOSBAQCBpbnQgaWNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuIFxcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KElDRV9DRkdfQlVTWSwgdnNpLVxcdTAwM2VzdGF0ZSkpXFxuIFxcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4gXFxuLVxcdC8qIEFkZCBtdWx0aWNhc3QgcHJvbWlzYyBydWxlIGZvciB0aGUgVkxBTiBJRCB0byBiZSBhZGRlZCBpZlxcbi1cXHQgKiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4rXFx0Lyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqL1xcbitcXHRpZiAoKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XFxuIFxcdFxcdHJldCA9IGljZV9mbHRyX3NldF92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLVxcdTAwM2VpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB2aWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNTowNy4wMTc4OTkwMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzUzNDQ0NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGluaXRpYWxpemUuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDNhZmNiNjBiNzIyYWFmYzQzZjMxNGNhYTc5YjEwOWJkMTY5YzVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAyMTozNTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbmluZGV4IGMzMGUyN2JiZmU2ZTI1Li4wN2UyMDE2ZmI5NDgxZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuQEAgLTY2LDggKzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4gZXJyX2RlZl90eDpcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuK1x0Lyoga2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXMgKHNlZSByZWxlYXNlX2VudikgKi9cbitcdGlmICghKHVwbGlua192c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykpXG4rXHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuK1x0XHRcdFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XG4gZXJyX2RlZl9yeDpcbiBcdGljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTtcbiBlcnJfdmxhbl96ZXJvOlxuQEAgLTI3Niw4ICsyNzgsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHVwbGlua192c2kpO1xuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbitcbitcdC8qIEtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzOyBpdCBtdXN0IG91dGxpdmVcbitcdCAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi1cdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcbitcdCAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cbitcdCAqIG9uLCBzbyB0aGUgcHJlc2VydmVkIERGTFQgcnVsZSBhbmQgdGhlIHBydW5pbmcgc3RhdGUgc3RheSBjb25zaXN0ZW50LlxuK1x0ICovXG4rXHRpZiAoISh1cGxpbmtfdnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpKVxuK1x0XHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCxcbitcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuK1xuIFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXG4gXHRcdFx0XHQgICAgICAgdXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbWFjLnBlcm1fYWRkcixcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmZDJkYWIwM2UzNjMuLjFjMThhNWNiZjU5ZTc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMjc0LDcgKzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4rXHQvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqL1xuK1x0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXHUwMDI2XHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4gXHRcdFx0XHRcdFx0ICAgICAgIHByb21pc2NfbSk7XG5AQCAtMzA0LDkgKzMwNSwyMCBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xuLVx0XHRwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcbitcdFx0dTggdmxhbl9wcm9taXNjX20gPSBwcm9taXNjX20gfCBJQ0VfUFJPTUlTQ19WTEFOX1JYIHxcbitcdFx0XHRcdCAgICBJQ0VfUFJPTUlTQ19WTEFOX1RYO1xuK1x0XHRpbnQgdmlkMF9zdGF0dXM7XG4rXG4rXHRcdC8qIHNldCB0aW1lIHVzZWQgZWl0aGVyIHJlY2lwZSAocGVyLVZJRCBQUk9NSVNDX1ZMQU4sIG9yIHZpZD0wXG4rXHRcdCAqIFBST01JU0MgdmlhIHRoZSBpY2Vfc2V0X3Byb21pc2MoKSBlbHNlIGJyYW5jaCksIHNvIGNsZWFyXG4rXHRcdCAqIGJvdGg7IGNsZWFyaW5nIGFuIGFic2VudCBydWxlIHN1Y2NlZWRzXG4rXHRcdCAqL1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4tXHRcdFx0XHRcdFx0XHQgcHJvbWlzY19tKTtcbitcdFx0XHRcdFx0XHRcdCB2bGFuX3Byb21pc2NfbSk7XG4rXHRcdHZpZDBfc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsXG4rXHRcdFx0XHRcdFx0XHQgdnNpLVx1MDAzZWlkeCwgcHJvbWlzY19tLCAwKTtcbitcdFx0aWYgKCFzdGF0dXMpXG4rXHRcdFx0c3RhdHVzID0gdmlkMF9zdGF0dXM7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0XHQgICAgcHJvbWlzY19tLCAwKTtcbkBAIC0zMTcsNiArMzI5LDU5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4rLyoqXG4rICogaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyAtIGRyb3AgdGhlIGRlZmF1bHQgVlNJIFJ4IHJ1bGUgb24gcHJvbWlzYyBvZmZcbisgKiBAdnNpOiB0aGUgVlNJIGxlYXZpbmcgcHJvbWlzY3VvdXMgbW9kZVxuKyAqXG4rICogRm9yIGFuIElGRl9BTExNVUxUSSBWU0kgd2l0aCBWTEFOcyB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcnVsZXMgYXJlXG4rICogcmVpbnN0YXRlZCBiZWZvcmUgdGhlIGRlZmF1bHQgcnVsZSBpcyBjbGVhcmVkIHNvIGNvdmVyYWdlIG5ldmVyIGxhcHNlcztcbisgKiB0aGUgdGhlbiByZWR1bmRhbnQgdmlkPTAgcnVsZSBpcyBkcm9wcGVkIGJlc3QtZWZmb3J0LiBUaGUgY2FsbGVlcyBsb2dcbisgKiB0aGVpciBvd24gZmFpbHVyZXMsIHNvIGVycm9yIHJldHVybnMgYXJlIG5vdCByZS1sb2dnZWQgaGVyZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvciB3aXRoIHRoZSBkZWZhdWx0IHJ1bGUgbGVmdCBpbiBwbGFjZS5cbisgKi9cbitzdGF0aWMgaW50IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSlcbit7XG4rXHRzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2c2ktXHUwMDNlbmV0ZGV2O1xuK1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodztcbitcdGJvb2wgcmVzdG9yZV9tYztcbitcdGludCBlcnI7XG4rXG4rXHRyZXN0b3JlX21jID0gKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpO1xuK1xuK1x0aWYgKHJlc3RvcmVfbWMpIHtcbitcdFx0ZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSxcbitcdFx0XHRcdFx0XHQgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTtcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcbitcdFx0dmxhbl9vcHMtXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xuK1xuK1x0aWYgKHJlc3RvcmVfbWMpXG4rXHRcdGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktXHUwMDNlaWR4LCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTLFxuK1x0XHRcdFx0XHQgICAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBEcm9wIHRoZSBwZXItVklEIG11bHRpY2FzdCBwcm9taXNjIHJ1bGVzLCByZWR1bmRhbnQgb25jZSB0aGUgZGVmYXVsdFxuKyAqIFZTSSBSeCBydWxlIGNvdmVycyBldmVyeSBWSUQuIEEgbm8tb3Agd2hlbiB0aGUgVlNJIGhhcyBubyBWTEFOcy5cbisgKi9cbitzdGF0aWMgdm9pZCBpY2VfdnNpX2NsZWFyX3ZsYW5fbWNfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuK3tcbitcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKVxuK1x0XHRpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4rXHRcdFx0XHRcdFx0SUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcbiAgKiBAdnNpOiBwdHIgdG8gdGhlIFZTSVxuQEAgLTQyOSwzMCArNDk0LDM1IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9zeW5jX2ZsdHIoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0XHR2bGFuX29wcy1cdTAwM2VkaXNfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXG4tXHRcdFx0XHQvKiBwcm9taXNjdW91cyBtb2RlIGltcGxpZXMgYWxsbXVsdGljYXN0IHNvXG4tXHRcdFx0XHQgKiB0aGF0IFZTSXMgdGhhdCBhcmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBhcmVcbi1cdFx0XHRcdCAqIHN1YnNjcmliZWQgdG8gbXVsdGljYXN0IHBhY2tldHMgY29taW5nIHRvXG4tXHRcdFx0XHQgKiB0aGUgcG9ydFxuK1x0XHRcdFx0LyogREZMVCBub3cgY292ZXJzIGV2ZXJ5IFZJRDsgZHJvcCB0aGUgcGVyLVZJRFxuK1x0XHRcdFx0ICogbXVsdGljYXN0IHByb21pc2MgcnVsZXMgYSBwcmlvciBJRkZfQUxMTVVMVElcbitcdFx0XHRcdCAqIHBhc3MgbWF5IGhhdmUgaW5zdGFsbGVkIChzZXBhcmF0ZSBwYXNzZXMgb24gYVxuK1x0XHRcdFx0ICogYnJpZGdlIGpvaW4pIHNvIHRoZXkgZG8gbm90IGxpbmdlciBhbmQgZXhoYXVzdFxuK1x0XHRcdFx0ICogdGhlIEZMVSBwb29sLiBleGl0X2RmbHRfcHJvbWlzYygpIHJlaW5zdGF0ZXNcbitcdFx0XHRcdCAqIHRoZW0gb24gcHJvbWlzYyBvZmYuXG4gXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGVyciA9IGljZV9zZXRfcHJvbWlzYyh2c2ksXG4tXHRcdFx0XHRcdFx0ICAgICAgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuK1x0XHRcdFx0aWNlX3ZzaV9jbGVhcl92bGFuX21jX3Byb21pc2ModnNpKTtcbiBcdFx0XHR9XG4rXG4rXHRcdFx0LyogUHJvbWlzY3VvdXMgbW9kZSBpbXBsaWVzIGFsbG11bHRpY2FzdC4gU3Vic2NyaWJlXG4rXHRcdFx0ICogdGhlIFZTSSB0byBhbGwgbXVsdGljYXN0IGV2ZW4gd2hlbiB0aGUgZGVmYXVsdCBWU0lcbitcdFx0XHQgKiBydWxlIGlzIGFscmVhZHkgaW4gdXNlIGFuZCB0aGUgYmxvY2sgYWJvdmUgaXNcbitcdFx0XHQgKiBza2lwcGVkIChpdCBtYXkgYmUgb3duZWQgYnkgYW5vdGhlciBWU0ksIG9yXG4rXHRcdFx0ICogcHJlc2VydmVkIGFjcm9zcyBhIHN3aXRjaGRldiBzZXNzaW9uKTsgdGhlIHVuaWNhc3RcbitcdFx0XHQgKiBjYXRjaC1hbGwgZG9lcyBub3QgY292ZXIgdGhlIG11bHRpY2FzdCBzdWJzY3JpcHRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0ZXJyID0gaWNlX3NldF9wcm9taXNjKHZzaSwgSUNFX01DQVNUX1BST01JU0NfQklUUyk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gb3V0X3Byb21pc2M7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogQ2xlYXIgUnggZmlsdGVyIHRvIHJlbW92ZSB0cmFmZmljIGZyb20gd2lyZSAqL1xuIFx0XHRcdGlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbi1cdFx0XHRcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuK1x0XHRcdFx0ZXJyID0gaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyh2c2kpO1xuIFx0XHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXFxuXCIsXG4tXHRcdFx0XHRcdFx0ICAgZXJyLCB2c2ktXHUwMDNldnNpX251bSk7XG4gXHRcdFx0XHRcdHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyB8PVxuIFx0XHRcdFx0XHRcdElGRl9QUk9NSVNDO1xuIFx0XHRcdFx0XHRnb3RvIG91dF9wcm9taXNjO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2XG4tXHRcdFx0XHQgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuLVx0XHRcdFx0XHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90XG5AQCAtMzY3NSwxMCArMzc0NSw5IEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KElDRV9DRkdfQlVTWSwgdnNpLVx1MDAzZXN0YXRlKSlcbiBcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFxuLVx0LyogQWRkIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIHRoZSBWTEFOIElEIHRvIGJlIGFkZGVkIGlmXG4tXHQgKiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkLlxuLVx0ICovXG4tXHRpZiAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcbitcdC8qIHNraXAgdGhlIHBlci1WSUQgcnVsZSB3aGVuIHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgdGhpcyBWSUQgKi9cbitcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cmV0ID0gaWNlX2ZsdHJfc2V0X3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ktXHUwMDNlaWR4LFxuIFx0XHRcdFx0XHQgICAgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLFxuIFx0XHRcdFx0XHQgICAgICAgdmlkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjA3LjAxNzkwNDQ5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDU4NzM2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgVGhpcyBJQ0UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGljZWAgZHJpdmVyIOKAkyB0aGF0J3MgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX21haW4uY2AuIEl0J3MgYWJvdXQgaG93IHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gZmlsdGVyaW5nIHBsYXkgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSBmb3IgdGhhdCBkZWZhdWx0IFZTSSByZWNlaXZlIHJ1bGUuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhpcyBldmVuIHRlc3RhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gVGhlIGBpY2VgIGRyaXZlciBpcywgb2YgY291cnNlLCBkZXNpZ25lZCBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBUeXBpY2FsbHksIHRlc3RpbmcgUENJZSBoYXJkd2FyZSBkcml2ZXJzIHVuZGVyIFFFTVUgaXMgdHJpY2t5IHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIGZvciB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIG9yIHdlIHJlc29ydCB0byBQQ0kgcGFzc3Rocm91Z2guIEFuZCBzeXprYWxsZXIsIHdoaWNoIGlzIHVzdWFsbHkgb3VyIGdvLXRvLCBpc24ndCBrbm93biB0byBoYXZlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lmaWMgSW50ZWwgTklDIHN1cHBvcnQuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmIGRvZXMgUUVNVSAqYWN0dWFsbHkqIGVtdWxhdGUgdGhlIGBpY2VgIGhhcmR3YXJlPyBJIGRvbuKAmXQgdGhpbmsgc28sIGJ1dCBsZXQncyBtYWtlIHN1cmUuIE15IGJyYWluIGlzIHJhdHRsaW5nIG9mZiB0aGUgdXN1YWwgc3VzcGVjdHM6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYHJ0bDgxMzlgLCBgdmlydGlvLW5ldGAsIGB2bXhuZXQzYCwgYHBjbmV0YCwgYG5lMmtfcGNpYCwgYHR1bGlwYC4uLiBidXQgbm8gYGljZWAuIE5vcGUuXG5cbkFscmlnaHQsIHRpbWUgdG8gdmVyaWZ5IGlmIHdlIGNhbiBldmVuIGZ1enogdGhpcyB0aGluZyBlZmZlY3RpdmVseS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHRyZWUgYW5kIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgaWNlYC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSdzIGFueSBzb3J0IG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBnb2luZyBvbiBhbnl3aGVyZSBvciBpZiBpdCdzIHB1cmVseSBhIGhhcmR3YXJlLWRlcGVuZGVudCBkcml2ZXIuIFRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyBmZWFzaWJsZSBmdXp6aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToxMy4xNjM3ODMzNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NzU3OTA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJRRU1VLippY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToxMy4zMTE1NjU3NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODI0MzI1NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHByb2Zlc3Npb25hbCdzIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIGZvciBJQ0UgTW9jay9WaXJ0dWFsIERldmljZSBTdXBwb3J0KipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IHJlaW52ZW50aW5nIHRoZSB3aGVlbC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdmlydHVhbCBkZXZpY2Ugb3IgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGBpY2VgIGNvbXBvbmVudCBhbHJlYWR5IGF2YWlsYWJsZS4gVGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZGV2ZWxvcG1lbnQgdGltZTsgYW5kIHNvLCBpZiB0aGVyZSdzIGEgcHJlLWJ1aWx0IHNvbHV0aW9uIHRoYXQgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgSSdsbCBsZXZlcmFnZSB0aGF0LiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzaW11bGF0ZXMgdGhlIGBpY2VgIGJlaGF2aW9yIGZvciB0ZXN0aW5nIG9yIGRldmVsb3BtZW50IHB1cnBvc2VzLiBFZmZpY2llbmN5IGlzIGtleSwgYW5kIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGJ1aWxkaW5nIHNvbWV0aGluZyBmcm9tIHNjcmF0Y2ggaWYgaXQncyBhbHJlYWR5IHJlYWRpbHkgYXZhaWxhYmxlIG9yLCBjb252ZXJzZWx5LCB0byBzcGVuZCB0aW1lIGxvb2tpbmcgZm9yIGEgc29sdXRpb24gdGhhdCBkb2VzIG5vdCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjE2LjEzNTg5NTE3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUyMjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0LippY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYz00ODg9dm9pZCBpY2VfZGV2bGlua19kZXN0cm95X3ZmX3BvcnQoc3RydWN0IGljZV92ZiAqdmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9wb3J0LmMtNDk3LSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvcG9ydC5jOjQ5ODogKiBSZWdpc3RlciB2aXJ0dWFsIGZsYXZvdXIgZGV2bGluayBwb3J0IGZvciB0aGUgc3ViZnVuY3Rpb24gYXV4aWxpYXJ5IGRldmljZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL3BvcnQuYy00OTktICogY3JlYXRlZCBhZnRlciBhY3RpdmF0aW5nIGEgZHluYW1pY2FsbHkgYWRkZWQgZGV2bGluayBwb3J0Llxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYz0yMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYzoyNDppY2VfaW5pdF92aXJ0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgYmFzZSwgdTMyIG51bV9lbnRyaWVzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmMtMjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYz00MD1zdGF0aWMgdm9pZCBpY2VfZGVpbml0X2lycV90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjQ1OnN0YXRpYyB2b2lkIGljZV9kZWluaXRfdmlydF9pcnFfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jLTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmM9MjE5PXZvaWQgaWNlX2ZyZWVfaXJxKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbXNpX21hcCBtYXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jLTI1MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5jOjI1MTppbnQgaWNlX3ZpcnRfZ2V0X2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBuZWVkZWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNzEtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYzoyNzI6dm9pZCBpY2VfdmlydF9mcmVlX2lycXMoc3RydWN0IGljZV9wZiAqcGYsIHUzMiBpbmRleCwgdTMyIGlycXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9pcnEuaD0zMj12b2lkIGljZV9mcmVlX2lycShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IG1zaV9tYXAgbWFwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oLTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaXJxLmg6MzQ6aW50IGljZV92aXJ0X2dldF9pcnFzKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgbmVlZGVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oOjM1OnZvaWQgaWNlX3ZpcnRfZnJlZV9pcnFzKHN0cnVjdCBpY2VfcGYgKnBmLCB1MzIgaW5kZXgsIHUzMiBpcnFzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2lycS5oLTM2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYz0xMDQ3PXZvaWQgaWNlX2Rpc192Zl9xcyhzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtMTA2Mi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jOjEwNjM6ZW51bSB2aXJ0Y2hubF9zdGF0dXNfY29kZSBpY2VfZXJyX3RvX3ZpcnRfZXJyKGludCBlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYy0xMDY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliX3ByaXZhdGUuaD0yOT1pbnQgaWNlX2NoZWNrX3ZmX2luaXQoc3RydWN0IGljZV92ZiAqdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliX3ByaXZhdGUuaDozMDplbnVtIHZpcnRjaG5sX3N0YXR1c19jb2RlIGljZV9lcnJfdG9fdmlydF9lcnIoaW50IGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWJfcHJpdmF0ZS5oLTMxLXN0cnVjdCBpY2VfcG9ydF9pbmZvICppY2VfdmZfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaWNlX3ZmICp2Zik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jPTU4PWljZV9zZXRfcGZlX2xpbmsoc3RydWN0IGljZV92ZiAqdmYsIHN0cnVjdCB2aXJ0Y2hubF9wZl9ldmVudCAqcGZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy02NC1cXHRcXHRwZmUtXFx1MDAzZWV2ZW50X2RhdGEubGlua19ldmVudF9hZHYubGlua19zcGVlZCA9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzo2NTpcXHRcXHRcXHRpY2VfY29udl9saW5rX3NwZWVkX3RvX3ZpcnRjaG5sKHRydWUsIGljZV9saW5rX3NwZWVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTY2LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTcwLVxcdFxcdFxcdChlbnVtIHZpcnRjaG5sX2xpbmtfc3BlZWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzo3MTpcXHRcXHRcXHRpY2VfY29udl9saW5rX3NwZWVkX3RvX3ZpcnRjaG5sKGZhbHNlLCBpY2VfbGlua19zcGVlZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy03Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jPTE3Mzc9aWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fZmlsdGVyX2xpc3Qoc3RydWN0IHZpcnRjaG5sX3ZsYW5fZmlsdGVyaW5nX2NhcHMgKnZmYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMTc4Mi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjE3ODM6ICogaWNlX3ZjX3RvX3ZsYW4gLSB0cmFuc2Zvcm0gZnJvbSBzdHJ1Y3QgdmlydGNobmxfdmxhbiB0byBzdHJ1Y3QgaWNlX3ZsYW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTE3ODQtICogQHZjX3ZsYW46IHN0cnVjdCB2aXJ0Y2hubF92bGFuIHRvIHRyYW5zZm9ybVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYz0yNDY3PXN0YXRpYyBpbnQgaWNlX3ZjX2dldF9waGNfdGltZShzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjQ5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI0OTg6c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfdmlydGNobmxfb3BzIGljZV92aXJ0Y2hubF9kZmx0X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI0OTktXFx0LmdldF92ZXJfbXNnID0gaWNlX3ZjX2dldF92ZXJfbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM6MjU0NTp2b2lkIGljZV92aXJ0Y2hubF9zZXRfZGZsdF9vcHMoc3RydWN0IGljZV92ZiAqdmYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI1NDc6XFx0dmYtXFx1MDAzZXZpcnRjaG5sX29wcyA9IFxcdTAwMjZpY2VfdmlydGNobmxfZGZsdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNTQ4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmM9MjYyNT1pY2VfdmNfcmVwcl9jZmdfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTggX19hbHdheXNfdW51c2VkICptc2cpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jLTI2MzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3ZpcnRjaG5sX29wcyBpY2VfdmlydGNobmxfcmVwcl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYy0yNjM2LVxcdC5nZXRfdmVyX21zZyA9IGljZV92Y19nZXRfdmVyX21zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY3OC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jOjI2Nzk6dm9pZCBpY2VfdmlydGNobmxfc2V0X3JlcHJfb3BzKHN0cnVjdCBpY2VfdmYgKnZmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY4MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYzoyNjgxOlxcdHZmLVxcdTAwM2V2aXJ0Y2hubF9vcHMgPSBcXHUwMDI2aWNlX3ZpcnRjaG5sX3JlcHJfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMtMjY4Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oPTQxPXN0cnVjdCBpY2VfdmlydGNobmxfb3BzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtODMtI2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuaDo4NDp2b2lkIGljZV92aXJ0Y2hubF9zZXRfZGZsdF9vcHMoc3RydWN0IGljZV92ZiAqdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg6ODU6dm9pZCBpY2VfdmlydGNobmxfc2V0X3JlcHJfb3BzKHN0cnVjdCBpY2VfdmYgKnZmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTg2LXZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg9OTk9Ym9vbCBpY2VfaXNfdmxhbl9wcm9taXNjX2FsbG93ZWQoc3RydWN0IGljZV92ZiAqdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmgtMTAwLSNlbHNlIC8qIENPTkZJR19QQ0lfSU9WICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuaDoxMDE6c3RhdGljIGlubGluZSB2b2lkIGljZV92aXJ0Y2hubF9zZXRfZGZsdF9vcHMoc3RydWN0IGljZV92ZiAqdmYpIHsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmg6MTAyOnN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfdmlydGNobmxfc2V0X3JlcHJfb3BzKHN0cnVjdCBpY2VfdmYgKnZmKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5oLTEwMy1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX3ZjX25vdGlmeV92Zl9saW5rX3N0YXRlKHN0cnVjdCBpY2VfdmYgKnZmKSB7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMjE6MzU6MTYuMjM0NDI5NTQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMjE2NTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEljZSBEcml2ZXIgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCB3aGljaCBpcyBzcGVjaWZpY2FsbHkgZm9yIEludGVsJ3MgRTgwMCBzZXJpZXMgaGFyZHdhcmUuIFRoZSBwcm9ibGVtIGlzLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlcmUncyBubyB2aXJ0dWFsIGNvdW50ZXJwYXJ0IGluIFFFTVUg4oCTIG5vIHZpcnR1YWwgZGV2aWNlIHRvIGhvb2sgaW50by4gSXTigJlzIG5vdCBsaWtlIHdlIGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG8gYG1hYzgwMjExX2h3c2ltYCBvciBgdmttc2AgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUuIFRoZSBjb2RlIGNoYW5nZXMgSSdtIHNlZWluZyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gZmlsdGVyaW5nLCB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMgYnV0IGFyZSBsaWtlbHkgdG8gYmUgaGFyZHdhcmUtZGVwZW5kZW50LlxuXG5HaXZlbiB0aGF0IHRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gYWN0dWFsIGhhcmR3YXJlIGFuZCBjYW4ndCBiZSByZWFkaWx5IGFjY2Vzc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEU4MDAgc2VyaWVzLCBmdXp6aW5nIGl0IGRpcmVjdGx5IGluIHN5emthbGxlciBzZWVtcyBsaWtlIGEgZGVhZCBlbmQuIFdhaXQgYSBtaW51dGUuLi4gU3l6a2FsbGVyIGRvZXNuJ3QgZXZlbiAqaGF2ZSogdGhhdCBzcGVjaWZpYyBJbnRlbCBFODAwIGhhcmR3YXJlIGluIGl0cyB0ZXN0YmVkcywgc28gaXTigJlzIGEgZGVmaW5pdGUgbm8tZ28uXG5cblN0aWxsLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIHRoZXJlICphbnl0aGluZyogcmVzZW1ibGluZyBhIG1vY2sgZHJpdmVyLCBvciBhIHdheSB0byB0cmlnZ2VyIGl0IHdpdGggc29tZSBraW5kIG9mIGR1bW15IG5ldGRldj8gVGhlIGBpY2VgIGRyaXZlciBkb2VzIHJlZ2lzdGVyIGEgbmV0ZGV2LCB3aGljaCBpcyBhIGtleSBwYXJ0LCBidXQgaXQncyBkZXBlbmRlbnQgb24gYSBzdWNjZXNzZnVsIFBDSSBkZXZpY2UgcHJvYmUuIEkgbmVlZCB0byBjb25maXJtLiBJIHNob3VsZCBsb29rIGludG8gYGljZV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDIxOjM1OjIyLjA0NjU5ODcxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY5NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpY2VfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTE3MT12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxODY6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMTYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTIxNzogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMTgtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MjIzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjI0OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIyNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MzA4LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTMwOTpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUzMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01OTA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTkxMC1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1OTExOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01OTEyLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToyMi4xMzgzMDQwMDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMyOTg2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBTdWl0YWJpbGl0eSBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIFBDSSBkcml2ZXJzLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gZGVhbGluZyB3aXRoIGFuIGBpY2VgIGRyaXZlciDigJMgaXQncyBnb2luZyB0byBiZSB1c2VsZXNzIHdpdGhvdXQgYSBQQ0kgZGV2aWNlIHByZXNlbnQuIFNwZWNpZmljYWxseSwgYGljZV9wcm9iZWAgd29uJ3QgZXhlY3V0ZSwgYW5kIHRoZSBuZXR3b3JrIGRldmljZSB3b24ndCBnZXQgcmVnaXN0ZXJlZC4gVGhhdCBkaXJlY3RseSB0ZWxscyBtZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBzZXR1cCwgcmlnaHQ/IEdDRSwgUUVNVSwgYW55IG9mIHRoZW0uIE5vIGRpY2UuXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJJ20gd29ya2luZyB3aXRoLCBJIG5lZWQgdG8gZmxhZyB0aGlzIGFzIHVuZnV6emFibGUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGd1aWRlbGluZXMuLi4gWXVwOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIi4gQmluZ28hIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIGNhdGVyaW5nIHNwZWNpZmljYWxseSB0byBJbnRlbCBFODAwIHNlcmllcyBuZXR3b3JrIGNhcmRzLCBhbmQgaXQgaXMgaW1wb3NzaWJsZSB0byBiZSB0ZXN0ZWQgd2l0aG91dCB0aGF0IGhhcmR3YXJlLiBJdCBpcyB0aGUgcGVyZmVjdCBzY2VuYXJpbyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgZ2V0IHRoaXMgZG9jdW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NiwiT3V0cHV0VG9rZW5zIjo5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQyMTozNToyNy4zNzEyOTQzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0byBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gVGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGluaXRpYWxpemUuIFRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgZGV2aWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrrvbm[1] Phase: Running StartedAt: 2026-07-01 21:37:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrvbm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 21:37:29 +0000 UTC FinishedAt: 2026-07-01 21:38: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,}