Name: series-workfloww5szj Phase: Failed StartedAt: 2026-09-02 16:35:30 +0000 UTC FinishedAt: 2026-09-02 16:38:11 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5szj[0] Phase: Succeeded StartedAt: 2026-09-02 16:35:30 +0000 UTC FinishedAt: 2026-09-02 16:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5szj[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 16:35:30 +0000 UTC FinishedAt: 2026-09-02 16:37:37 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhZGQgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgYW5kIHN0YXR1cyByZXBvcnRpbmcgc3VwcG9ydCB0byB0aGUgT3BlbkNvbXB1dGUgVGltZUNhcmQgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpIGZvciBBRFZBIHgxIFRBUCBjYXJkcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgaW4gZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGIyNWU0ZWYyODQzZGMzZWFmMjc4ZDZmNTlmZWM3NzA0YmY1MzJiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTY6MzY6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbmluZGV4IDNhZTQxYjc2MzRhYzkuLjQxZWVhZGQ0NjMzMDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5AQCAtMTEsNiAmIzQzOzExLDMwIEBAIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcbiBcdFx0cmVnaXN0ZXJlZC5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXG4mIzQzO0RhdGU6XHRcdEp1bHkgMjAyNlxuJiM0MztDb250YWN0Olx0U2FnaSBNYWltb24gXHUwMDNjbWFpbW9uLnNhZ2lAZ21haWwuY29tXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlx0KFJPLCByb290IG9ubHkpIFRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELCBpblxuJiM0MztcdFx0aHVtYW4tcmVhZGFibGUgZm9ybTpcbiYjNDM7XG4mIzQzO1x0XHQgIGRvbmU9XHUwMDNjMHwxXHUwMDNlIGJ1c3k9XHUwMDNjMHwxXHUwMDNlIGZhaWxlZD1cdTAwM2MwfDFcdTAwM2VcbiYjNDM7XG4mIzQzO1x0XHRPbmx5IHByZXNlbnQgb24gQURWQSB4MSBUQVAgYm9hcmRzIChQQ0kgSUQgMHhhZDVhOjB4MDQxMCkuXG4mIzQzO1xuJiM0MztcdFx0ZG9uZT0xIGluZGljYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmbGFzaCB3YXMgc3VjY2Vzc2Z1bGx5XG4mIzQzO1x0XHRwcm9ncmFtbWVkIGFuZCBpcyBhY3RpdmUuICBidXN5PTEgbWVhbnMgYW4gaW50ZXJuYWwgb3BlcmF0aW9uXG4mIzQzO1x0XHRpcyBpbiBwcm9ncmVzcy4gIGZhaWxlZD0xIG1lYW5zIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkLlxuJiM0MztcbiYjNDM7XHRcdEEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlXG4mIzQzO1x0XHRvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlXG4mIzQzO1x0XHRJRCBvZiB0aGUgQ1BMRCBpcyByZXBvcnRlZCBhcyB0aGUgZml4ZWQgXCYjMzQ7Y3BsZC5pZFwmIzM0OyB2ZXJzaW9uIGJ5XG4mIzQzO1x0XHRkZXZsaW5rIGRldiBpbmZvLlxuJiM0MztcbiYjNDM7XHRcdFRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWxcbiYjNDM7XHRcdGZpcm13YXJlLXVwbG9hZCBpbnRlcmZhY2UsIHJlZ2lzdGVyZWQgcGVyIGNhcmQgYXQ6XG4mIzQzO1x0XHQvc3lzL2NsYXNzL2Zpcm13YXJlL2FkdmEtY3BsZC5OL1xuJiM0MztcdFx0d2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXG4gRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjFcbiBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvS2NvbmZpZyBiL2RyaXZlcnMvcHRwL0tjb25maWdcbmluZGV4IGZlYjUwZjhjYzQwNmEuLjI0ZjA0N2MzN2U0YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9LY29uZmlnXG5AQCAtMjE5LDYgJiM0MzsyMTksOCBAQCBjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBDUkMxNlxuIFx0c2VsZWN0IERQTExcbiYjNDM7XHRzZWxlY3QgRldfTE9BREVSXG4mIzQzO1x0c2VsZWN0IEZXX1VQTE9BRFxuIFx0aGVscFxuIFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbmluZGV4IDNkMjZlYzFmN2I5ZWMuLjg2ZDFjMWEzMTFjYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuQEAgLTIwLDEwICYjNDM7MjAsMTQgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvYWx0ZXJhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICYjNDM7ODksNyBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8ge1xuIFx0dThcdFx0XHRcdHNpZ25hbHNfbnI7XG4gXHR1OFx0XHRcdFx0ZnJlcV9pbl9ucjtcbiBcdGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cFx0KmF0dHJfZ3JvdXBzO1xuJiM0MztcdGJvb2xcdFx0XHRcdGhhc19jcGxkOyAvKiB4MTogc3VwcG9ydHMgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgKi9cbiB9O1xuIFxuICNkZWZpbmUgT0NQX0NUUkxfRU5BQkxFXHRcdEJJVCgwKVxuQEAgLTE2Myw3ICYjNDM7MTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcbiBcdHUzMlx0Z3BpbzE7XG4gXHR1MzJcdF9fcGFkMDtcbiBcdHUzMlx0Z3BpbzI7XG4tXHR1MzJcdF9fcGFkMTtcbiYjNDM7XHQvKiBhZHZhX3gxOiBJMkMgYnVzIG93bmVyc2hpcCByZWdpc3RlcjsgcmVzZXJ2ZWQgb24gb3RoZXIgdmFyaWFudHMgKi9cbiYjNDM7XHR1MzJcdGkyY19idXNfY3RybDtcbiB9O1xuIFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xuQEAgLTQxNiw2ICYjNDM7NDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHtcbiBcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuIFx0aW50IHNpZ25hbHNfbnI7XG4gXHRpbnQgZnJlcV9pbl9ucjtcbiYjNDM7XHQvKiBhZHZhX3gxIENQTEQgSTJDIChpbnRlcm5hbCB1c2Ugb25seSkgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0Y3BsZF9sb2NrOyAgICAgICAgICAgIC8qIHNlcmlhbGlzZXMgQ1BMRCBvcGVyYXRpb25zICovXG4mIzQzO1x0aW50XHRcdFx0Y3BsZF9pMmNfYWRhcF9ucjsgICAgIC8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi9cbiYjNDM7XHRzdHJ1Y3QgaTJjX2FkYXB0ZXJcdCpjcGxkX2FkYXA7ICAgICAgICAgICAvKiBjbGFpbWVkIGFkYXB0ZXI7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuJiM0MztcdHU4XHRcdFx0KmNwbGRfYnVmOyAgICAgICAgICAgIC8qIERNQS1zYWZlIHNjcmF0Y2g7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuJiM0MztcdHUzMlx0XHRcdGNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovXG4mIzQzO1x0Ym9vbFx0XHRcdGhhc19jcGxkOyAgICAgICAgICAgICAvKiB4MSBUQVAgQ1BMRCBwcmVzZW50ICovXG4mIzQzO1x0c3RydWN0IGZ3X3VwbG9hZFx0KmNwbGRfZndfdXBsb2FkOyAgICAgIC8qIGZpcm13YXJlIHVwbG9hZCBoYW5kbGU7IE5VTEwgaWYgYWJzZW50ICovXG4mIzQzO1x0Ym9vbFx0XHRcdGNwbGRfY2FuY2VsOyAgICAgICAgICAvKiBjYW5jZWxsYXRpb24gcmVxdWVzdGVkICovXG4mIzQzO1x0Ym9vbFx0XHRcdGNwbGRfaW5fY29uZmlnX21vZGU7ICAvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gmIzM5O2QgKi9cbiB9O1xuIFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcdEJJVCgwKVxuQEAgLTQ0OSw4ICYjNDM7NDY1LDExIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hcnRfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuIFxuIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmd191cGxvYWRfb3BzIGFkdmFfY3BsZF91cGxvYWRfb3BzO1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2RldmljZV9pZChzdHJ1Y3QgcHRwX29jcCAqYnAsIHUzMiAqaWQpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG5AQCAtMTI3Myw2ICYjNDM7MTI5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XG4gXHRcdFx0LnNpZ25hbHNfbnIgICA9IDQsXG4gXHRcdFx0LmZyZXFfaW5fbnIgICA9IDQsXG4gXHRcdFx0LmF0dHJfZ3JvdXBzICA9IGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzLFxuJiM0MztcdFx0XHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcbiBcdFx0fSxcbiBcdH0sXG4gXHR7IH1cbkBAIC0yMTg1LDYgJiM0MzsyMjA1LDE5IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkKSB7XG4mIzQzO1x0XHR1MzIgaWQ7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9jcGxkX2RldmljZV9pZChicCwgXHUwMDI2aWQpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7MHglMDh4XCYjMzQ7LCBpZCk7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBcJiMzNDtjcGxkLmlkXCYjMzQ7LCBidWYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxOTksNiAmIzQzOzMyMzIsMzAgQEAgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0cHRwX29jcF9zbWFfaW5pdChicCk7XG4gXG4mIzQzO1x0YnAtXHUwMDNlaGFzX2NwbGQgPSBpbmZvLVx1MDAzZWhhc19jcGxkO1xuJiM0MztcdGlmIChicC1cdTAwM2VoYXNfY3BsZCkge1xuJiM0MztcdFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBPbmUgaW5zdGFuY2UgcGVyIGNhcmQsIG51bWJlcmVkIGxpa2UgdGhlIG9jcE4gZGV2aWNlLlxuJiM0MztcdFx0ICogZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKCkga2VlcHMgdGhlIHBvaW50ZXIgcmF0aGVyIHRoYW5cbiYjNDM7XHRcdCAqIGNvcHlpbmcgdGhlIHN0cmluZywgc28gaXQgaGFzIHRvIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bmFtZSA9IGRldm1fa2FzcHJpbnRmKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBHRlBfS0VSTkVMLFxuJiM0MztcdFx0XHRcdCAgICAgIFwmIzM0O2FkdmEtY3BsZC4lZFwmIzM0OywgYnAtXHUwMDNlaWQpO1xuJiM0MztcdFx0aWYgKCFuYW1lKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRmd2wgPSBmaXJtd2FyZV91cGxvYWRfcmVnaXN0ZXIoVEhJU19NT0RVTEUsIFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5hbWUsIFx1MDAyNmFkdmFfY3BsZF91cGxvYWRfb3BzLCBicCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZ3bCkpXG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtDUExEIGZpcm13YXJlIHVwbG9hZCB1bmF2YWlsYWJsZTogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBmd2wpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCA9IGZ3bDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHB0cF9vY3BfaW5pdF9jbG9jayhicCwgXHUwMDI2aW5mby1cdTAwM2VzZXJ2byk7XG4gfVxuIFxuQEAgLTQyMjYsNiAmIzQzOzQyODMsNjA3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0ge1xuIFx0eyB9LFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEludGVybmFsIGhlbHBlcnMgZm9yIHRoZSBhZHZhX3gxIFRBUCBDUExEIChMYXR0aWNlIExDTVhPM0xGLTIxMDApLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cbiYjNDM7ICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBvbmUgaXMgd2lyZWQgdG86XG4mIzQzOyAqXG4mIzQzOyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVx1MDAzZSBUTUMgb3IgTS4yLCBNQiYjMzk7cyBjaG9pY2VcbiYjNDM7ICogICBncmFudCAxOiAgMHgxNTAwMDAgLVx1MDAzZSBUTUMgYnVzICAgICAweDEyMDAwMCAtXHUwMDNlIE0uMlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIHNpdCBvblxuJiM0MzsgKiB0aGUgVE1DIGJ1cywgc28gdGhleSBhcmUgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBGb3JcbiYjNDM7ICogdGhhdCBzYW1lIHdpbmRvdyB0aGUgRUVQUk9NcyBhcmUgbm90IGJlaGluZCB0aGUgYWRhcHRlciBhdCBhbGwsIHNvIGFcbiYjNDM7ICogQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrIGFuZCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBhY3Jvc3MgaXQgdG9cbiYjNDM7ICoga2VlcCB0aGUgRUVQUk9NIGFuZCBudm1lbSBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIuXG4mIzQzOyAqXG4mIzQzOyAqIE5vIHJhdyBJMkMgYWNjZXNzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvbmx5IHRoZSBhdHRyaWJ1dGVzIGJlbG93LlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NFxuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcbiYjNDM7I2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXG4mIzQzO1xuJiM0MzsvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxuJiM0MzsjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXG4mIzQzOyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFVcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxuJiM0MztcbiYjNDM7LyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX1NUQVRVUyAgMHgzQzAwMDAwMFVMXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfRU5fQ0ZHX1RQICAgIDB4NzQgICAvKiBlbmFibGUgY29uZmlnLCB0cmFuc3BhcmVudCBtb2RlICovXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9FUkFTRSAgICAgICAgMHgwRVxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFU0VUX0FERFIgICAweDQ2XG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9TRVRfRE9ORSAgICAgMHg1RVxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFRlJFU0ggICAgICAweDc5XG4mIzQzOyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XG4mIzQzOyNkZWZpbmUgQ1BMRF9QT0xMX1VTICAgICAgICAgIDEwMDAwICAvKiBzdGF0dXMgcG9sbCBpbnRlcnZhbCB3aGlsZSBidXN5ICovXG4mIzQzO1xuJiM0MzsvKiBTdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAoTGF0dGljZSBMQ01YTzNMRiBkYXRhc2hlZXQpICovXG4mIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KVxuJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0JVU1kgICBCSVQoMTIpXG4mIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRkFJTEVEIEJJVCgxMylcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGFkdmFfeDFfaTJjX3hmZXIoKSAtIGlzc3VlIGEgc2luZ2xlIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1cy5cbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIEBjbWQgd2hlbiBpdCBpcyBub3QgbmVnYXRpdmUsIGZvbGxvd2VkIGJ5IEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSxcbiYjNDM7ICogdGhlbiByZWFkcyBAcmxlbiBieXRlcyBpZiBhc2tlZC4gIEEgTlVMTCBAd2RhdGEgc2VuZHMgemVyb3MuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtZXNzYWdlIGlzIGFzc2VtYmxlZCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgdGFrZW4gYnlcbiYjNDM7ICogYWR2YV94MV9idXNfY2xhaW0oKSwgd2hpY2ggdGhlIFhpbGlueCBjb250cm9sbGVyIG5lZWRzIGZvciBETUEgc2FmZXR5OlxuJiM0MzsgKiBhbiBvcGNvZGUgYW5kIGl0cyBhcmd1bWVudHMgYXJlIGNvcGllZCBleGFjdGx5IG9uY2UsIGFuZCBhIGZpcm13YXJlXG4mIzQzOyAqIHVwbG9hZCBjb3N0cyBvbmUgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBvbmUgcGVyIHBhZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgdGhhdCBjbGFpbSwgaGVuY2UgX19pMmNfdHJhbnNmZXIoKSBvdmVyIGkyY190cmFuc2ZlcigpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLFxuJiM0MztcdFx0XHQgICAgdm9pZCAqcmRhdGEsIHU4IHJsZW4pXG4mIzQzO3tcbiYjNDM7XHR1OCAqd2J1ZiwgKnJidWY7XG4mIzQzO1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuJiM0MztcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4mIzQzO1x0aW50IG5tc2dzID0gMCwgcmV0O1xuJiM0MztcdHUxNiBoZHIgPSBjbWQgXHUwMDNlPSAwO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4mIzQzO1x0aWYgKCFhZGFwIHx8ICFicC1cdTAwM2VjcGxkX2J1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyICYjNDM7IHdsZW4gXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWCB8fCBybGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0d2J1ZiA9IGJwLVx1MDAzZWNwbGRfYnVmO1xuJiM0MztcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiAmIzQzOyBBRFZBX0NQTERfWEZFUl9NQVg7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIgJiM0Mzsgd2xlbikge1xuJiM0MztcdFx0aWYgKGhkcilcbiYjNDM7XHRcdFx0d2J1ZlswXSA9IGNtZDtcbiYjNDM7XHRcdGlmICh3ZGF0YSlcbiYjNDM7XHRcdFx0bWVtY3B5KHdidWYgJiM0MzsgaGRyLCB3ZGF0YSwgd2xlbik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1lbXNldCh3YnVmICYjNDM7IGhkciwgMCwgd2xlbik7XG4mIzQzO1x0XHRtc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpe1xuJiM0MztcdFx0XHQuYWRkciAgPSBhZGRyLFxuJiM0MztcdFx0XHQuZmxhZ3MgPSBJMkNfTV9ETUFfU0FGRSxcbiYjNDM7XHRcdFx0LmxlbiAgID0gaGRyICYjNDM7IHdsZW4sXG4mIzQzO1x0XHRcdC5idWYgICA9IHdidWYsXG4mIzQzO1x0XHR9O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocmxlbikge1xuJiM0MztcdFx0bXNnc1tubXNncyYjNDM7JiM0MztdID0gKHN0cnVjdCBpMmNfbXNnKXtcbiYjNDM7XHRcdFx0LmFkZHIgID0gYWRkcixcbiYjNDM7XHRcdFx0LmZsYWdzID0gSTJDX01fUkQgfCBJMkNfTV9ETUFfU0FGRSxcbiYjNDM7XHRcdFx0LmxlbiAgID0gcmxlbixcbiYjNDM7XHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbiYjNDM7XHRcdH07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4mIzQzO1x0aWYgKHJldCAhPSBubXNncylcbiYjNDM7XHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4mIzQzO1xuJiM0MztcdGlmIChyZGF0YSBcdTAwMjZcdTAwMjYgcmxlbilcbiYjNDM7XHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdGlmIChicC1cdTAwM2VwcHNfc2VsZWN0KVxuJiM0MztcdFx0aW93cml0ZTMyKE1CTEFaRV9SRUxFQVNFLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFjcXVpcmUgdGhlIHNoYXJlZCBJMkMgYnVzIGZyb20gdGhlIE1pY3JvQmxhemUgZmlybXdhcmUuICBSZXR1cm5zIHdpdGggbm9cbiYjNDM7ICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhXG4mIzQzOyAqIHNlZ21lbnQgdG8gYSBob3N0IHRoYXQgaGFzIGdpdmVuIHVwIHdhaXRpbmcgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBEcm9wIGEgcmVxdWVzdCBsZWZ0IGJ5IGEgY2FsbGVyIHRoYXQgZGllZCBtaWQtc2VxdWVuY2U7IGNwbGRfbG9ja1xuJiM0MztcdCAqIGtlZXBzIGxpdmUgb25lcyBvdXQuICBUaGUgcmVhZCBiYWNrIG9ubHkgZmx1c2hlcyB0aGUgcG9zdGVkIHdyaXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlvd3JpdGUzMigwLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0aW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuJiM0MztcbiYjNDM7XHRpb3dyaXRlMzIoTUJMQVpFX1JFUVVFU1QsIFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQkxBWkVfUkVUUklFUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZShNQkxBWkVfUkVUUllfVVMsIE1CTEFaRV9SRVRSWV9VUyAmIzQzOyAxMDAwKTtcbiYjNDM7XHRcdHZhbCA9IGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XHRcdGlmICh2YWwgPT0gTUJMQVpFX0dSQU5URUQpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJvdXRlIHRoZSBob3N0IGNvbnRyb2xsZXIgYmFjayB0byB0aGUgRUVQUk9NcyBhbmQgcmVsZWFzZSB0aGUgYWRhcHRlci5cbiYjNDM7ICogU2FmZSBhZnRlciBhIGZhaWxlZCBjbGFpbTogaXQgYWxzbyBjbGVhcnMgYSByZXF1ZXN0IHRoYXQgd2FzIG5ldmVyIGdyYW50ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX2J1c19yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLVx1MDAzZWNwbGRfYWRhcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2FkYXAgPSBOVUxMO1xuJiM0MztcdGtmcmVlKGJwLVx1MDAzZWNwbGRfYnVmKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2J1ZiA9IE5VTEw7XG4mIzQzO1x0aTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbiYjNDM7XHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENsYWltIHRoZSBUTUMgYnVzIGZvciBhIENQTEQgb3BlcmF0aW9uLiAgSG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIG92ZXJcbiYjNDM7ICogdGhlIGhhbmRzaGFrZSBrZWVwcyBwdHBfb2NwX3JlYWRfZWVwcm9tKCksIHRoZSBudm1lbSBhdHRyaWJ1dGVzIGFuZCB0aGVcbiYjNDM7ICogYXQyNCBzeXNmcyBmaWxlcyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkIGF3YXkgZnJvbSB0aGVcbiYjNDM7ICogRUVQUk9Ncy4gIEEgZmlybXdhcmUgdXBsb2FkIGhvbGRzIGl0IGFjcm9zcyB0aGUgd2hvbGUgcHJlcGFyZS93cml0ZS9wb2xsXG4mIzQzOyAqIHNlcXVlbmNlLCBzbyBhbiBFRVBST00gcmVhZCBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcbiYjNDM7XHRpZiAoIWFkYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0LyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGEgZmlybXdhcmVcbiYjNDM7XHQgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGVcbiYjNDM7XHQgKiBhbGxvY2F0aW9uIGluc3RlYWQgb2Ygb25lIGZvciBlYWNoIDE2LWJ5dGUgcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicC1cdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VjcGxkX2J1Zikge1xuJiM0MztcdFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2FkYXAgPSBhZGFwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCBcdTAwM2MgMCAtIHRoZSBwb3dlci1vbiBzdGF0ZS5cbiYjNDM7ICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZVxuJiM0MzsgKiBFRVBST00gcGF0aHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaClcbiYjNDM7e1xuJiM0MztcdHU4IHZhbCA9IChjaCBcdTAwM2U9IDApID8gQklUKGNoKSA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX01VWF9BRERSLCB2YWwsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBcmd1bWVudCBieXRlcyB0aGF0IGZvbGxvdyBhbiBJU0Mgb3Bjb2RlLiAgUmV0dXJucyBOVUxMIHdpdGggQG5hcmdzIHNldFxuJiM0MzsgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdTggKmFkdmFfeDFfY3BsZF9hcmdzKHU4IGNtZCwgdTggKm5hcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVyYXNlX2NmZ1tdID0geyAweDA0LCAweDAwLCAweDAwIH07IC8qIGNmZyBzZWN0b3Igb25seSAqL1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNtZCkge1xuJiM0MztcdGNhc2UgQ1BMRF9DTURfRU5fQ0ZHX1RQOlxuJiM0MztcdFx0Km5hcmdzID0gc2l6ZW9mKGVuX2NmZ190cCk7XG4mIzQzO1x0XHRyZXR1cm4gZW5fY2ZnX3RwO1xuJiM0MztcdGNhc2UgQ1BMRF9DTURfRVJBU0U6XG4mIzQzO1x0XHQqbmFyZ3MgPSBzaXplb2YoZXJhc2VfY2ZnKTtcbiYjNDM7XHRcdHJldHVybiBlcmFzZV9jZmc7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9SRVNFVF9BRERSOlxuJiM0MztcdGNhc2UgQ1BMRF9DTURfU0VUX0RPTkU6XG4mIzQzO1x0XHQqbmFyZ3MgPSAzO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9ESVNfQ0ZHOlxuJiM0MztcdGNhc2UgQ1BMRF9DTURfUkVGUkVTSDpcbiYjNDM7XHRcdCpuYXJncyA9IDI7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0Km5hcmdzID0gMDtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dyaXRlKHN0cnVjdCBwdHBfb2NwICpicCwgdTggY21kKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTggKmFyZ3M7XG4mIzQzO1x0dTggbmFyZ3M7XG4mIzQzO1xuJiM0MztcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFx1MDAyNm5hcmdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBjbWQsIGFyZ3MsIG5hcmdzLCBOVUxMLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2VuZCBhIDQtYnl0ZSBjb21tYW5kIHRoZW4gcmVhZCBkYXRhIGJhY2sgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgU1RPUFxuJiM0MzsgKiAoTGF0dGljZSBjb21iaW5lZCB3cml0ZS1cdTAwM2VyZXBlYXRlZC1TVEFSVC1cdTAwM2VyZWFkKS4gIFR3byBtZXNzYWdlcyBpbiBvbmVcbiYjNDM7ICogdHJhbnNmZXIgaXMgZXhhY3RseSB0aGF0LCBzbyBubyBwcm90b2NvbC1tYW5nbGluZyBmbGFnIGlzIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCxcbiYjNDM7XHRcdFx0XHQgdTMyIGNtZF9iZSwgdTggKm91dCwgdTggb3V0X2xlbilcbiYjNDM7e1xuJiM0MztcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIC0xLCBcdTAwMjZjbWQsIDQsIG91dCwgb3V0X2xlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHR1OCBidWZbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX1NUQVRVUywgYnVmLCA0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgQ1BMRCBnb2VzIGlkbGUsIG9yIEBtYXhfbXMgZWxhcHNlcy5cbiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCxcbiYjNDM7ICogYW5kIHRoZSBzdGF0dXMgaXMgcmVhZCBvbmNlIG1vcmUgYWZ0ZXIgaXQgZXhwaXJlcyBiZWZvcmUgZ2l2aW5nIHVwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHRpbnQgZXJyLCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cywgZXJyLFxuJiM0MztcdFx0XHRcdGVyciB8fCBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpIHx8XG4mIzQzO1x0XHRcdFx0KHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxuJiM0MztcdFx0XHRcdCEoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbiYjNDM7XHRcdFx0XHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuJiM0MztcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpKVxuJiM0MztcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4mIzQzO1x0aWYgKGVyciB8fCAoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIHN0ZXAgYWJvcnRlZCBieSBjYW5jZWwoKSBtdXN0IGJlIHJlcG9ydGVkIGFzIHN1Y2gsIG5vdCBhcyBhIEhXIGVycm9yLiAqL1xuJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyIGFkdmFfY3BsZF9lcnIoc3RydWN0IHB0cF9vY3AgKmJwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkgPyBGV19VUExPQURfRVJSX0NBTkNFTEVEXG4mIzQzO1x0XHRcdFx0XHQgIDogRldfVVBMT0FEX0VSUl9IV19FUlJPUjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgb2YgdGhlIFRBUCBDUExELiAgSXQgaXMgYSBmaXhlZCBwcm9wZXJ0eSBvZlxuJiM0MzsgKiB0aGUgcGFydCwgc28gY2FjaGUgaXQgYW5kIHBheSB0aGUgYnVzIGFyYml0cmF0aW9uIG9ubHkgb25jZS4gIFRoZVxuJiM0MzsgKiBMQ01YTzNMRi0yMTAwIElEQ09ERSBpcyAweGUxMmJjMDQzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICppZClcbiYjNDM7e1xuJiM0MztcdHU4IGRhdGFbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNwbGRfaWQpIHtcbiYjNDM7XHRcdCppZCA9IGJwLVx1MDAzZWNwbGRfaWQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEEgQ1BMRCBvcGVyYXRpb24gY2FuIGhvbGQgY3BsZF9sb2NrIGEgbG9uZyB0aW1lOyBzdGF5IGtpbGxhYmxlLiAqL1xuJiM0MztcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVsZWFzZTtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0YnAtXHUwMDNlY3BsZF9pZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcbiYjNDM7XHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcbiYjNDM7cmVsZWFzZTpcbiYjNDM7XHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbiYjNDM7b3V0OlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0KmlkID0gYnAtXHUwMDNlY3BsZF9pZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiBcJiMzNDtkb25lPVx1MDAzYzB8MVx1MDAzZSBidXN5PVx1MDAzYzB8MVx1MDAzZSBmYWlsZWQ9XHUwMDNjMHwxXHUwMDNlXFxuXCYjMzQ7XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0MztjcGxkX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHQgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4mIzQzO1x0dTMyIHN0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbiYjNDM7XHRyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4mIzQzO1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4mIzQzO3JlbGVhc2U6XG4mIzQzO1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0ID8gcmV0IDogc3lzZnNfZW1pdChidWYsIFwmIzM0O2RvbmU9JXUgYnVzeT0ldSBmYWlsZWQ9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgISEoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpLFxuJiM0MztcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbiYjNDM7XHRcdFx0XHQgICAgICAhIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSk7XG4mIzQzO31cbiYjNDM7c3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUga2VybmVsIGZpcm13YXJlLXVwbG9hZCBzdWJzeXN0ZW0gKENPTkZJR19GV19VUExPQUQpIGV4cG9zZXM6XG4mIzQzOyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59XG4mIzQzOyAqIHdoZXJlIE4gaXMgdGhlIGluZGV4IG9mIHRoZSBvd25pbmcgb2NwTiBkZXZpY2UuXG4mIzQzOyAqIFVzZXJzcGFjZSB3cml0ZXMgdGhlIHJhdyBiaW5hcnkgcGFnZSBkYXRhIGRpcmVjdGx5IOKAlCBubyAvbGliL2Zpcm13YXJlL1xuJiM0MzsgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsYmFjayBzZXF1ZW5jZSBkcml2ZW4gYnkgdGhlIGZyYW1ld29yazpcbiYjNDM7ICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaFxuJiM0MzsgKiAgIHdyaXRlKCkgICAgICAgIC0gcHJvZ3JhbSBvbmUgMTYtYnl0ZSBwYWdlIHBlciBjYWxsXG4mIzQzOyAqICAgcG9sbF9jb21wbGV0ZSgpLSBzZXQgRE9ORSwgUkVGUkVTSCwgd2FpdCBmb3IgQ1BMRCB0byByZWJvb3RcbiYjNDM7ICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrXG4mIzQzOyAqICAgY2xlYW51cCgpICAgICAgLSByZWxlYXNlIGJ1cyByZXNvdXJjZXMgKGNhbGxlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXG4mIzQzO2FkdmFfY3BsZF9wcmVwYXJlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsIHUzMiBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBmd191cGxvYWRfZXJyIHJldCA9IEZXX1VQTE9BRF9FUlJfTk9ORTtcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXHUwMDNlZGRfaGFuZGxlO1xuJiM0MztcbiYjNDM7XHQvKiBEbyBub3QgY2xlYXIgY3BsZF9jYW5jZWwgaGVyZTogZndfdXBsb2FkX3N0YXJ0KCkgcXVldWVzIHRoZSB3b3JrXG4mIzQzO1x0ICogYmVmb3JlIHRoaXMgcnVucywgc28gYSBjYW5jZWwgbWF5IGFscmVhZHkgaGF2ZSBhcnJpdmVkLiAgSXQgaXNcbiYjNDM7XHQgKiBjbGVhcmVkIG9uY2UgdGhlIHVwbG9hZCBpcyBvdmVyLCBvbiBldmVyeSBleGl0IGJlbG93IGFuZCBpblxuJiM0MztcdCAqIGNsZWFudXAoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNpemUgfHwgc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4mIzQzO1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9JTlZBTElEX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfYnVzX2NsYWltKGJwKSkge1xuJiM0MztcdFx0cmV0ID0gRldfVVBMT0FEX0VSUl9USU1FT1VUO1xuJiM0MztcdFx0Z290byBlcnJfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCkpIHtcbiYjNDM7XHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4mIzQzO1x0XHRnb3RvIGVycl9yZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBpc3N1aW5nIEVOX0NGR19UUCwgbm90IGFmdGVyIGl0IGNvbXBsZXRlczogdGhlIENQTEQgbWF5XG4mIzQzO1x0ICogaGF2ZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gbW9kZSBldmVuIGlmIHRoZSB3cml0ZSByZXBvcnRzIGFuIGVycm9yXG4mIzQzO1x0ICogb3IgdGhlIHdhaXQgYmVsb3cgdGltZXMgb3V0LCBhbmQgZXJyX2Rlc2VsZWN0IG9ubHkgc2VuZHMgRElTX0NGR1xuJiM0MztcdCAqIHdoZW4gdGhpcyBpcyBzZXQuICBBIERJU19DRkcgdG8gYSBkZXZpY2UgdGhhdCBuZXZlciBlbnRlcmVkIHRoZVxuJiM0MztcdCAqIG1vZGUgaXMgaGFybWxlc3M7IGxlYXZpbmcgaXQgZW5hYmxlZCBpcyBub3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCkgfHxcbiYjNDM7XHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApKSB7XG4mIzQzO1x0XHRyZXQgPSBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkpIHtcbiYjNDM7XHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4mIzQzO1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VSQVNFKSB8fFxuJiM0MztcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTUwMDApKSB7XG4mIzQzO1x0XHRyZXQgPSBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkpIHtcbiYjNDM7XHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4mIzQzO1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpKSB7XG4mIzQzO1x0XHRyZXQgPSBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xuJiM0MztcdFx0Z290byBlcnJfZGVzZWxlY3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBjbGVhbnVwKCkgdW5sb2NrcyBldmVyeXRoaW5nLiAgZndfdXBsb2FkX21haW4oKSBvbmx5IHBhaXJzIGl0IHdpdGhcbiYjNDM7XHQgKiBhIHByZXBhcmUoKSB0aGF0IHN1Y2NlZWRlZCwgc28gdGhlIGVycm9yIHBhdGhzIGJlbG93IHVubG9jayBoZXJlXG4mIzQzO1x0ICogaW5zdGVhZDsgaGFuZCB0aGUgY29udGV4dCB0byBjbGVhbnVwKCkgZm9yIHNwYXJzZSYjMzk7cyBiZW5lZml0LlxuJiM0MztcdCAqL1xuJiM0MztcdF9fcmVsZWFzZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XG4mIzQzO1xuJiM0MztlcnJfZGVzZWxlY3Q6XG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUpIHtcbiYjNDM7XHRcdGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4mIzQzO1x0XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuJiM0MztlcnJfcmVsZWFzZTpcbiYjNDM7XHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbiYjNDM7ZXJyX3VubG9jazpcbiYjNDM7XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGVudW0gZndfdXBsb2FkX2VyclxuJiM0MzthZHZhX2NwbGRfd3JpdGUoc3RydWN0IGZ3X3VwbG9hZCAqZndsLCBjb25zdCB1OCAqZGF0YSxcbiYjNDM7XHRcdHUzMiBvZmZzZXQsIHUzMiBzaXplLCB1MzIgKndyaXR0ZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXHUwMDNlZGRfaGFuZGxlO1xuJiM0MztcdHU4IGFyZ3NbMyAmIzQzOyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSlcbiYjNDM7XHRcdHJldHVybiBGV19VUExPQURfRVJSX0NBTkNFTEVEO1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2MgQ1BMRF9QQUdFX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9JTlZBTElEX1NJWkU7XG4mIzQzO1xuJiM0MztcdG1lbWNweShcdTAwMjZhcmdzWzNdLCBkYXRhICYjNDM7IG9mZnNldCwgQ1BMRF9QQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRpZiAoYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXG4mIzQzO1x0XHRcdCAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKSB8fFxuJiM0MztcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTAwKSlcbiYjNDM7XHRcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XG4mIzQzO1x0KndyaXR0ZW4gPSBDUExEX1BBR0VfU0laRTtcbiYjNDM7XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXG4mIzQzO2FkdmFfY3BsZF9wb2xsX2NvbXBsZXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3bClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHR1MzIgc3Q7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkpXG4mIzQzO1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfU0VUX0RPTkUpIHx8XG4mIzQzO1x0ICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKSlcbiYjNDM7XHRcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXHUwMDI2c3QpIHx8ICEoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpKVxuJiM0MztcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFRlJFU0gpKVxuJiM0MztcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4mIzQzO1xuJiM0MztcdC8qIFJFRlJFU0ggcmVib290cyB0aGUgQ1BMRCBvdXQgb2YgY29uZmlndXJhdGlvbiBtb2RlLCBzbyBjbGVhbnVwKClcbiYjNDM7XHQgKiBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBuZXcgaW1hZ2UgaXMgYWxyZWFkeSBydW5uaW5nIGF0IHRoaXMgcG9pbnQsIHNvIGEgc2VnbWVudCB0aGF0XG4mIzQzO1x0ICogaXMgbm90IGJhY2sgeWV0IG11c3Qgbm90IGJlIHJlcG9ydGVkIGFzIGEgZmFpbGVkIHVwZGF0ZTogcmV0cnkgdGhlXG4mIzQzO1x0ICogcmVzZWxlY3QgaW5zdGVhZCBvZiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2xlZXAoMTUwMCk7XG4mIzQzO1x0aWYgKHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXG4mIzQzO1x0XHRcdCAgICAgIDMwMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcbiYjNDM7XHRcdFx0ICAgICAgYnAsIEFEVkFfTVVYX0NIQU5ORUwpKVxuJiM0MztcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfVElNRU9VVDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAzMDAwKSlcbiYjNDM7XHRcdHJldHVybiBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRFxuJiM0MztcdFx0XHRcdFx0XHQgIDogRldfVVBMT0FEX0VSUl9USU1FT1VUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZHZhX2NwbGRfY2FuY2VsKHN0cnVjdCBmd191cGxvYWQgKmZ3bClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZHZhX2NwbGRfY2xlYW51cChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXHUwMDNlZGRfaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRfX2FjcXVpcmUoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcdC8qIGhlbGQgc2luY2UgcHJlcGFyZSgpIHJldHVybmVkIG9rICovXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoYnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSkge1xuJiM0MztcdFx0YWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9ESVNfQ0ZHKTtcbiYjNDM7XHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4mIzQzO1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCwgZmFsc2UpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X3VwbG9hZF9vcHMgYWR2YV9jcGxkX3VwbG9hZF9vcHMgPSB7XG4mIzQzO1x0LnByZXBhcmVcdCA9IGFkdmFfY3BsZF9wcmVwYXJlLFxuJiM0MztcdC53cml0ZVx0XHQgPSBhZHZhX2NwbGRfd3JpdGUsXG4mIzQzO1x0LnBvbGxfY29tcGxldGVcdCA9IGFkdmFfY3BsZF9wb2xsX2NvbXBsZXRlLFxuJiM0MztcdC5jYW5jZWxcdFx0ID0gYWR2YV9jcGxkX2NhbmNlbCxcbiYjNDM7XHQuY2xlYW51cFx0ID0gYWR2YV9jcGxkX2NsZWFudXAsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiAmIzQzOzQ5MzIsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0ge1xuIFx0XHUwMDI2ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsXG4mIzQzO1x0XHUwMDI2ZGV2X2F0dHJfY3BsZF9zdGF0dXMuYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC00ODY3LDYgJiM0Mzs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiB7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHQvKiBNdXN0IGNvbWUgZmlyc3Q6IGNhbmNlbHMgYW5kIGZsdXNoZXMgYW4gaW4tZmxpZ2h0IHVwbG9hZCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBJMkMgY29udHJvbGxlciBpcyBzdGlsbCB1cCwgYW5kIGRyb3BzIGNwbGRfbG9jayBzbyBhIGNwbGRfc3RhdHVzXG4mIzQzO1x0ICogcmVhZGVyIGNhbm5vdCBzdGFsbCBwdHBfb2NwX2F0dHJfZ3JvdXBfZGVsKCkgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNwbGRfZndfdXBsb2FkKSB7XG4mIzQzO1x0XHRmaXJtd2FyZV91cGxvYWRfdW5yZWdpc3RlcihicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCk7XG4mIzQzO1x0XHRicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHB0cF9vY3BfZGVidWdmc19yZW1vdmVfZGV2aWNlKGJwKTtcbiBcdHB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTtcbiBcdHB0cF9vY3BfYXR0cl9ncm91cF9kZWwoYnApO1xuQEAgLTQ5MDQsNiAmIzQzOzU1NzIsNyBAQCBwdHBfb2NwX2RldGFjaChzdHJ1Y3QgcHRwX29jcCAqYnApXG4gXHRcdGNsa19od191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUoYnAtXHUwMDNlaTJjX2Nsayk7XG4gXHRpZiAoYnAtXHUwMDNlbl9pcnFzKVxuIFx0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhicC1cdTAwM2VwZGV2KTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4gXHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZicC1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC01MDgwLDYgJiM0Mzs1NzQ5LDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4mIzQzO1x0LyogTXVzdCBiZSBiZWZvcmUgdGhlIGZpcnN0IGVycm9yIHBhdGggdGhhdCBjYWxscyBwdHBfb2NwX2RldGFjaCgpLFxuJiM0MztcdCAqIHNvIG11dGV4X2Rlc3Ryb3koKSBhbHdheXMgcnVucyBvbiBhbiBpbml0aWFsaXNlZCBtdXRleC5cbiYjNDM7XHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXG4mIzQzO1x0ICogbm90aWZpZXIgKHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwpIGZpcmVzIHdoZW4gdGhlIGFkYXB0ZXJcbiYjNDM7XHQgKiByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgYWRhcHRlciBudW1iZXIgaW4gY3BsZF9pMmNfYWRhcF9ucjsgdGhlXG4mIzQzO1x0ICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyXG4mIzQzO1x0ICogZmlyaW5nIGR1cmluZyByZWdpc3RyYXRpb24gaXMgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgdGhpcyBpbml0LlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yID0gLTE7XG4mIzQzO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MjE5LDExICYjNDM7NTg5OSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbiYjNDM7XHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBDYWNoZSBhZGFwdGVyIG5yOyB1c2VkIGJ5IHRoZSBDUExEIHN0YXR1cy9pZC91cGxvYWQgcGF0aHNcbiYjNDM7XHRcdCAqIGZvciByZWZlcmVuY2UtY291bnRlZCB1bmJpbmQtc2FmZSBhZGFwdGVyIGFjY2Vzcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLVx1MDAzZW5yKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCAtMSk7IC8qIGludmFsaWRhdGUgYmVmb3JlIGZyZWUgKi9cbiBcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRiMjVlNGVmMjg0M2RjM2VhZjI3OGQ2ZjU5ZmVjNzcwNGJmNTMyYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDE2OjM2OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQKaW5kZXggM2FlNDFiNzYzNGFjOS4uNDFlZWFkZDQ2MzMwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCkBAIC0xMSw2ICYjNDM7MTEsMzAgQEAgQ29udGFjdDoJSm9uYXRoYW4gTGVtb24gJmx0O2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbSZndDsKIERlc2NyaXB0aW9uOglUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkCiAJCXJlZ2lzdGVyZWQuCiAKJiM0MztXaGF0OgkJL3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzCiYjNDM7RGF0ZToJCUp1bHkgMjAyNgomIzQzO0NvbnRhY3Q6CVNhZ2kgTWFpbW9uICZsdDttYWltb24uc2FnaUBnbWFpbC5jb20mZ3Q7CiYjNDM7RGVzY3JpcHRpb246CShSTywgcm9vdCBvbmx5KSBUaGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZSBUQVAgQ1BMRCwgaW4KJiM0MzsJCWh1bWFuLXJlYWRhYmxlIGZvcm06CiYjNDM7CiYjNDM7CQkgIGRvbmU9Jmx0OzB8MSZndDsgYnVzeT0mbHQ7MHwxJmd0OyBmYWlsZWQ9Jmx0OzB8MSZndDsKJiM0MzsKJiM0MzsJCU9ubHkgcHJlc2VudCBvbiBBRFZBIHgxIFRBUCBib2FyZHMgKFBDSSBJRCAweGFkNWE6MHgwNDEwKS4KJiM0MzsKJiM0MzsJCWRvbmU9MSBpbmRpY2F0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggd2FzIHN1Y2Nlc3NmdWxseQomIzQzOwkJcHJvZ3JhbW1lZCBhbmQgaXMgYWN0aXZlLiAgYnVzeT0xIG1lYW5zIGFuIGludGVybmFsIG9wZXJhdGlvbgomIzQzOwkJaXMgaW4gcHJvZ3Jlc3MuICBmYWlsZWQ9MSBtZWFucyB0aGUgbGFzdCBJU0Mgb3BlcmF0aW9uIGZhaWxlZC4KJiM0MzsKJiM0MzsJCUEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlCiYjNDM7CQlvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlCiYjNDM7CQlJRCBvZiB0aGUgQ1BMRCBpcyByZXBvcnRlZCBhcyB0aGUgZml4ZWQgJiMzNDtjcGxkLmlkJiMzNDsgdmVyc2lvbiBieQomIzQzOwkJZGV2bGluayBkZXYgaW5mby4KJiM0MzsKJiM0MzsJCVRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwKJiM0MzsJCWZpcm13YXJlLXVwbG9hZCBpbnRlcmZhY2UsIHJlZ2lzdGVyZWQgcGVyIGNhcmQgYXQ6CiYjNDM7CQkvc3lzL2NsYXNzL2Zpcm13YXJlL2FkdmEtY3BsZC5OLwomIzQzOwkJd2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS4KJiM0MzsKIFdoYXQ6CQkvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vYXZhaWxhYmxlX2Nsb2NrX3NvdXJjZXMKIERhdGU6CQlTZXB0ZW1iZXIgMjAyMQogQ29udGFjdDoJSm9uYXRoYW4gTGVtb24gJmx0O2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbSZndDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL0tjb25maWcgYi9kcml2ZXJzL3B0cC9LY29uZmlnCmluZGV4IGZlYjUwZjhjYzQwNmEuLjI0ZjA0N2MzN2U0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHRwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvS2NvbmZpZwpAQCAtMjE5LDYgJiM0MzsyMTksOCBAQCBjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IENSQzE2CiAJc2VsZWN0IERQTEwKJiM0MzsJc2VsZWN0IEZXX0xPQURFUgomIzQzOwlzZWxlY3QgRldfVVBMT0FECiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBhbiBPcGVuQ29tcHV0ZSB0aW1lIGNhcmQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuYwppbmRleCAzZDI2ZWMxZjdiOWVjLi44NmQxYzFhMzExY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX29jcC5jCkBAIC0yMCwxMCAmIzQzOzIwLDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpL2FsdGVyYS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L210ZC9tdGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9udm1lbS1jb25zdW1lci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYzE2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FVEFfVElNRUNBUkQJCTB4MDQwMAogCkBAIC04NSw2ICYjNDM7ODksNyBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8gewogCXU4CQkJCXNpZ25hbHNfbnI7CiAJdTgJCQkJZnJlcV9pbl9ucjsKIAljb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAJKmF0dHJfZ3JvdXBzOwomIzQzOwlib29sCQkJCWhhc19jcGxkOyAvKiB4MTogc3VwcG9ydHMgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgKi8KIH07CiAKICNkZWZpbmUgT0NQX0NUUkxfRU5BQkxFCQlCSVQoMCkKQEAgLTE2Myw3ICYjNDM7MTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHsKIAl1MzIJZ3BpbzE7CiAJdTMyCV9fcGFkMDsKIAl1MzIJZ3BpbzI7Ci0JdTMyCV9fcGFkMTsKJiM0MzsJLyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovCiYjNDM7CXUzMglpMmNfYnVzX2N0cmw7CiB9OwogCiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHsKQEAgLTQxNiw2ICYjNDM7NDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHsKIAlkcGxsX3RyYWNrZXIgdHJhY2tlcjsKIAlpbnQgc2lnbmFsc19ucjsKIAlpbnQgZnJlcV9pbl9ucjsKJiM0MzsJLyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovCiYjNDM7CXN0cnVjdCBtdXRleAkJY3BsZF9sb2NrOyAgICAgICAgICAgIC8qIHNlcmlhbGlzZXMgQ1BMRCBvcGVyYXRpb25zICovCiYjNDM7CWludAkJCWNwbGRfaTJjX2FkYXBfbnI7ICAgICAvKiBJMkMgYWRhcHRlciBucjsgLTEgaWYgYWJzZW50ICovCiYjNDM7CXN0cnVjdCBpMmNfYWRhcHRlcgkqY3BsZF9hZGFwOyAgICAgICAgICAgLyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi8KJiM0MzsJdTgJCQkqY3BsZF9idWY7ICAgICAgICAgICAgLyogRE1BLXNhZmUgc2NyYXRjaDsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovCiYjNDM7CXUzMgkJCWNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovCiYjNDM7CWJvb2wJCQloYXNfY3BsZDsgICAgICAgICAgICAgLyogeDEgVEFQIENQTEQgcHJlc2VudCAqLwomIzQzOwlzdHJ1Y3QgZndfdXBsb2FkCSpjcGxkX2Z3X3VwbG9hZDsgICAgICAvKiBmaXJtd2FyZSB1cGxvYWQgaGFuZGxlOyBOVUxMIGlmIGFic2VudCAqLwomIzQzOwlib29sCQkJY3BsZF9jYW5jZWw7ICAgICAgICAgIC8qIGNhbmNlbGxhdGlvbiByZXF1ZXN0ZWQgKi8KJiM0MzsJYm9vbAkJCWNwbGRfaW5fY29uZmlnX21vZGU7ICAvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gmIzM5O2QgKi8KIH07CiAKICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVAJQklUKDApCkBAIC00NDksOCAmIzQzOzQ2NSwxMSBAQCBzdGF0aWMgaW50IHB0cF9vY3BfYXJ0X2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTsKIAogc3RhdGljIGludCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpOwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmd191cGxvYWRfb3BzIGFkdmFfY3BsZF91cGxvYWRfb3BzOwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3NtYV9vcDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7CiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICppZCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107CiAKQEAgLTEyNzMsNiAmIzQzOzEyOTIsNyBAQCBzdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV94MV9yZXNvdXJjZVtdID0gewogCQkJLnNpZ25hbHNfbnIgICA9IDQsCiAJCQkuZnJlcV9pbl9uciAgID0gNCwKIAkJCS5hdHRyX2dyb3VwcyAgPSBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwcywKJiM0MzsJCQkuaGFzX2NwbGQgICAgID0gdHJ1ZSwKIAkJfSwKIAl9LAogCXsgfQpAQCAtMjE4NSw2ICYjNDM7MjIwNSwxOSBAQCBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwlpZiAoYnAtJmd0O2hhc19jcGxkKSB7CiYjNDM7CQl1MzIgaWQ7CiYjNDM7CiYjNDM7CQllcnIgPSBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKGJwLCAmYW1wO2lkKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCXNwcmludGYoYnVmLCAmIzM0OzB4JTA4eCYjMzQ7LCBpZCk7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCAmIzM0O2NwbGQuaWQmIzM0OywgYnVmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0zMTk5LDYgJiM0MzszMjMyLDMwIEBAIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcikKIAkJcmV0dXJuIGVycjsKIAlwdHBfb2NwX3NtYV9pbml0KGJwKTsKIAomIzQzOwlicC0mZ3Q7aGFzX2NwbGQgPSBpbmZvLSZndDtoYXNfY3BsZDsKJiM0MzsJaWYgKGJwLSZndDtoYXNfY3BsZCkgewomIzQzOwkJc3RydWN0IGZ3X3VwbG9hZCAqZndsOwomIzQzOwkJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsKJiM0MzsJCS8qIE9uZSBpbnN0YW5jZSBwZXIgY2FyZCwgbnVtYmVyZWQgbGlrZSB0aGUgb2NwTiBkZXZpY2UuCiYjNDM7CQkgKiBmaXJtd2FyZV91cGxvYWRfcmVnaXN0ZXIoKSBrZWVwcyB0aGUgcG9pbnRlciByYXRoZXIgdGhhbgomIzQzOwkJICogY29weWluZyB0aGUgc3RyaW5nLCBzbyBpdCBoYXMgdG8gb3V0bGl2ZSB0aGUgcmVnaXN0cmF0aW9uLgomIzQzOwkJICovCiYjNDM7CQluYW1lID0gZGV2bV9rYXNwcmludGYoJmFtcDticC0mZ3Q7cGRldi0mZ3Q7ZGV2LCBHRlBfS0VSTkVMLAomIzQzOwkJCQkgICAgICAmIzM0O2FkdmEtY3BsZC4lZCYjMzQ7LCBicC0mZ3Q7aWQpOwomIzQzOwkJaWYgKCFuYW1lKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCAmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgICAgICAgbmFtZSwgJmFtcDthZHZhX2NwbGRfdXBsb2FkX29wcywgYnApOwomIzQzOwkJaWYgKElTX0VSUihmd2wpKQomIzQzOwkJCWRldl93YXJuKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7Q1BMRCBmaXJtd2FyZSB1cGxvYWQgdW5hdmFpbGFibGU6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBmd2wpOwomIzQzOwkJZWxzZQomIzQzOwkJCWJwLSZndDtjcGxkX2Z3X3VwbG9hZCA9IGZ3bDsKJiM0MzsJfQomIzQzOwogCXJldHVybiBwdHBfb2NwX2luaXRfY2xvY2soYnAsICZhbXA7aW5mby0mZ3Q7c2Vydm8pOwogfQogCkBAIC00MjI2LDYgJiM0Mzs0MjgzLDYwNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHsKIAl7IH0sCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBJbnRlcm5hbCBoZWxwZXJzIGZvciB0aGUgYWR2YV94MSBUQVAgQ1BMRCAoTGF0dGljZSBMQ01YTzNMRi0yMTAwKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBjYXJkIGhhcyB0d28gSTJDIGNvbnRyb2xsZXJzOyBMaW51eCByZWdpc3RlcnMgb25seSAweDAwMTUwMDAwLgomIzQzOyAqIFRoZSBpMmNfYnVzX2N0cmwgaGFuZHNoYWtlIHJlLXJvdXRlcyB3aGF0IGVhY2ggb25lIGlzIHdpcmVkIHRvOgomIzQzOyAqCiYjNDM7ICogICBncmFudCAwOiAgMHgxNTAwMDAgLSZndDsgRUVQUk9NcyAgICAgMHgxMjAwMDAgLSZndDsgVE1DIG9yIE0uMiwgTUImIzM5O3MgY2hvaWNlCiYjNDM7ICogICBncmFudCAxOiAgMHgxNTAwMDAgLSZndDsgVE1DIGJ1cyAgICAgMHgxMjAwMDAgLSZndDsgTS4yCiYjNDM7ICoKJiM0MzsgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIHNpdCBvbgomIzQzOyAqIHRoZSBUTUMgYnVzLCBzbyB0aGV5IGFyZSByZWFjaGFibGUgb25seSB3aGlsZSB0aGUgZ3JhbnQgaXMgaGVsZC4gIEZvcgomIzQzOyAqIHRoYXQgc2FtZSB3aW5kb3cgdGhlIEVFUFJPTXMgYXJlIG5vdCBiZWhpbmQgdGhlIGFkYXB0ZXIgYXQgYWxsLCBzbyBhCiYjNDM7ICogQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrIGFuZCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBhY3Jvc3MgaXQgdG8KJiM0MzsgKiBrZWVwIHRoZSBFRVBST00gYW5kIG52bWVtIHBhdGhzIG9mZiB0aGUgY29udHJvbGxlci4KJiM0MzsgKgomIzQzOyAqIE5vIHJhdyBJMkMgYWNjZXNzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvbmx5IHRoZSBhdHRyaWJ1dGVzIGJlbG93LgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NAomIzQzOyNkZWZpbmUgQURWQV9DUExEX0FERFIgICAgMHg0MAomIzQzOyNkZWZpbmUgQURWQV9NVVhfQ0hBTk5FTCAgMAomIzQzOwomIzQzOy8qIExvbmdlc3QgY29tbWFuZCBvciByZXBseTsgYm91bmRzIGVhY2ggaGFsZiBvZiB0aGUgcGVyLWNsYWltIHNjcmF0Y2guICovCiYjNDM7I2RlZmluZSBBRFZBX0NQTERfWEZFUl9NQVggMzIKJiM0MzsKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRVFVRVNUICAgIDB4MDAwMGFhYWFVCiYjNDM7I2RlZmluZSBNQkxBWkVfR1JBTlRFRCAgICAweDU1NTVhYWFhVQomIzQzOyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFUKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRVRSSUVTICAgIDIwMAomIzQzOyNkZWZpbmUgTUJMQVpFX1JFVFJZX1VTICAgMTAwMDAKJiM0MzsKJiM0MzsvKiBMYXR0aWNlIExDTVhPM0xGIElTQyBjb21tYW5kIGNvZGVzICovCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX0lEICAgICAgMHhFMDAwMDAwMFVMCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX1NUQVRVUyAgMHgzQzAwMDAwMFVMCiYjNDM7I2RlZmluZSBDUExEX0NNRF9FTl9DRkdfVFAgICAgMHg3NCAgIC8qIGVuYWJsZSBjb25maWcsIHRyYW5zcGFyZW50IG1vZGUgKi8KJiM0MzsjZGVmaW5lIENQTERfQ01EX0RJU19DRkcgICAgICAweDI2CiYjNDM7I2RlZmluZSBDUExEX0NNRF9FUkFTRSAgICAgICAgMHgwRQomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVTRVRfQUREUiAgIDB4NDYKJiM0MzsjZGVmaW5lIENQTERfQ01EX1dSSVRFX1BBR0UgICAweDcwCiYjNDM7I2RlZmluZSBDUExEX0NNRF9TRVRfRE9ORSAgICAgMHg1RQomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVGUkVTSCAgICAgIDB4NzkKJiM0MzsjZGVmaW5lIENQTERfUEFHRV9TSVpFICAgICAgICAxNgomIzQzOyNkZWZpbmUgQ1BMRF9QT0xMX1VTICAgICAgICAgIDEwMDAwICAvKiBzdGF0dXMgcG9sbCBpbnRlcnZhbCB3aGlsZSBidXN5ICovCiYjNDM7CiYjNDM7LyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqLwomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KQomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMikKJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBhZHZhX3gxX2kyY194ZmVyKCkgLSBpc3N1ZSBhIHNpbmdsZSBJMkMgdHJhbnNhY3Rpb24gb24gdGhlIFRNQyBidXMuCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgQGNtZCB3aGVuIGl0IGlzIG5vdCBuZWdhdGl2ZSwgZm9sbG93ZWQgYnkgQHdsZW4gYnl0ZXMgb2YgQHdkYXRhLAomIzQzOyAqIHRoZW4gcmVhZHMgQHJsZW4gYnl0ZXMgaWYgYXNrZWQuICBBIE5VTEwgQHdkYXRhIHNlbmRzIHplcm9zLgomIzQzOyAqCiYjNDM7ICogVGhlIG1lc3NhZ2UgaXMgYXNzZW1ibGVkIGluIHRoZSBzY3JhdGNoIGJ1ZmZlciB0YWtlbiBieQomIzQzOyAqIGFkdmFfeDFfYnVzX2NsYWltKCksIHdoaWNoIHRoZSBYaWxpbnggY29udHJvbGxlciBuZWVkcyBmb3IgRE1BIHNhZmV0eToKJiM0MzsgKiBhbiBvcGNvZGUgYW5kIGl0cyBhcmd1bWVudHMgYXJlIGNvcGllZCBleGFjdGx5IG9uY2UsIGFuZCBhIGZpcm13YXJlCiYjNDM7ICogdXBsb2FkIGNvc3RzIG9uZSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIG9uZSBwZXIgcGFnZS4KJiM0MzsgKgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgdGhhdCBjbGFpbSwgaGVuY2UgX19pMmNfdHJhbnNmZXIoKSBvdmVyIGkyY190cmFuc2ZlcigpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9pMmNfeGZlcihzdHJ1Y3QgcHRwX29jcCAqYnAsIHU4IGFkZHIsIGludCBjbWQsCiYjNDM7CQkJICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLAomIzQzOwkJCSAgICB2b2lkICpyZGF0YSwgdTggcmxlbikKJiM0Mzt7CiYjNDM7CXU4ICp3YnVmLCAqcmJ1ZjsKJiM0MzsJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOwomIzQzOwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOwomIzQzOwlpbnQgbm1zZ3MgPSAwLCByZXQ7CiYjNDM7CXUxNiBoZHIgPSBjbWQgJmd0Oz0gMDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwomIzQzOwlhZGFwID0gYnAtJmd0O2NwbGRfYWRhcDsKJiM0MzsJaWYgKCFhZGFwIHx8ICFicC0mZ3Q7Y3BsZF9idWYpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJaWYgKGhkciAmIzQzOyB3bGVuICZndDsgQURWQV9DUExEX1hGRVJfTUFYIHx8IHJsZW4gJmd0OyBBRFZBX0NQTERfWEZFUl9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJd2J1ZiA9IGJwLSZndDtjcGxkX2J1ZjsKJiM0MzsJcmJ1ZiA9IGJwLSZndDtjcGxkX2J1ZiAmIzQzOyBBRFZBX0NQTERfWEZFUl9NQVg7CiYjNDM7CiYjNDM7CWlmIChoZHIgJiM0Mzsgd2xlbikgewomIzQzOwkJaWYgKGhkcikKJiM0MzsJCQl3YnVmWzBdID0gY21kOwomIzQzOwkJaWYgKHdkYXRhKQomIzQzOwkJCW1lbWNweSh3YnVmICYjNDM7IGhkciwgd2RhdGEsIHdsZW4pOwomIzQzOwkJZWxzZQomIzQzOwkJCW1lbXNldCh3YnVmICYjNDM7IGhkciwgMCwgd2xlbik7CiYjNDM7CQltc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpewomIzQzOwkJCS5hZGRyICA9IGFkZHIsCiYjNDM7CQkJLmZsYWdzID0gSTJDX01fRE1BX1NBRkUsCiYjNDM7CQkJLmxlbiAgID0gaGRyICYjNDM7IHdsZW4sCiYjNDM7CQkJLmJ1ZiAgID0gd2J1ZiwKJiM0MzsJCX07CiYjNDM7CX0KJiM0MzsJaWYgKHJsZW4pIHsKJiM0MzsJCW1zZ3Nbbm1zZ3MmIzQzOyYjNDM7XSA9IChzdHJ1Y3QgaTJjX21zZyl7CiYjNDM7CQkJLmFkZHIgID0gYWRkciwKJiM0MzsJCQkuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX0RNQV9TQUZFLAomIzQzOwkJCS5sZW4gICA9IHJsZW4sCiYjNDM7CQkJLmJ1ZiAgID0gcmJ1ZiwKJiM0MzsJCX07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gX19pMmNfdHJhbnNmZXIoYWRhcCwgbXNncywgbm1zZ3MpOwomIzQzOwlpZiAocmV0ICE9IG5tc2dzKQomIzQzOwkJcmV0dXJuIChyZXQgJmx0OyAwKSA/IHJldCA6IC1FSU87CiYjNDM7CiYjNDM7CWlmIChyZGF0YSAmYW1wOyZhbXA7IHJsZW4pCiYjNDM7CQltZW1jcHkocmRhdGEsIHJidWYsIHJsZW4pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwlpZiAoYnAtJmd0O3Bwc19zZWxlY3QpCiYjNDM7CQlpb3dyaXRlMzIoTUJMQVpFX1JFTEVBU0UsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFjcXVpcmUgdGhlIHNoYXJlZCBJMkMgYnVzIGZyb20gdGhlIE1pY3JvQmxhemUgZmlybXdhcmUuICBSZXR1cm5zIHdpdGggbm8KJiM0MzsgKiByZXF1ZXN0IG91dHN0YW5kaW5nIG9uIGZhaWx1cmUsIHNvIHRoZSBmaXJtd2FyZSBpcyBuZXZlciBsZWZ0IGdyYW50aW5nIGEKJiM0MzsgKiBzZWdtZW50IHRvIGEgaG9zdCB0aGF0IGhhcyBnaXZlbiB1cCB3YWl0aW5nIGZvciBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghYnAtJmd0O3Bwc19zZWxlY3QpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJLyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2sKJiM0MzsJICoga2VlcHMgbGl2ZSBvbmVzIG91dC4gIFRoZSByZWFkIGJhY2sgb25seSBmbHVzaGVzIHRoZSBwb3N0ZWQgd3JpdGUuCiYjNDM7CSAqLwomIzQzOwlpb3dyaXRlMzIoMCwgJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsJaW9yZWFkMzIoJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsKJiM0MzsJaW93cml0ZTMyKE1CTEFaRV9SRVFVRVNULCAmYW1wO2JwLSZndDtwcHNfc2VsZWN0LSZndDtpMmNfYnVzX2N0cmwpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUJMQVpFX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgJiM0MzsgMTAwMCk7CiYjNDM7CQl2YWwgPSBpb3JlYWQzMigmYW1wO2JwLSZndDtwcHNfc2VsZWN0LSZndDtpMmNfYnVzX2N0cmwpOwomIzQzOwkJaWYgKHZhbCA9PSBNQkxBWkVfR1JBTlRFRCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJvdXRlIHRoZSBob3N0IGNvbnRyb2xsZXIgYmFjayB0byB0aGUgRUVQUk9NcyBhbmQgcmVsZWFzZSB0aGUgYWRhcHRlci4KJiM0MzsgKiBTYWZlIGFmdGVyIGEgZmFpbGVkIGNsYWltOiBpdCBhbHNvIGNsZWFycyBhIHJlcXVlc3QgdGhhdCB3YXMgbmV2ZXIgZ3JhbnRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX2J1c19yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLSZndDtjcGxkX2FkYXA7CiYjNDM7CiYjNDM7CWlmICghYWRhcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7CiYjNDM7CWJwLSZndDtjcGxkX2FkYXAgPSBOVUxMOwomIzQzOwlrZnJlZShicC0mZ3Q7Y3BsZF9idWYpOwomIzQzOwlicC0mZ3Q7Y3BsZF9idWYgPSBOVUxMOwomIzQzOwlpMmNfdW5sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpOwomIzQzOwlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2xhaW0gdGhlIFRNQyBidXMgZm9yIGEgQ1BMRCBvcGVyYXRpb24uICBIb2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgb3ZlcgomIzQzOyAqIHRoZSBoYW5kc2hha2Uga2VlcHMgcHRwX29jcF9yZWFkX2VlcHJvbSgpLCB0aGUgbnZtZW0gYXR0cmlidXRlcyBhbmQgdGhlCiYjNDM7ICogYXQyNCBzeXNmcyBmaWxlcyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkIGF3YXkgZnJvbSB0aGUKJiM0MzsgKiBFRVBST01zLiAgQSBmaXJtd2FyZSB1cGxvYWQgaG9sZHMgaXQgYWNyb3NzIHRoZSB3aG9sZSBwcmVwYXJlL3dyaXRlL3BvbGwKJiM0MzsgKiBzZXF1ZW5jZSwgc28gYW4gRUVQUk9NIHJlYWQgYmxvY2tzIGZvciBhcyBsb25nIGFzIHByb2dyYW1taW5nIHRha2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9idXNfY2xhaW0oc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLSZndDtjcGxkX2kyY19hZGFwX25yKSk7CiYjNDM7CWlmICghYWRhcCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwkvKiBPbmUgc2NyYXRjaCBidWZmZXIgcGVyIGNsYWltIHJhdGhlciB0aGFuIHBlciB0cmFuc2ZlcjogYSBmaXJtd2FyZQomIzQzOwkgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGUKJiM0MzsJICogYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIG9uZSBmb3IgZWFjaCAxNi1ieXRlIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9idWYgPSBremFsbG9jKDIgKiBBRFZBX0NQTERfWEZFUl9NQVgsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJwLSZndDtjcGxkX2J1ZikgewomIzQzOwkJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJaTJjX2xvY2tfYnVzKGFkYXAsIEkyQ19MT0NLX1JPT1RfQURBUFRFUik7CiYjNDM7CWJwLSZndDtjcGxkX2FkYXAgPSBhZGFwOwomIzQzOwomIzQzOwlyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZWxlY3QgYSBtdXggY2hhbm5lbCwgb3IgZGVzZWxlY3QgYWxsIHdpdGggY2ggJmx0OyAwIC0gdGhlIHBvd2VyLW9uIHN0YXRlLgomIzQzOyAqIFRoZSBtdXggaXMgb24gdGhlIFRNQyBidXMsIHNvIHdoYXQgaXQgaXMgbGVmdCBzZXQgdG8gbmV2ZXIgYWZmZWN0cyB0aGUKJiM0MzsgKiBFRVBST00gcGF0aHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX211eF9zZWxlY3Qoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgY2gpCiYjNDM7ewomIzQzOwl1OCB2YWwgPSAoY2ggJmd0Oz0gMCkgPyBCSVQoY2gpIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfTVVYX0FERFIsIHZhbCwgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQXJndW1lbnQgYnl0ZXMgdGhhdCBmb2xsb3cgYW4gSVNDIG9wY29kZS4gIFJldHVybnMgTlVMTCB3aXRoIEBuYXJncyBzZXQKJiM0MzsgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHU4ICphZHZhX3gxX2NwbGRfYXJncyh1OCBjbWQsIHU4ICpuYXJncykKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1OCBlbl9jZmdfdHBbXSA9IHsgMHgwOCwgMHgwMCB9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggZXJhc2VfY2ZnW10gPSB7IDB4MDQsIDB4MDAsIDB4MDAgfTsgLyogY2ZnIHNlY3RvciBvbmx5ICovCiYjNDM7CiYjNDM7CXN3aXRjaCAoY21kKSB7CiYjNDM7CWNhc2UgQ1BMRF9DTURfRU5fQ0ZHX1RQOgomIzQzOwkJKm5hcmdzID0gc2l6ZW9mKGVuX2NmZ190cCk7CiYjNDM7CQlyZXR1cm4gZW5fY2ZnX3RwOwomIzQzOwljYXNlIENQTERfQ01EX0VSQVNFOgomIzQzOwkJKm5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7CiYjNDM7CQlyZXR1cm4gZXJhc2VfY2ZnOwomIzQzOwljYXNlIENQTERfQ01EX1JFU0VUX0FERFI6CiYjNDM7CWNhc2UgQ1BMRF9DTURfU0VUX0RPTkU6CiYjNDM7CQkqbmFyZ3MgPSAzOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWNhc2UgQ1BMRF9DTURfRElTX0NGRzoKJiM0MzsJY2FzZSBDUExEX0NNRF9SRUZSRVNIOgomIzQzOwkJKm5hcmdzID0gMjsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJKm5hcmdzID0gMDsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIFNlbmQgYW4gSVNDIGNvbW1hbmQgd2l0aCB0aGUgZml4ZWQgYXJndW1lbnRzIHRoYXQgYmVsb25nIHRvIGl0LiAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dyaXRlKHN0cnVjdCBwdHBfb2NwICpicCwgdTggY21kKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKmFyZ3M7CiYjNDM7CXU4IG5hcmdzOwomIzQzOwomIzQzOwlhcmdzID0gYWR2YV94MV9jcGxkX2FyZ3MoY21kLCAmYW1wO25hcmdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBjbWQsIGFyZ3MsIG5hcmdzLCBOVUxMLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTZW5kIGEgNC1ieXRlIGNvbW1hbmQgdGhlbiByZWFkIGRhdGEgYmFjayB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBTVE9QCiYjNDM7ICogKExhdHRpY2UgY29tYmluZWQgd3JpdGUtJmd0O3JlcGVhdGVkLVNUQVJULSZndDtyZWFkKS4gIFR3byBtZXNzYWdlcyBpbiBvbmUKJiM0MzsgKiB0cmFuc2ZlciBpcyBleGFjdGx5IHRoYXQsIHNvIG5vIHByb3RvY29sLW1hbmdsaW5nIGZsYWcgaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCwKJiM0MzsJCQkJIHUzMiBjbWRfYmUsIHU4ICpvdXQsIHU4IG91dF9sZW4pCiYjNDM7ewomIzQzOwlfX2JlMzIgY21kID0gY3B1X3RvX2JlMzIoY21kX2JlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgJmFtcDtjbWQsIDQsIG91dCwgb3V0X2xlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpCiYjNDM7ewomIzQzOwl1OCBidWZbNF07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9TVEFUVVMsIGJ1ZiwgNCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuCiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCwKJiM0MzsgKiBhbmQgdGhlIHN0YXR1cyBpcyByZWFkIG9uY2UgbW9yZSBhZnRlciBpdCBleHBpcmVzIGJlZm9yZSBnaXZpbmcgdXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpCiYjNDM7ewomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJaW50IGVyciwgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVyciwKJiM0MzsJCQkJZXJyIHx8IFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpIHx8CiYjNDM7CQkJCShzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fAomIzQzOwkJCQkhKHN0YXR1cyAmYW1wOyBDUExEX1NUQVRVU19CVVNZKSwKJiM0MzsJCQkJQ1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwKJiM0MzsJCQkJYnAsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChSRUFEX09OQ0UoYnAtJmd0O2NwbGRfY2FuY2VsKSkKJiM0MzsJCXJldHVybiAtRUNBTkNFTEVEOwomIzQzOwlpZiAoZXJyIHx8IChzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfRkFJTEVEKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBzdGVwIGFib3J0ZWQgYnkgY2FuY2VsKCkgbXVzdCBiZSByZXBvcnRlZCBhcyBzdWNoLCBub3QgYXMgYSBIVyBlcnJvci4gKi8KJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyIGFkdmFfY3BsZF9lcnIoc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRAomIzQzOwkJCQkJICA6IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgb2YgdGhlIFRBUCBDUExELiAgSXQgaXMgYSBmaXhlZCBwcm9wZXJ0eSBvZgomIzQzOyAqIHRoZSBwYXJ0LCBzbyBjYWNoZSBpdCBhbmQgcGF5IHRoZSBidXMgYXJiaXRyYXRpb24gb25seSBvbmNlLiAgVGhlCiYjNDM7ICogTENNWE8zTEYtMjEwMCBJRENPREUgaXMgMHhlMTJiYzA0My4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKQomIzQzO3sKJiM0MzsJdTggZGF0YVs0XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGJwLSZndDtjcGxkX2lkKSB7CiYjNDM7CQkqaWQgPSBicC0mZ3Q7Y3BsZF9pZDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgQ1BMRCBvcGVyYXRpb24gY2FuIGhvbGQgY3BsZF9sb2NrIGEgbG9uZyB0aW1lOyBzdGF5IGtpbGxhYmxlLiAqLwomIzQzOwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byByZWxlYXNlOwomIzQzOwlyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCWJwLSZndDtjcGxkX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpOwomIzQzOwlhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTsKJiM0MztyZWxlYXNlOgomIzQzOwlhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCSppZCA9IGJwLSZndDtjcGxkX2lkOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGNwbGRfc3RhdHVzIC0gc2hvdyB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZSBUQVAgQ1BMRC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmc6ICYjMzQ7ZG9uZT0mbHQ7MHwxJmd0OyBidXN5PSZsdDswfDEmZ3Q7IGZhaWxlZD0mbHQ7MHwxJmd0O1xuJiMzNDsKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2NwbGRfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCSBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJdTMyIHN0ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovCiYjNDM7CXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2U7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCk7CiYjNDM7CWFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpOwomIzQzO3JlbGVhc2U6CiYjNDM7CWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CXJldHVybiByZXQgPyByZXQgOiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDtkb25lPSV1IGJ1c3k9JXUgZmFpbGVkPSV1XG4mIzM0OywKJiM0MzsJCQkJICAgICAgISEoc3QgJmFtcDsgQ1BMRF9TVEFUVVNfRE9ORSksCiYjNDM7CQkJCSAgICAgICEhKHN0ICZhbXA7IENQTERfU1RBVFVTX0JVU1kpLAomIzQzOwkJCQkgICAgICAhIShzdCAmYW1wOyBDUExEX1NUQVRVU19GQUlMRUQpKTsKJiM0Mzt9CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLgomIzQzOyAqCiYjNDM7ICogVGhlIGtlcm5lbCBmaXJtd2FyZS11cGxvYWQgc3Vic3lzdGVtIChDT05GSUdfRldfVVBMT0FEKSBleHBvc2VzOgomIzQzOyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59CiYjNDM7ICogd2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhlIG93bmluZyBvY3BOIGRldmljZS4KJiM0MzsgKiBVc2Vyc3BhY2Ugd3JpdGVzIHRoZSByYXcgYmluYXJ5IHBhZ2UgZGF0YSBkaXJlY3RseSDigJQgbm8gL2xpYi9maXJtd2FyZS8KJiM0MzsgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogQ2FsbGJhY2sgc2VxdWVuY2UgZHJpdmVuIGJ5IHRoZSBmcmFtZXdvcms6CiYjNDM7ICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaAomIzQzOyAqICAgd3JpdGUoKSAgICAgICAgLSBwcm9ncmFtIG9uZSAxNi1ieXRlIHBhZ2UgcGVyIGNhbGwKJiM0MzsgKiAgIHBvbGxfY29tcGxldGUoKS0gc2V0IERPTkUsIFJFRlJFU0gsIHdhaXQgZm9yIENQTEQgdG8gcmVib290CiYjNDM7ICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrCiYjNDM7ICogICBjbGVhbnVwKCkgICAgICAtIHJlbGVhc2UgYnVzIHJlc291cmNlcyAoY2FsbGVkIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSkKJiM0MzsgKi8KJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyCiYjNDM7YWR2YV9jcGxkX3ByZXBhcmUoc3RydWN0IGZ3X3VwbG9hZCAqZndsLCBjb25zdCB1OCAqZGF0YSwgdTMyIHNpemUpCiYjNDM7ewomIzQzOwllbnVtIGZ3X3VwbG9hZF9lcnIgcmV0ID0gRldfVVBMT0FEX0VSUl9OT05FOwomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtJmd0O2RkX2hhbmRsZTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IGNsZWFyIGNwbGRfY2FuY2VsIGhlcmU6IGZ3X3VwbG9hZF9zdGFydCgpIHF1ZXVlcyB0aGUgd29yawomIzQzOwkgKiBiZWZvcmUgdGhpcyBydW5zLCBzbyBhIGNhbmNlbCBtYXkgYWxyZWFkeSBoYXZlIGFycml2ZWQuICBJdCBpcwomIzQzOwkgKiBjbGVhcmVkIG9uY2UgdGhlIHVwbG9hZCBpcyBvdmVyLCBvbiBldmVyeSBleGl0IGJlbG93IGFuZCBpbgomIzQzOwkgKiBjbGVhbnVwKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNpemUgfHwgc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7CiYjNDM7CQlXUklURV9PTkNFKGJwLSZndDtjcGxkX2NhbmNlbCwgZmFsc2UpOwomIzQzOwkJcmV0dXJuIEZXX1VQTE9BRF9FUlJfSU5WQUxJRF9TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwLSZndDtjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfYnVzX2NsYWltKGJwKSkgewomIzQzOwkJcmV0ID0gRldfVVBMT0FEX0VSUl9USU1FT1VUOwomIzQzOwkJZ290byBlcnJfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpKSB7CiYjNDM7CQlyZXQgPSBGV19VUExPQURfRVJSX0hXX0VSUk9SOwomIzQzOwkJZ290byBlcnJfcmVsZWFzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIGlzc3VpbmcgRU5fQ0ZHX1RQLCBub3QgYWZ0ZXIgaXQgY29tcGxldGVzOiB0aGUgQ1BMRCBtYXkKJiM0MzsJICogaGF2ZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gbW9kZSBldmVuIGlmIHRoZSB3cml0ZSByZXBvcnRzIGFuIGVycm9yCiYjNDM7CSAqIG9yIHRoZSB3YWl0IGJlbG93IHRpbWVzIG91dCwgYW5kIGVycl9kZXNlbGVjdCBvbmx5IHNlbmRzIERJU19DRkcKJiM0MzsJICogd2hlbiB0aGlzIGlzIHNldC4gIEEgRElTX0NGRyB0byBhIGRldmljZSB0aGF0IG5ldmVyIGVudGVyZWQgdGhlCiYjNDM7CSAqIG1vZGUgaXMgaGFybWxlc3M7IGxlYXZpbmcgaXQgZW5hYmxlZCBpcyBub3QuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7CiYjNDM7CiYjNDM7CWlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCkgfHwKJiM0MzsJICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCA1MDAwKSkgewomIzQzOwkJcmV0ID0gYWR2YV9jcGxkX2VycihicCk7CiYjNDM7CQlnb3RvIGVycl9kZXNlbGVjdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKGJwLSZndDtjcGxkX2NhbmNlbCkpIHsKJiM0MzsJCXJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7CiYjNDM7CQlnb3RvIGVycl9kZXNlbGVjdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FUkFTRSkgfHwKJiM0MzsJICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxNTAwMCkpIHsKJiM0MzsJCXJldCA9IGFkdmFfY3BsZF9lcnIoYnApOwomIzQzOwkJZ290byBlcnJfZGVzZWxlY3Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpKSB7CiYjNDM7CQlyZXQgPSBGV19VUExPQURfRVJSX0NBTkNFTEVEOwomIzQzOwkJZ290byBlcnJfZGVzZWxlY3Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUikpIHsKJiM0MzsJCXJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7CiYjNDM7CQlnb3RvIGVycl9kZXNlbGVjdDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBjbGVhbnVwKCkgdW5sb2NrcyBldmVyeXRoaW5nLiAgZndfdXBsb2FkX21haW4oKSBvbmx5IHBhaXJzIGl0IHdpdGgKJiM0MzsJICogYSBwcmVwYXJlKCkgdGhhdCBzdWNjZWVkZWQsIHNvIHRoZSBlcnJvciBwYXRocyBiZWxvdyB1bmxvY2sgaGVyZQomIzQzOwkgKiBpbnN0ZWFkOyBoYW5kIHRoZSBjb250ZXh0IHRvIGNsZWFudXAoKSBmb3Igc3BhcnNlJiMzOTtzIGJlbmVmaXQuCiYjNDM7CSAqLwomIzQzOwlfX3JlbGVhc2UoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJcmV0dXJuIEZXX1VQTE9BRF9FUlJfTk9ORTsKJiM0MzsKJiM0MztlcnJfZGVzZWxlY3Q6CiYjNDM7CWlmIChicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSkgewomIzQzOwkJYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9ESVNfQ0ZHKTsKJiM0MzsJCWJwLSZndDtjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsJYWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7CiYjNDM7ZXJyX3JlbGVhc2U6CiYjNDM7CWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzO2Vycl91bmxvY2s6CiYjNDM7CVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfY2FuY2VsLCBmYWxzZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyCiYjNDM7YWR2YV9jcGxkX3dyaXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsCiYjNDM7CQl1MzIgb2Zmc2V0LCB1MzIgc2l6ZSwgdTMyICp3cml0dGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9vY3AgKmJwID0gZndsLSZndDtkZF9oYW5kbGU7CiYjNDM7CXU4IGFyZ3NbMyAmIzQzOyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKGJwLSZndDtjcGxkX2NhbmNlbCkpCiYjNDM7CQlyZXR1cm4gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDsKJiM0MzsKJiM0MzsJaWYgKHNpemUgJmx0OyBDUExEX1BBR0VfU0laRSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTsKJiM0MzsKJiM0MzsJbWVtY3B5KCZhbXA7YXJnc1szXSwgZGF0YSAmIzQzOyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBDUExEX0NNRF9XUklURV9QQUdFLAomIzQzOwkJCSAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKSB8fAomIzQzOwkgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCkpCiYjNDM7CQlyZXR1cm4gYWR2YV9jcGxkX2VycihicCk7CiYjNDM7CiYjNDM7CSp3cml0dGVuID0gQ1BMRF9QQUdFX1NJWkU7CiYjNDM7CXJldHVybiBGV19VUExPQURfRVJSX05PTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnIKJiM0MzthZHZhX2NwbGRfcG9sbF9jb21wbGV0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtJmd0O2RkX2hhbmRsZTsKJiM0MzsJaW50IGVycjsKJiM0MzsJdTMyIHN0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UoYnAtJmd0O2NwbGRfY2FuY2VsKSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0NBTkNFTEVEOwomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSkgfHwKJiM0MzsJICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKSkKJiM0MzsJCXJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTsKJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCkgfHwgIShzdCAmYW1wOyBDUExEX1NUQVRVU19ET05FKSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SOwomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SOwomIzQzOwomIzQzOwkvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gY2xlYW51cCgpCiYjNDM7CSAqIG11c3Qgbm90IHNlbmQgRElTX0NGRyBhZnRlcndhcmRzIGV2ZW4gaWYgdGhlIGNoZWNrcyBiZWxvdyBmYWlsLgomIzQzOwkgKi8KJiM0MzsJYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogVGhlIG5ldyBpbWFnZSBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgdGhpcyBwb2ludCwgc28gYSBzZWdtZW50IHRoYXQKJiM0MzsJICogaXMgbm90IGJhY2sgeWV0IG11c3Qgbm90IGJlIHJlcG9ydGVkIGFzIGEgZmFpbGVkIHVwZGF0ZTogcmV0cnkgdGhlCiYjNDM7CSAqIHJlc2VsZWN0IGluc3RlYWQgb2Ygc2FtcGxpbmcgdGhlIG11eCBvbmNlIGF0IGEgZml4ZWQgZGVsYXkuCiYjNDM7CSAqLwomIzQzOwltc2xlZXAoMTUwMCk7CiYjNDM7CWlmIChyZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX211eF9zZWxlY3QsIGVyciwgIWVyciwgQ1BMRF9QT0xMX1VTLAomIzQzOwkJCSAgICAgIDMwMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwKJiM0MzsJCQkgICAgICBicCwgQURWQV9NVVhfQ0hBTk5FTCkpCiYjNDM7CQlyZXR1cm4gRldfVVBMT0FEX0VSUl9USU1FT1VUOwomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDMwMDApKQomIzQzOwkJcmV0dXJuIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRAomIzQzOwkJCQkJCSAgOiBGV19VUExPQURfRVJSX1RJTUVPVVQ7CiYjNDM7CiYjNDM7CXJldHVybiBGV19VUExPQURfRVJSX05PTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7YWR2YV9jcGxkX2NhbmNlbChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtJmd0O2RkX2hhbmRsZTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkdmFfY3BsZF9jbGVhbnVwKHN0cnVjdCBmd191cGxvYWQgKmZ3bCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC0mZ3Q7ZGRfaGFuZGxlOwomIzQzOwomIzQzOwlfX2FjcXVpcmUoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsJLyogaGVsZCBzaW5jZSBwcmVwYXJlKCkgcmV0dXJuZWQgb2sgKi8KJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwomIzQzOwlpZiAoYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUpIHsKJiM0MzsJCWFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7CiYjNDM7CQlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpOwomIzQzOwlhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTsKJiM0MzsJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwsIGZhbHNlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZndfdXBsb2FkX29wcyBhZHZhX2NwbGRfdXBsb2FkX29wcyA9IHsKJiM0MzsJLnByZXBhcmUJID0gYWR2YV9jcGxkX3ByZXBhcmUsCiYjNDM7CS53cml0ZQkJID0gYWR2YV9jcGxkX3dyaXRlLAomIzQzOwkucG9sbF9jb21wbGV0ZQkgPSBhZHZhX2NwbGRfcG9sbF9jb21wbGV0ZSwKJiM0MzsJLmNhbmNlbAkJID0gYWR2YV9jcGxkX2NhbmNlbCwKJiM0MzsJLmNsZWFudXAJID0gYWR2YV9jcGxkX2NsZWFudXAsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7CiAJJmFtcDtkZXZfYXR0cl9zZXJpYWxudW0uYXR0ciwKIAkmYW1wO2Rldl9hdHRyX2duc3Nfc3luYy5hdHRyLApAQCAtNDI3NCw2ICYjNDM7NDkzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7CiAJJmFtcDtkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsCiAJJmFtcDtkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLAogCSZhbXA7ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0ciwKJiM0MzsJJmFtcDtkZXZfYXR0cl9jcGxkX3N0YXR1cy5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC00ODY3LDYgJiM0Mzs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicCkKIHsKIAlpbnQgaTsKIAomIzQzOwkvKiBNdXN0IGNvbWUgZmlyc3Q6IGNhbmNlbHMgYW5kIGZsdXNoZXMgYW4gaW4tZmxpZ2h0IHVwbG9hZCB3aGlsZSB0aGUKJiM0MzsJICogSTJDIGNvbnRyb2xsZXIgaXMgc3RpbGwgdXAsIGFuZCBkcm9wcyBjcGxkX2xvY2sgc28gYSBjcGxkX3N0YXR1cwomIzQzOwkgKiByZWFkZXIgY2Fubm90IHN0YWxsIHB0cF9vY3BfYXR0cl9ncm91cF9kZWwoKSBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmIChicC0mZ3Q7Y3BsZF9md191cGxvYWQpIHsKJiM0MzsJCWZpcm13YXJlX3VwbG9hZF91bnJlZ2lzdGVyKGJwLSZndDtjcGxkX2Z3X3VwbG9hZCk7CiYjNDM7CQlicC0mZ3Q7Y3BsZF9md191cGxvYWQgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcHRwX29jcF9kZWJ1Z2ZzX3JlbW92ZV9kZXZpY2UoYnApOwogCXB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTsKIAlwdHBfb2NwX2F0dHJfZ3JvdXBfZGVsKGJwKTsKQEAgLTQ5MDQsNiAmIzQzOzU1NzIsNyBAQCBwdHBfb2NwX2RldGFjaChzdHJ1Y3QgcHRwX29jcCAqYnApCiAJCWNsa19od191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUoYnAtJmd0O2kyY19jbGspOwogCWlmIChicC0mZ3Q7bl9pcnFzKQogCQlwY2lfZnJlZV9pcnFfdmVjdG9ycyhicC0mZ3Q7cGRldik7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmYW1wO2JwLSZndDtkZXYpOwogfQogCkBAIC01MDgwLDYgJiM0Mzs1NzQ5LDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCiYjNDM7CS8qIE11c3QgYmUgYmVmb3JlIHRoZSBmaXJzdCBlcnJvciBwYXRoIHRoYXQgY2FsbHMgcHRwX29jcF9kZXRhY2goKSwKJiM0MzsJICogc28gbXV0ZXhfZGVzdHJveSgpIGFsd2F5cyBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LgomIzQzOwkgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzCiYjNDM7CSAqIG5vdGlmaWVyIChwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKSBmaXJlcyB3aGVuIHRoZSBhZGFwdGVyCiYjNDM7CSAqIHJlZ2lzdGVycyBhbmQgc3RvcmVzIHRoZSBhZGFwdGVyIG51bWJlciBpbiBjcGxkX2kyY19hZGFwX25yOyB0aGUKJiM0MzsJICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyCiYjNDM7CSAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC4KJiM0MzsJICovCiYjNDM7CW11dGV4X2luaXQoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIgPSAtMTsKJiM0MzsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2JwLSZndDtzeW5jX3dvcmssIHB0cF9vY3Bfc3luY193b3JrKTsKIAogCS8qIGNvbXBhdCBtb2RlLgpAQCAtNTIxOSwxMSAmIzQzOzU4OTksMTYgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCiBmb3VuZDoKIAlicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChhZGQpCiYjNDM7CWlmIChhZGQpIHsKIAkJcHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgJiMzNDtpMmMmIzM0Oyk7Ci0JZWxzZQomIzQzOwkJLyogQ2FjaGUgYWRhcHRlciBucjsgdXNlZCBieSB0aGUgQ1BMRCBzdGF0dXMvaWQvdXBsb2FkIHBhdGhzCiYjNDM7CQkgKiBmb3IgcmVmZXJlbmNlLWNvdW50ZWQgdW5iaW5kLXNhZmUgYWRhcHRlciBhY2Nlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktJmd0O25yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIsIC0xKTsgLyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSAqLwogCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2JwLSZndDtkZXYua29iaiwgJiMzNDtpMmMmIzM0Oyk7Ci0KJiM0MzsJfQogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyAmIzM0O1dvcnRoRnV6emluZywmIzM0OyBhbmQgdG8gaWRlbnRpZnkgcG90ZW50aWFsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgYW5kICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGlmIGZ1enppbmcgaXMgd2FycmFudGVkLCBhbG9uZyB3aXRoIHRoZSAmIzM0O1JlYXNvbmluZyYjMzQ7IGJlaGluZCBteSBjb25jbHVzaW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2AsIGBkcml2ZXJzL3B0cC9LY29uZmlnYCwgYW5kIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkYC4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgcHRwX29jcGAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpcyBhc3NvY2lhdGVkIHdpdGggYFBUUF8xNTg4X0NMT0NLX09DUGAuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hhdCBraW5kIG9mIGhhcmR3YXJlIGFyZSB3ZSBkZWFsaW5nIHdpdGg/CgpNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGRpcmVjdGx5LiBNeSBzdXNwaWNpb24gaXMgdGhhdCBgcHRwX29jcGAgbWlnaHQgYmUgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHNvbWV0aGluZyBsaWtlIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBvciBwb3RlbnRpYWxseSBBRFZBIG9yIEFSVCB0aW1lY2FyZHMuCgpUaGlzIGxlYWRzIG1lIHRvIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGRyaXZlciByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHM/IElmIGl0IGRvZXMsIGFuZCBpdCYjMzk7cyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlbiBmdXp6aW5nIGlzIGxpa2VseSBvdXQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJ1bGUgaGVyZTogSWYgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIG9yIGlmIGl0IGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLCBvciB0ZWFyZG93biBjYWxsYmFja3MsIHRoZW4gaXQmIzM5O3MgYSBuby1nbyBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgaWYgYHB0cF9vY3BgIGlzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGxpa2UgT3BlbkNvbXB1dGUgVGltZUNhcmQgb3IgQURWQSB4MSBUQVAgY2FyZHMuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZSBmb3IgYHB0cF9vY3BgIHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgbm90IGEgZHJpdmVyIHdoZXJlIEkgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXChwY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jPTEzMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDgtfTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzA5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY1MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBDSSBEZXZpY2UgSUQgSGFuZGxpbmcgaW4gdGhlIFBUUCBPQ1AgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBwdHBfb2NwX3BjaWRldl9pZGAgdmFyaWFibGUgYW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBUUCBPQ1AgZHJpdmVyIGlzIGlkZW50aWZ5aW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBzcGVjaWZpYyBQQ0kgZGV2aWNlcyBpdCYjMzk7cyBkZXNpZ25lZCB0byB3b3JrIHdpdGguIEkgc3VzcGVjdCB0aGlzIElEIGlzIGNydWNpYWwgZm9yIGRldmljZSBwcm9iaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgZW5zdXJpbmcgdGhhdCB0aGUgZHJpdmVyIGNvcnJlY3RseSBiaW5kcyB0byB0aGUgaW50ZW5kZWQgaGFyZHdhcmUuIEnigJlsbCBiZSBsb29raW5nIGZvciBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIHdoZXJlIGl0JiMzOTtzIGNvbXBhcmVkIGFnYWluc3QgUENJIGRldmljZSBJRHMsIGFuZCBob3cgYW55IGRpc2NyZXBhbmNpZXMgYXJlIGhhbmRsZWQuIEFyZSB0aGVyZSBzcGVjaWZpYyB2ZW5kb3IvZGV2aWNlIElEcyBoYXJkY29kZWQsIG9yIGlzIGl0IG1vcmUgZ2VuZXJpYz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNpbmdsZSBJRCBvciBhIHJhbmdlIG9mIGFjY2VwdGFibGUgSURzPyBUaGlzIElEIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSYjMzk7cyBjb21wYXRpYmlsaXR5IHdpdGhpbiB0aGlzIFBUUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBvbiBzeXN0ZW0gYm9vdCwgaG90cGx1ZyBldmVudHMsIG9yIGRldmljZSBlbnVtZXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnZXQgY29kaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjk1Olx0XHRcdFx0Lmhhc19jcGxkICAgICA9IHRydWUsXG4xMjk2Olx0XHRcdH0sXG4xMjk3Olx0XHR9LFxuMTI5ODpcdFx0eyB9XG4xMjk5Olx0fTtcbjEzMDA6XHRcbjEzMDE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcbjEzMDI6XHRcdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXG4xMzAzOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShDRUxFU1RJQ0EsIFRJTUVDQVJELCBcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXG4xMzA0Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShPUk9MSUEsIEFSVENBUkQsIFx1MDAyNm9jcF9hcnRfcmVzb3VyY2UpIH0sXG4xMzA1Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXHUwMDI2b2NwX2FkdmFfcmVzb3VyY2UpIH0sXG4xMzA2Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRF9YMSwgXHUwMDI2b2NwX2FkdmFfeDFfcmVzb3VyY2UpIH0sXG4xMzA3Olx0XHR7IH1cbjEzMDg6XHR9O1xuMTMwOTpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG4xMzEwOlx0XG4xMzExOlx0c3RhdGljIERFRklORV9NVVRFWChwdHBfb2NwX2xvY2spO1xuMTMxMjpcdHN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcbjEzMTM6XHRcbjEzMTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2Nsb2NrW10gPSB7XG4xMzE1Olx0XHR7IC5uYW1lID0gXCYjMzQ7Tk9ORVwmIzM0OyxcdC52YWx1ZSA9IDAgfSxcbjEzMTY6XHRcdHsgLm5hbWUgPSBcJiMzNDtUT0RcJiMzNDssXHQudmFsdWUgPSAxIH0sXG4xMzE3Olx0XHR7IC5uYW1lID0gXCYjMzQ7SVJJR1wmIzM0OyxcdC52YWx1ZSA9IDIgfSxcbjEzMTg6XHRcdHsgLm5hbWUgPSBcJiMzNDtQUFNcJiMzNDssXHQudmFsdWUgPSAzIH0sXG4xMzE5Olx0XHR7IC5uYW1lID0gXCYjMzQ7UFRQXCYjMzQ7LFx0LnZhbHVlID0gNCB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHB0cF9vY3AgRHJpdmVyIGFuZCBXb3J0aEZ1enppbmcqKgoKT2theSwgc28gYHB0cF9vY3BgIGlzIGNsZWFybHkgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBQQ0kgZGV2aWNlcy4gSSYjMzk7bSBzZWVpbmcgaXQgc3VwcG9ydHMgYSBoYW5kZnVsIG9mIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzOiBNZXRhIFRpbWVDYXJkLCBDZWxlc3RpY2EgVGltZUNhcmQsIE9yb2xpYSBBcnRDYXJkLCBhbmQgQURWQSBUaW1lQ2FyZHMsIGluY2x1ZGluZyB0aGUgWDEgdmFyaWFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gbWVudGlvbiBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgdmlydHVhbCBkZXZpY2VzIGZvciBgcHRwX29jcGAgd2l0aGluIFFFTVUgb3IgYW55d2hlcmUgZWxzZS4gVGhlIHRleHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBRRU1VICpkb2VzbiYjMzk7dCogZW11bGF0ZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkLiBUaGlzIGRyaXZlciBhcHBlYXJzIHRvIGJlIHNvbGVseSBmb3IgcmVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gVGhlIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBhZGRlZCBpbiB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCB0aGUgQURWQSBUaW1lQ2FyZCBYMSwgZGVhbGluZyB3aXRoIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMsIHZpYSBJMkMsIHN5c2ZzLCBhbmQgYGRldmxpbmtgLgoKR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdGhhdCBwYXRjaGVzIGFyZSAqbm90KiB3b3J0aCBmdXp6aW5nIGlmIHRoZXkgaW52b2x2ZSBjb2RlIHBhdGhzIGltcG9zc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGRyaXZlciBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LgoKSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbiBvZiBtb2NrIGRyaXZlcnMgb3Igc29mdHdhcmUgZW11bGF0aW9uIHdpdGhpbiB0aGUgYHB0cGAgZGlyZWN0b3J5IG9yIGVsc2V3aGVyZS4gQnV0IHJpZ2h0IG5vdywgYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHByb2JhYmx5IGZhbGxzIGludG8gdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVFBfMTU4OF9DTE9DS19PQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZz0xOTk9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNV1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjEwLVxuZHJpdmVycy9wdHAvS2NvbmZpZzoyMTE6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTItXHR0cmlzdGF0ZSBcJiMzNDtPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfVk1XKVx0JiM0Mzs9IHB0cF92bXcub1xuZHJpdmVycy9wdHAvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX09DUClcdCYjNDM7PSBwdHBfb2NwLm9cbmRyaXZlcnMvcHRwL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QVFBfREZMX1RPRClcdFx0JiM0Mzs9IHB0cF9kZmxfdG9kLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFBUUCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvcHRwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTEuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IHNlY3Rpb24gd2hlcmUgSSBjYW4gcmV2aWV3IHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBtZSBmb3IgY29uZmlndXJpbmcgdGhlIFBUUCBkcml2ZXJzLiBUaGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UsIGEgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gZW5hYmxpbmcvZGlzYWJsaW5nLCBvciBwZXJoYXBzIHRvIHVuZGVyc3RhbmQgaG93IGEgcGFydGljdWxhciBQVFAgaW1wbGVtZW50YXRpb24gaXMgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBleGFtaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XG4gMjExOlx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIDIxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4gMjEzOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gMjE0Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgUENJXG4gMjE1Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTVREXG4gMjE2Olx0XHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXG4gMjE3Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gMjE4Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAyMTk6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDIyMDpcdFx0c2VsZWN0IENSQzE2XG4gMjIxOlx0XHRzZWxlY3QgRFBMTFxuIDIyMjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuIDIyMzpcdFx0c2VsZWN0IEZXX1VQTE9BRFxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cbiAyMjY6XHRcbiAyMjc6XHRcdCAgVGhlIE9wZW5Db21wdXRlIHRpbWUgY2FyZCBpcyBhbiBhdG9taWMgY2xvY2sgYWxvbmcgd2l0aFxuIDIyODpcdFx0ICBhIEdQUyByZWNlaXZlciB0aGF0IHByb3ZpZGVzIGEgR3JhbmRtYXN0ZXIgY2xvY2sgc291cmNlXG4gMjI5Olx0XHQgIGZvciBhIFBUUCBlbmFibGVkIG5ldHdvcmsuXG4gMjMwOlx0XG4gMjMxOlx0XHQgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudGltaW5nY2FyZC5jb20vXG4gMjMyOlx0XG4gMjMzOlx0Y29uZmlnIFBUUF9ERkxfVE9EXG4gMjM0Olx0XHR0cmlzdGF0ZSBcJiMzNDtGUEdBIERGTCBUb0QgRHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTY3CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgcHRwX29jcGAgRHJpdmVyJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGJhc2VkIG9uIHRoZSBhbmFseXNpcywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBgV29ydGhGdXp6aW5nYCBpcyBnb2luZyB0byBiZSBmYWxzZSBpbiB0aGlzIGNhc2UuIFRoZSBgcHRwX29jcGAgZHJpdmVyIGlzIGV4cGxpY2l0bHkgZGVzaWduZWQgZm9yIHBoeXNpY2FsIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRldmljZXPigJR0aGluayBBRFZBIHgxLCBNZXRhIFRpbWVjYXJkLCBhbmQgdGhlIGxpa2UuIFRoZXNlIGFyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzLiBJdCYjMzk7cyBub3QgdGFyZ2V0aW5nIHNvbWUgZ2VuZXJpYyBQQ0kgZGV2aWNlOyBpdCYjMzk7cyBzcGVjaWZpYyBoYXJkd2FyZS4gQW5kIGNydWNpYWxseSwgaXQmIzM5O3MgKm5vdCogc29tZXRoaW5nIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhZGRpbmcgZmVhdHVyZXMgZm9yIENQTEQgZmlybXdhcmUgdXBsb2FkcyBhbmQgc3RhdHVzIHJlcG9ydGluZyB0aHJvdWdoIHN5c2ZzLCBhbGwgdGllZCB0byB0aGF0IHBhcnRpY3VsYXIgaGFyZHdhcmUgKGlkZW50aWZpZWQgYnkgUENJIElEIDB4YWQ1YToweDA0MTApLiBTbywgdG8gZXZlbiAqaW50ZXJhY3QqIHdpdGggdGhpcyBkcml2ZXIgcHJvcGVybHksIHlvdSYjMzk7ZCBuZWVkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgcnVsZXMgb3V0IG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgcmVzdWx0cyBhcmUgc2ltcGxlOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZQoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoKVGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1cnN1ZSBmdXp6aW5nIGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhZGQgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgYW5kIHN0YXR1cyByZXBvcnRpbmcgc3VwcG9ydCB0byB0aGUgT3BlbkNvbXB1dGUgVGltZUNhcmQgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpIGZvciBBRFZBIHgxIFRBUCBjYXJkcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgaW4gZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIGFkZCBDUExEIGZpcm13YXJlIHVwbG9hZCBhbmQgc3RhdHVzIHJlcG9ydGluZyBzdXBwb3J0IHRvIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYykgZm9yIEFEVkEgeDEgVEFQIGNhcmRzLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjozNjo0OC41NDM3NzAyNzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODI0NTUwNzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MzY6NDguNTQzNzc0MzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg0MjQ5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGIyNWU0ZWYyODQzZGMzZWFmMjc4ZDZmNTlmZWM3NzA0YmY1MzJiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDE2OjM2OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNDFlZWFkZDQ2MzMwMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbkBAIC0xMSw2ICsxMSwzMCBAQCBDb250YWN0OlxcdEpvbmF0aGFuIExlbW9uIFxcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cXHUwMDNlXFxuIERlc2NyaXB0aW9uOlxcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcXG4gXFx0XFx0cmVnaXN0ZXJlZC5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXFxuK0RhdGU6XFx0XFx0SnVseSAyMDI2XFxuK0NvbnRhY3Q6XFx0U2FnaSBNYWltb24gXFx1MDAzY21haW1vbi5zYWdpQGdtYWlsLmNvbVxcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0KFJPLCByb290IG9ubHkpIFRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELCBpblxcbitcXHRcXHRodW1hbi1yZWFkYWJsZSBmb3JtOlxcbitcXG4rXFx0XFx0ICBkb25lPVxcdTAwM2MwfDFcXHUwMDNlIGJ1c3k9XFx1MDAzYzB8MVxcdTAwM2UgZmFpbGVkPVxcdTAwM2MwfDFcXHUwMDNlXFxuK1xcbitcXHRcXHRPbmx5IHByZXNlbnQgb24gQURWQSB4MSBUQVAgYm9hcmRzIChQQ0kgSUQgMHhhZDVhOjB4MDQxMCkuXFxuK1xcbitcXHRcXHRkb25lPTEgaW5kaWNhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBzdWNjZXNzZnVsbHlcXG4rXFx0XFx0cHJvZ3JhbW1lZCBhbmQgaXMgYWN0aXZlLiAgYnVzeT0xIG1lYW5zIGFuIGludGVybmFsIG9wZXJhdGlvblxcbitcXHRcXHRpcyBpbiBwcm9ncmVzcy4gIGZhaWxlZD0xIG1lYW5zIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkLlxcbitcXG4rXFx0XFx0QSByZWFkIGFyYml0cmF0ZXMgZm9yIHRoZSBzaGFyZWQgSTJDIGJ1cyBhbmQgcmVwcm9ncmFtcyB0aGVcXG4rXFx0XFx0b24tY2FyZCBtdXgsIHNvIGl0IGlzIHJlc3RyaWN0ZWQgdG8gcm9vdC4gIFRoZSBMYXR0aWNlIGRldmljZVxcbitcXHRcXHRJRCBvZiB0aGUgQ1BMRCBpcyByZXBvcnRlZCBhcyB0aGUgZml4ZWQgXFxcImNwbGQuaWRcXFwiIHZlcnNpb24gYnlcXG4rXFx0XFx0ZGV2bGluayBkZXYgaW5mby5cXG4rXFxuK1xcdFxcdFRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWxcXG4rXFx0XFx0ZmlybXdhcmUtdXBsb2FkIGludGVyZmFjZSwgcmVnaXN0ZXJlZCBwZXIgY2FyZCBhdDpcXG4rXFx0XFx0L3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi9cXG4rXFx0XFx0d2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXFxuIERhdGU6XFx0XFx0U2VwdGVtYmVyIDIwMjFcXG4gQ29udGFjdDpcXHRKb25hdGhhbiBMZW1vbiBcXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9LY29uZmlnIGIvZHJpdmVycy9wdHAvS2NvbmZpZ1xcbmluZGV4IGZlYjUwZjhjYzQwNmEuLjI0ZjA0N2MzN2U0YzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wdHAvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvcHRwL0tjb25maWdcXG5AQCAtMjE5LDYgKzIxOSw4IEBAIGNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIFxcdHNlbGVjdCBDUkMxNlxcbiBcXHRzZWxlY3QgRFBMTFxcbitcXHRzZWxlY3QgRldfTE9BREVSXFxuK1xcdHNlbGVjdCBGV19VUExPQURcXG4gXFx0aGVscFxcbiBcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuaW5kZXggM2QyNmVjMWY3YjllYy4uODZkMWMxYTMxMWNjNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcXG4rKysgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcXG5AQCAtMjAsMTAgKzIwLDE0IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGkvYWx0ZXJhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L210ZC9tdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMxNi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRVRBX1RJTUVDQVJEXFx0XFx0MHgwNDAwXFxuIFxcbkBAIC04NSw2ICs4OSw3IEBAIHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XFxuIFxcdHU4XFx0XFx0XFx0XFx0c2lnbmFsc19ucjtcXG4gXFx0dThcXHRcXHRcXHRcXHRmcmVxX2luX25yO1xcbiBcXHRjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXBcXHQqYXR0cl9ncm91cHM7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRoYXNfY3BsZDsgLyogeDE6IHN1cHBvcnRzIENQTEQgZmlybXdhcmUgdXBsb2FkICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVxcdFxcdEJJVCgwKVxcbkBAIC0xNjMsNyArMTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcXG4gXFx0dTMyXFx0Z3BpbzE7XFxuIFxcdHUzMlxcdF9fcGFkMDtcXG4gXFx0dTMyXFx0Z3BpbzI7XFxuLVxcdHUzMlxcdF9fcGFkMTtcXG4rXFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuK1xcdHUzMlxcdGkyY19idXNfY3RybDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xcbkBAIC00MTYsNiArNDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHtcXG4gXFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XFxuIFxcdGludCBzaWduYWxzX25yO1xcbiBcXHRpbnQgZnJlcV9pbl9ucjtcXG4rXFx0LyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovXFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGNwbGRfbG9jazsgICAgICAgICAgICAvKiBzZXJpYWxpc2VzIENQTEQgb3BlcmF0aW9ucyAqL1xcbitcXHRpbnRcXHRcXHRcXHRjcGxkX2kyY19hZGFwX25yOyAgICAgLyogSTJDIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXJcXHQqY3BsZF9hZGFwOyAgICAgICAgICAgLyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cXG4rXFx0dThcXHRcXHRcXHQqY3BsZF9idWY7ICAgICAgICAgICAgLyogRE1BLXNhZmUgc2NyYXRjaDsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovXFxuK1xcdHUzMlxcdFxcdFxcdGNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovXFxuK1xcdGJvb2xcXHRcXHRcXHRoYXNfY3BsZDsgICAgICAgICAgICAgLyogeDEgVEFQIENQTEQgcHJlc2VudCAqL1xcbitcXHRzdHJ1Y3QgZndfdXBsb2FkXFx0KmNwbGRfZndfdXBsb2FkOyAgICAgIC8qIGZpcm13YXJlIHVwbG9hZCBoYW5kbGU7IE5VTEwgaWYgYWJzZW50ICovXFxuK1xcdGJvb2xcXHRcXHRcXHRjcGxkX2NhbmNlbDsgICAgICAgICAgLyogY2FuY2VsbGF0aW9uIHJlcXVlc3RlZCAqL1xcbitcXHRib29sXFx0XFx0XFx0Y3BsZF9pbl9jb25maWdfbW9kZTsgIC8qIEVOX0NGR19UUCBpc3N1ZWQgYnV0IG5vdCB5ZXQgUkVGUkVTSCdkICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXFx0QklUKDApXFxuQEAgLTQ0OSw4ICs0NjUsMTEgQEAgc3RhdGljIGludCBwdHBfb2NwX2FydF9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuIFxcbiBzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X3VwbG9hZF9vcHMgYWR2YV9jcGxkX3VwbG9hZF9vcHM7XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wO1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XFxuIFxcbkBAIC0xMjczLDYgKzEyOTIsNyBAQCBzdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV94MV9yZXNvdXJjZVtdID0ge1xcbiBcXHRcXHRcXHQuc2lnbmFsc19uciAgID0gNCxcXG4gXFx0XFx0XFx0LmZyZXFfaW5fbnIgICA9IDQsXFxuIFxcdFxcdFxcdC5hdHRyX2dyb3VwcyAgPSBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwcyxcXG4rXFx0XFx0XFx0Lmhhc19jcGxkICAgICA9IHRydWUsXFxuIFxcdFxcdH0sXFxuIFxcdH0sXFxuIFxcdHsgfVxcbkBAIC0yMTg1LDYgKzIyMDUsMTkgQEAgcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0aWYgKGJwLVxcdTAwM2VoYXNfY3BsZCkge1xcbitcXHRcXHR1MzIgaWQ7XFxuK1xcbitcXHRcXHRlcnIgPSBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKGJwLCBcXHUwMDI2aWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0c3ByaW50ZihidWYsIFxcXCIweCUwOHhcXFwiLCBpZCk7XFxuK1xcdFxcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsIFxcXCJjcGxkLmlkXFxcIiwgYnVmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMxOTksNiArMzIzMiwzMCBAQCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdHB0cF9vY3Bfc21hX2luaXQoYnApO1xcbiBcXG4rXFx0YnAtXFx1MDAzZWhhc19jcGxkID0gaW5mby1cXHUwMDNlaGFzX2NwbGQ7XFxuK1xcdGlmIChicC1cXHUwMDNlaGFzX2NwbGQpIHtcXG4rXFx0XFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xcbitcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXG4rXFx0XFx0LyogT25lIGluc3RhbmNlIHBlciBjYXJkLCBudW1iZXJlZCBsaWtlIHRoZSBvY3BOIGRldmljZS5cXG4rXFx0XFx0ICogZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKCkga2VlcHMgdGhlIHBvaW50ZXIgcmF0aGVyIHRoYW5cXG4rXFx0XFx0ICogY29weWluZyB0aGUgc3RyaW5nLCBzbyBpdCBoYXMgdG8gb3V0bGl2ZSB0aGUgcmVnaXN0cmF0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bmFtZSA9IGRldm1fa2FzcHJpbnRmKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBHRlBfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiYWR2YS1jcGxkLiVkXFxcIiwgYnAtXFx1MDAzZWlkKTtcXG4rXFx0XFx0aWYgKCFuYW1lKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGZ3bCA9IGZpcm13YXJlX3VwbG9hZF9yZWdpc3RlcihUSElTX01PRFVMRSwgXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuYW1lLCBcXHUwMDI2YWR2YV9jcGxkX3VwbG9hZF9vcHMsIGJwKTtcXG4rXFx0XFx0aWYgKElTX0VSUihmd2wpKVxcbitcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2YnAtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJDUExEIGZpcm13YXJlIHVwbG9hZCB1bmF2YWlsYWJsZTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgZndsKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRicC1cXHUwMDNlY3BsZF9md191cGxvYWQgPSBmd2w7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBwdHBfb2NwX2luaXRfY2xvY2soYnAsIFxcdTAwMjZpbmZvLVxcdTAwM2VzZXJ2byk7XFxuIH1cXG4gXFxuQEAgLTQyMjYsNiArNDI4Myw2MDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7XFxuIFxcdHsgfSxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIEludGVybmFsIGhlbHBlcnMgZm9yIHRoZSBhZHZhX3gxIFRBUCBDUExEIChMYXR0aWNlIExDTVhPM0xGLTIxMDApLlxcbisgKlxcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cXG4rICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBvbmUgaXMgd2lyZWQgdG86XFxuKyAqXFxuKyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cXHUwMDNlIEVFUFJPTXMgICAgIDB4MTIwMDAwIC1cXHUwMDNlIFRNQyBvciBNLjIsIE1CJ3MgY2hvaWNlXFxuKyAqICAgZ3JhbnQgMTogIDB4MTUwMDAwIC1cXHUwMDNlIFRNQyBidXMgICAgIDB4MTIwMDAwIC1cXHUwMDNlIE0uMlxcbisgKlxcbisgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIHNpdCBvblxcbisgKiB0aGUgVE1DIGJ1cywgc28gdGhleSBhcmUgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBGb3JcXG4rICogdGhhdCBzYW1lIHdpbmRvdyB0aGUgRUVQUk9NcyBhcmUgbm90IGJlaGluZCB0aGUgYWRhcHRlciBhdCBhbGwsIHNvIGFcXG4rICogQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrIGFuZCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBhY3Jvc3MgaXQgdG9cXG4rICoga2VlcCB0aGUgRUVQUk9NIGFuZCBudm1lbSBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIuXFxuKyAqXFxuKyAqIE5vIHJhdyBJMkMgYWNjZXNzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvbmx5IHRoZSBhdHRyaWJ1dGVzIGJlbG93LlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NFxcbisjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcXG4rI2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXFxuK1xcbisvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xcbisjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxcbitcXG4rI2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxcbisjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXFxuKyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFVcXG4rI2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcXG4rI2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxcbitcXG4rLyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xcbisjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcXG4rI2RlZmluZSBDUExEX0NNRF9SRUFEX1NUQVRVUyAgMHgzQzAwMDAwMFVMXFxuKyNkZWZpbmUgQ1BMRF9DTURfRU5fQ0ZHX1RQICAgIDB4NzQgICAvKiBlbmFibGUgY29uZmlnLCB0cmFuc3BhcmVudCBtb2RlICovXFxuKyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcXG4rI2RlZmluZSBDUExEX0NNRF9FUkFTRSAgICAgICAgMHgwRVxcbisjZGVmaW5lIENQTERfQ01EX1JFU0VUX0FERFIgICAweDQ2XFxuKyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcXG4rI2RlZmluZSBDUExEX0NNRF9TRVRfRE9ORSAgICAgMHg1RVxcbisjZGVmaW5lIENQTERfQ01EX1JFRlJFU0ggICAgICAweDc5XFxuKyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XFxuKyNkZWZpbmUgQ1BMRF9QT0xMX1VTICAgICAgICAgIDEwMDAwICAvKiBzdGF0dXMgcG9sbCBpbnRlcnZhbCB3aGlsZSBidXN5ICovXFxuK1xcbisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAoTGF0dGljZSBMQ01YTzNMRiBkYXRhc2hlZXQpICovXFxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KVxcbisjZGVmaW5lIENQTERfU1RBVFVTX0JVU1kgICBCSVQoMTIpXFxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRkFJTEVEIEJJVCgxMylcXG4rXFxuKy8qXFxuKyAqIGFkdmFfeDFfaTJjX3hmZXIoKSAtIGlzc3VlIGEgc2luZ2xlIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1cy5cXG4rICpcXG4rICogV3JpdGVzIEBjbWQgd2hlbiBpdCBpcyBub3QgbmVnYXRpdmUsIGZvbGxvd2VkIGJ5IEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSxcXG4rICogdGhlbiByZWFkcyBAcmxlbiBieXRlcyBpZiBhc2tlZC4gIEEgTlVMTCBAd2RhdGEgc2VuZHMgemVyb3MuXFxuKyAqXFxuKyAqIFRoZSBtZXNzYWdlIGlzIGFzc2VtYmxlZCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgdGFrZW4gYnlcXG4rICogYWR2YV94MV9idXNfY2xhaW0oKSwgd2hpY2ggdGhlIFhpbGlueCBjb250cm9sbGVyIG5lZWRzIGZvciBETUEgc2FmZXR5OlxcbisgKiBhbiBvcGNvZGUgYW5kIGl0cyBhcmd1bWVudHMgYXJlIGNvcGllZCBleGFjdGx5IG9uY2UsIGFuZCBhIGZpcm13YXJlXFxuKyAqIHVwbG9hZCBjb3N0cyBvbmUgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBvbmUgcGVyIHBhZ2UuXFxuKyAqXFxuKyAqIENhbGxlciBtdXN0IGhvbGQgdGhhdCBjbGFpbSwgaGVuY2UgX19pMmNfdHJhbnNmZXIoKSBvdmVyIGkyY190cmFuc2ZlcigpLlxcbisgKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLFxcbitcXHRcXHRcXHQgICAgdm9pZCAqcmRhdGEsIHU4IHJsZW4pXFxuK3tcXG4rXFx0dTggKndidWYsICpyYnVmO1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XFxuK1xcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XFxuK1xcdGludCBubXNncyA9IDAsIHJldDtcXG4rXFx0dTE2IGhkciA9IGNtZCBcXHUwMDNlPSAwO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcbitcXHRhZGFwID0gYnAtXFx1MDAzZWNwbGRfYWRhcDtcXG4rXFx0aWYgKCFhZGFwIHx8ICFicC1cXHUwMDNlY3BsZF9idWYpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0aWYgKGhkciArIHdsZW4gXFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiBcXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR3YnVmID0gYnAtXFx1MDAzZWNwbGRfYnVmO1xcbitcXHRyYnVmID0gYnAtXFx1MDAzZWNwbGRfYnVmICsgQURWQV9DUExEX1hGRVJfTUFYO1xcbitcXG4rXFx0aWYgKGhkciArIHdsZW4pIHtcXG4rXFx0XFx0aWYgKGhkcilcXG4rXFx0XFx0XFx0d2J1ZlswXSA9IGNtZDtcXG4rXFx0XFx0aWYgKHdkYXRhKVxcbitcXHRcXHRcXHRtZW1jcHkod2J1ZiArIGhkciwgd2RhdGEsIHdsZW4pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1lbXNldCh3YnVmICsgaGRyLCAwLCB3bGVuKTtcXG4rXFx0XFx0bXNnc1tubXNncysrXSA9IChzdHJ1Y3QgaTJjX21zZyl7XFxuK1xcdFxcdFxcdC5hZGRyICA9IGFkZHIsXFxuK1xcdFxcdFxcdC5mbGFncyA9IEkyQ19NX0RNQV9TQUZFLFxcbitcXHRcXHRcXHQubGVuICAgPSBoZHIgKyB3bGVuLFxcbitcXHRcXHRcXHQuYnVmICAgPSB3YnVmLFxcbitcXHRcXHR9O1xcbitcXHR9XFxuK1xcdGlmIChybGVuKSB7XFxuK1xcdFxcdG1zZ3Nbbm1zZ3MrK10gPSAoc3RydWN0IGkyY19tc2cpe1xcbitcXHRcXHRcXHQuYWRkciAgPSBhZGRyLFxcbitcXHRcXHRcXHQuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX0RNQV9TQUZFLFxcbitcXHRcXHRcXHQubGVuICAgPSBybGVuLFxcbitcXHRcXHRcXHQuYnVmICAgPSByYnVmLFxcbitcXHRcXHR9O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XFxuK1xcdGlmIChyZXQgIT0gbm1zZ3MpXFxuK1xcdFxcdHJldHVybiAocmV0IFxcdTAwM2MgMCkgPyByZXQgOiAtRUlPO1xcbitcXG4rXFx0aWYgKHJkYXRhIFxcdTAwMjZcXHUwMDI2IHJsZW4pXFxuK1xcdFxcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXFxuK3tcXG4rXFx0aWYgKGJwLVxcdTAwM2VwcHNfc2VsZWN0KVxcbitcXHRcXHRpb3dyaXRlMzIoTUJMQVpFX1JFTEVBU0UsIFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rfVxcbitcXG4rLyogQWNxdWlyZSB0aGUgc2hhcmVkIEkyQyBidXMgZnJvbSB0aGUgTWljcm9CbGF6ZSBmaXJtd2FyZS4gIFJldHVybnMgd2l0aCBub1xcbisgKiByZXF1ZXN0IG91dHN0YW5kaW5nIG9uIGZhaWx1cmUsIHNvIHRoZSBmaXJtd2FyZSBpcyBuZXZlciBsZWZ0IGdyYW50aW5nIGFcXG4rICogc2VnbWVudCB0byBhIGhvc3QgdGhhdCBoYXMgZ2l2ZW4gdXAgd2FpdGluZyBmb3IgaXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcHBzX3NlbGVjdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHQvKiBEcm9wIGEgcmVxdWVzdCBsZWZ0IGJ5IGEgY2FsbGVyIHRoYXQgZGllZCBtaWQtc2VxdWVuY2U7IGNwbGRfbG9ja1xcbitcXHQgKiBrZWVwcyBsaXZlIG9uZXMgb3V0LiAgVGhlIHJlYWQgYmFjayBvbmx5IGZsdXNoZXMgdGhlIHBvc3RlZCB3cml0ZS5cXG4rXFx0ICovXFxuK1xcdGlvd3JpdGUzMigwLCBcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCk7XFxuK1xcdGlvcmVhZDMyKFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rXFxuK1xcdGlvd3JpdGUzMihNQkxBWkVfUkVRVUVTVCwgXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgKyAxMDAwKTtcXG4rXFx0XFx0dmFsID0gaW9yZWFkMzIoXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRcXHRpZiAodmFsID09IE1CTEFaRV9HUkFOVEVEKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbisvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuXFxuKyAqIFNhZmUgYWZ0ZXIgYSBmYWlsZWQgY2xhaW06IGl0IGFsc28gY2xlYXJzIGEgcmVxdWVzdCB0aGF0IHdhcyBuZXZlciBncmFudGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gYnAtXFx1MDAzZWNwbGRfYWRhcDtcXG4rXFxuK1xcdGlmICghYWRhcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XFxuK1xcdGJwLVxcdTAwM2VjcGxkX2FkYXAgPSBOVUxMO1xcbitcXHRrZnJlZShicC1cXHUwMDNlY3BsZF9idWYpO1xcbitcXHRicC1cXHUwMDNlY3BsZF9idWYgPSBOVUxMO1xcbitcXHRpMmNfdW5sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xcbitcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENsYWltIHRoZSBUTUMgYnVzIGZvciBhIENQTEQgb3BlcmF0aW9uLiAgSG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIG92ZXJcXG4rICogdGhlIGhhbmRzaGFrZSBrZWVwcyBwdHBfb2NwX3JlYWRfZWVwcm9tKCksIHRoZSBudm1lbSBhdHRyaWJ1dGVzIGFuZCB0aGVcXG4rICogYXQyNCBzeXNmcyBmaWxlcyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkIGF3YXkgZnJvbSB0aGVcXG4rICogRUVQUk9Ncy4gIEEgZmlybXdhcmUgdXBsb2FkIGhvbGRzIGl0IGFjcm9zcyB0aGUgd2hvbGUgcHJlcGFyZS93cml0ZS9wb2xsXFxuKyAqIHNlcXVlbmNlLCBzbyBhbiBFRVBST00gcmVhZCBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFxuK1xcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2kyY19hZGFwX25yKSk7XFxuK1xcdGlmICghYWRhcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHQvKiBPbmUgc2NyYXRjaCBidWZmZXIgcGVyIGNsYWltIHJhdGhlciB0aGFuIHBlciB0cmFuc2ZlcjogYSBmaXJtd2FyZVxcbitcXHQgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGVcXG4rXFx0ICogYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIG9uZSBmb3IgZWFjaCAxNi1ieXRlIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRicC1cXHUwMDNlY3BsZF9idWYgPSBremFsbG9jKDIgKiBBRFZBX0NQTERfWEZFUl9NQVgsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJwLVxcdTAwM2VjcGxkX2J1Zikge1xcbitcXHRcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfYWRhcCA9IGFkYXA7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBTZWxlY3QgYSBtdXggY2hhbm5lbCwgb3IgZGVzZWxlY3QgYWxsIHdpdGggY2ggXFx1MDAzYyAwIC0gdGhlIHBvd2VyLW9uIHN0YXRlLlxcbisgKiBUaGUgbXV4IGlzIG9uIHRoZSBUTUMgYnVzLCBzbyB3aGF0IGl0IGlzIGxlZnQgc2V0IHRvIG5ldmVyIGFmZmVjdHMgdGhlXFxuKyAqIEVFUFJPTSBwYXRocy5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9tdXhfc2VsZWN0KHN0cnVjdCBwdHBfb2NwICpicCwgaW50IGNoKVxcbit7XFxuK1xcdHU4IHZhbCA9IChjaCBcXHUwMDNlPSAwKSA/IEJJVChjaCkgOiAwO1xcbitcXG4rXFx0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfTVVYX0FERFIsIHZhbCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFyZ3VtZW50IGJ5dGVzIHRoYXQgZm9sbG93IGFuIElTQyBvcGNvZGUuICBSZXR1cm5zIE5VTEwgd2l0aCBAbmFyZ3Mgc2V0XFxuKyAqIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHplcm86IGFkdmFfeDFfaTJjX3hmZXIoKSB6ZXJvZXMgdGhlIGJ1ZmZlci5cXG4rICovXFxuK3N0YXRpYyBjb25zdCB1OCAqYWR2YV94MV9jcGxkX2FyZ3ModTggY21kLCB1OCAqbmFyZ3MpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBlcmFzZV9jZmdbXSA9IHsgMHgwNCwgMHgwMCwgMHgwMCB9OyAvKiBjZmcgc2VjdG9yIG9ubHkgKi9cXG4rXFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgQ1BMRF9DTURfRU5fQ0ZHX1RQOlxcbitcXHRcXHQqbmFyZ3MgPSBzaXplb2YoZW5fY2ZnX3RwKTtcXG4rXFx0XFx0cmV0dXJuIGVuX2NmZ190cDtcXG4rXFx0Y2FzZSBDUExEX0NNRF9FUkFTRTpcXG4rXFx0XFx0Km5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7XFxuK1xcdFxcdHJldHVybiBlcmFzZV9jZmc7XFxuK1xcdGNhc2UgQ1BMRF9DTURfUkVTRVRfQUREUjpcXG4rXFx0Y2FzZSBDUExEX0NNRF9TRVRfRE9ORTpcXG4rXFx0XFx0Km5hcmdzID0gMztcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGNhc2UgQ1BMRF9DTURfRElTX0NGRzpcXG4rXFx0Y2FzZSBDUExEX0NNRF9SRUZSRVNIOlxcbitcXHRcXHQqbmFyZ3MgPSAyO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0Km5hcmdzID0gMDtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dyaXRlKHN0cnVjdCBwdHBfb2NwICpicCwgdTggY21kKVxcbit7XFxuK1xcdGNvbnN0IHU4ICphcmdzO1xcbitcXHR1OCBuYXJncztcXG4rXFxuK1xcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFxcdTAwMjZuYXJncyk7XFxuK1xcbitcXHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIGNtZCwgYXJncywgbmFyZ3MsIE5VTEwsIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBTZW5kIGEgNC1ieXRlIGNvbW1hbmQgdGhlbiByZWFkIGRhdGEgYmFjayB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBTVE9QXFxuKyAqIChMYXR0aWNlIGNvbWJpbmVkIHdyaXRlLVxcdTAwM2VyZXBlYXRlZC1TVEFSVC1cXHUwMDNlcmVhZCkuICBUd28gbWVzc2FnZXMgaW4gb25lXFxuKyAqIHRyYW5zZmVyIGlzIGV4YWN0bHkgdGhhdCwgc28gbm8gcHJvdG9jb2wtbWFuZ2xpbmcgZmxhZyBpcyBuZWVkZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChzdHJ1Y3QgcHRwX29jcCAqYnAsXFxuK1xcdFxcdFxcdFxcdCB1MzIgY21kX2JlLCB1OCAqb3V0LCB1OCBvdXRfbGVuKVxcbit7XFxuK1xcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xcbitcXG4rXFx0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgXFx1MDAyNmNtZCwgNCwgb3V0LCBvdXRfbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKnN0YXR1cylcXG4re1xcbitcXHR1OCBidWZbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfU1RBVFVTLCBidWYsIDQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuXFxuKyAqIFRoZSBkZWFkbGluZSBpcyBvbiB3YWxsIHRpbWUsIHNvIHRoZSBJMkMgdHJhbnNhY3Rpb25zIGNvdW50IGFnYWluc3QgaXQsXFxuKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHJlYWQgb25jZSBtb3JlIGFmdGVyIGl0IGV4cGlyZXMgYmVmb3JlIGdpdmluZyB1cC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoc3RydWN0IHB0cF9vY3AgKmJwLCB1bnNpZ25lZCBpbnQgbWF4X21zKVxcbit7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHRpbnQgZXJyLCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVycixcXG4rXFx0XFx0XFx0XFx0ZXJyIHx8IFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpIHx8XFxuK1xcdFxcdFxcdFxcdChzdGF0dXMgXFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpIHx8XFxuK1xcdFxcdFxcdFxcdCEoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSksXFxuK1xcdFxcdFxcdFxcdENQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdGJwLCBcXHUwMDI2c3RhdHVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpKVxcbitcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4rXFx0aWYgKGVyciB8fCAoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQSBzdGVwIGFib3J0ZWQgYnkgY2FuY2VsKCkgbXVzdCBiZSByZXBvcnRlZCBhcyBzdWNoLCBub3QgYXMgYSBIVyBlcnJvci4gKi9cXG4rc3RhdGljIGVudW0gZndfdXBsb2FkX2VyciBhZHZhX2NwbGRfZXJyKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCkgPyBGV19VUExPQURfRVJSX0NBTkNFTEVEXFxuK1xcdFxcdFxcdFxcdFxcdCAgOiBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWFkIHRoZSBMYXR0aWNlIGRldmljZSBJRCBvZiB0aGUgVEFQIENQTEQuICBJdCBpcyBhIGZpeGVkIHByb3BlcnR5IG9mXFxuKyAqIHRoZSBwYXJ0LCBzbyBjYWNoZSBpdCBhbmQgcGF5IHRoZSBidXMgYXJiaXRyYXRpb24gb25seSBvbmNlLiAgVGhlXFxuKyAqIExDTVhPM0xGLTIxMDAgSURDT0RFIGlzIDB4ZTEyYmMwNDMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKVxcbit7XFxuK1xcdHU4IGRhdGFbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoYnAtXFx1MDAzZWNwbGRfaWQpIHtcXG4rXFx0XFx0KmlkID0gYnAtXFx1MDAzZWNwbGRfaWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cXG4rXFx0cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcmVsZWFzZTtcXG4rXFx0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX0lELCBkYXRhLCA0KTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdGJwLVxcdTAwM2VjcGxkX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xcbitcXHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcXG4rcmVsZWFzZTpcXG4rXFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK291dDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdCppZCA9IGJwLVxcdTAwM2VjcGxkX2lkO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELlxcbisgKlxcbisgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiBcXFwiZG9uZT1cXHUwMDNjMHwxXFx1MDAzZSBidXN5PVxcdTAwM2MwfDFcXHUwMDNlIGZhaWxlZD1cXHUwMDNjMHwxXFx1MDAzZVxcXFxuXFxcIlxcbisgKi9cXG4rc3RhdGljIHNzaXplX3RcXG4rY3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHQgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHR1MzIgc3QgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovXFxuK1xcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlbGVhc2U7XFxuK1xcdHJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KTtcXG4rXFx0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XFxuK3JlbGVhc2U6XFxuK1xcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdHJldHVybiByZXQgPyByZXQgOiBzeXNmc19lbWl0KGJ1ZiwgXFxcImRvbmU9JXUgYnVzeT0ldSBmYWlsZWQ9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICEhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICEhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICEhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSk7XFxuK31cXG4rc3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTtcXG4rXFxuKy8qXFxuKyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLlxcbisgKlxcbisgKiBUaGUga2VybmVsIGZpcm13YXJlLXVwbG9hZCBzdWJzeXN0ZW0gKENPTkZJR19GV19VUExPQUQpIGV4cG9zZXM6XFxuKyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59XFxuKyAqIHdoZXJlIE4gaXMgdGhlIGluZGV4IG9mIHRoZSBvd25pbmcgb2NwTiBkZXZpY2UuXFxuKyAqIFVzZXJzcGFjZSB3cml0ZXMgdGhlIHJhdyBiaW5hcnkgcGFnZSBkYXRhIGRpcmVjdGx5IOKAlCBubyAvbGliL2Zpcm13YXJlL1xcbisgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLlxcbisgKlxcbisgKiBDYWxsYmFjayBzZXF1ZW5jZSBkcml2ZW4gYnkgdGhlIGZyYW1ld29yazpcXG4rICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaFxcbisgKiAgIHdyaXRlKCkgICAgICAgIC0gcHJvZ3JhbSBvbmUgMTYtYnl0ZSBwYWdlIHBlciBjYWxsXFxuKyAqICAgcG9sbF9jb21wbGV0ZSgpLSBzZXQgRE9ORSwgUkVGUkVTSCwgd2FpdCBmb3IgQ1BMRCB0byByZWJvb3RcXG4rICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrXFxuKyAqICAgY2xlYW51cCgpICAgICAgLSByZWxlYXNlIGJ1cyByZXNvdXJjZXMgKGNhbGxlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUpXFxuKyAqL1xcbitzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXFxuK2FkdmFfY3BsZF9wcmVwYXJlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsIHUzMiBzaXplKVxcbit7XFxuK1xcdGVudW0gZndfdXBsb2FkX2VyciByZXQgPSBGV19VUExPQURfRVJSX05PTkU7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cXHUwMDNlZGRfaGFuZGxlO1xcbitcXG4rXFx0LyogRG8gbm90IGNsZWFyIGNwbGRfY2FuY2VsIGhlcmU6IGZ3X3VwbG9hZF9zdGFydCgpIHF1ZXVlcyB0aGUgd29ya1xcbitcXHQgKiBiZWZvcmUgdGhpcyBydW5zLCBzbyBhIGNhbmNlbCBtYXkgYWxyZWFkeSBoYXZlIGFycml2ZWQuICBJdCBpc1xcbitcXHQgKiBjbGVhcmVkIG9uY2UgdGhlIHVwbG9hZCBpcyBvdmVyLCBvbiBldmVyeSBleGl0IGJlbG93IGFuZCBpblxcbitcXHQgKiBjbGVhbnVwKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNpemUgfHwgc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7XFxuK1xcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfYnVzX2NsYWltKGJwKSkge1xcbitcXHRcXHRyZXQgPSBGV19VUExPQURfRVJSX1RJTUVPVVQ7XFxuK1xcdFxcdGdvdG8gZXJyX3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCkpIHtcXG4rXFx0XFx0cmV0ID0gRldfVVBMT0FEX0VSUl9IV19FUlJPUjtcXG4rXFx0XFx0Z290byBlcnJfcmVsZWFzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBpc3N1aW5nIEVOX0NGR19UUCwgbm90IGFmdGVyIGl0IGNvbXBsZXRlczogdGhlIENQTEQgbWF5XFxuK1xcdCAqIGhhdmUgZW50ZXJlZCBjb25maWd1cmF0aW9uIG1vZGUgZXZlbiBpZiB0aGUgd3JpdGUgcmVwb3J0cyBhbiBlcnJvclxcbitcXHQgKiBvciB0aGUgd2FpdCBiZWxvdyB0aW1lcyBvdXQsIGFuZCBlcnJfZGVzZWxlY3Qgb25seSBzZW5kcyBESVNfQ0ZHXFxuK1xcdCAqIHdoZW4gdGhpcyBpcyBzZXQuICBBIERJU19DRkcgdG8gYSBkZXZpY2UgdGhhdCBuZXZlciBlbnRlcmVkIHRoZVxcbitcXHQgKiBtb2RlIGlzIGhhcm1sZXNzOyBsZWF2aW5nIGl0IGVuYWJsZWQgaXMgbm90LlxcbitcXHQgKi9cXG4rXFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSB0cnVlO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRU5fQ0ZHX1RQKSB8fFxcbitcXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApKSB7XFxuK1xcdFxcdHJldCA9IGFkdmFfY3BsZF9lcnIoYnApO1xcbitcXHRcXHRnb3RvIGVycl9kZXNlbGVjdDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpKSB7XFxuK1xcdFxcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XFxuK1xcdFxcdGdvdG8gZXJyX2Rlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FUkFTRSkgfHxcXG4rXFx0ICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxNTAwMCkpIHtcXG4rXFx0XFx0cmV0ID0gYWR2YV9jcGxkX2VycihicCk7XFxuK1xcdFxcdGdvdG8gZXJyX2Rlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCkpIHtcXG4rXFx0XFx0cmV0ID0gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDtcXG4rXFx0XFx0Z290byBlcnJfZGVzZWxlY3Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpKSB7XFxuK1xcdFxcdHJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XFxuK1xcdFxcdGdvdG8gZXJyX2Rlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBjbGVhbnVwKCkgdW5sb2NrcyBldmVyeXRoaW5nLiAgZndfdXBsb2FkX21haW4oKSBvbmx5IHBhaXJzIGl0IHdpdGhcXG4rXFx0ICogYSBwcmVwYXJlKCkgdGhhdCBzdWNjZWVkZWQsIHNvIHRoZSBlcnJvciBwYXRocyBiZWxvdyB1bmxvY2sgaGVyZVxcbitcXHQgKiBpbnN0ZWFkOyBoYW5kIHRoZSBjb250ZXh0IHRvIGNsZWFudXAoKSBmb3Igc3BhcnNlJ3MgYmVuZWZpdC5cXG4rXFx0ICovXFxuK1xcdF9fcmVsZWFzZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XFxuK1xcbitlcnJfZGVzZWxlY3Q6XFxuK1xcdGlmIChicC1cXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSkge1xcbitcXHRcXHRhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0RJU19DRkcpO1xcbitcXHRcXHRicC1cXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xcbitcXHR9XFxuK1xcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xcbitlcnJfcmVsZWFzZTpcXG4rXFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK2Vycl91bmxvY2s6XFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnJcXG4rYWR2YV9jcGxkX3dyaXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsXFxuK1xcdFxcdHUzMiBvZmZzZXQsIHUzMiBzaXplLCB1MzIgKndyaXR0ZW4pXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVxcdTAwM2VkZF9oYW5kbGU7XFxuK1xcdHU4IGFyZ3NbMyArIENQTERfUEFHRV9TSVpFXSA9IHsgMHgwMCwgMHgwMCwgMHgwMSB9O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCkpXFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0NBTkNFTEVEO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzYyBDUExEX1BBR0VfU0laRSlcXG4rXFx0XFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSU5WQUxJRF9TSVpFO1xcbitcXG4rXFx0bWVtY3B5KFxcdTAwMjZhcmdzWzNdLCBkYXRhICsgb2Zmc2V0LCBDUExEX1BBR0VfU0laRSk7XFxuK1xcbitcXHRpZiAoYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXFxuK1xcdFxcdFxcdCAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKSB8fFxcbitcXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCkpXFxuK1xcdFxcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcXG4rXFxuK1xcdCp3cml0dGVuID0gQ1BMRF9QQUdFX1NJWkU7XFxuK1xcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnJcXG4rYWR2YV9jcGxkX3BvbGxfY29tcGxldGUoc3RydWN0IGZ3X3VwbG9hZCAqZndsKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cXHUwMDNlZGRfaGFuZGxlO1xcbitcXHRpbnQgZXJyO1xcbitcXHR1MzIgc3Q7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsKSlcXG4rXFx0XFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XFxuK1xcbitcXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSkgfHxcXG4rXFx0ICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKSlcXG4rXFx0XFx0cmV0dXJuIGFkdmFfY3BsZF9lcnIoYnApO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KSB8fCAhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkpXFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVGUkVTSCkpXFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xcbitcXG4rXFx0LyogUkVGUkVTSCByZWJvb3RzIHRoZSBDUExEIG91dCBvZiBjb25maWd1cmF0aW9uIG1vZGUsIHNvIGNsZWFudXAoKVxcbitcXHQgKiBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZmFpbC5cXG4rXFx0ICovXFxuK1xcdGJwLVxcdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XFxuK1xcbitcXHQvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZyBhdCB0aGlzIHBvaW50LCBzbyBhIHNlZ21lbnQgdGhhdFxcbitcXHQgKiBpcyBub3QgYmFjayB5ZXQgbXVzdCBub3QgYmUgcmVwb3J0ZWQgYXMgYSBmYWlsZWQgdXBkYXRlOiByZXRyeSB0aGVcXG4rXFx0ICogcmVzZWxlY3QgaW5zdGVhZCBvZiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcCgxNTAwKTtcXG4rXFx0aWYgKHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXFxuK1xcdFxcdFxcdCAgICAgIDMwMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcXG4rXFx0XFx0XFx0ICAgICAgYnAsIEFEVkFfTVVYX0NIQU5ORUwpKVxcbitcXHRcXHRyZXR1cm4gRldfVVBMT0FEX0VSUl9USU1FT1VUO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAzMDAwKSlcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIDogRldfVVBMT0FEX0VSUl9USU1FT1VUO1xcbitcXG4rXFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfTk9ORTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rYWR2YV9jcGxkX2NhbmNlbChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVxcdTAwM2VkZF9oYW5kbGU7XFxuK1xcbitcXHRXUklURV9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK2FkdmFfY3BsZF9jbGVhbnVwKHN0cnVjdCBmd191cGxvYWQgKmZ3bClcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXFx1MDAzZWRkX2hhbmRsZTtcXG4rXFxuK1xcdF9fYWNxdWlyZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFx0LyogaGVsZCBzaW5jZSBwcmVwYXJlKCkgcmV0dXJuZWQgb2sgKi9cXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcbitcXHRpZiAoYnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUpIHtcXG4rXFx0XFx0YWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9ESVNfQ0ZHKTtcXG4rXFx0XFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcXG4rXFx0fVxcbitcXHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcXG4rXFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZndfdXBsb2FkX29wcyBhZHZhX2NwbGRfdXBsb2FkX29wcyA9IHtcXG4rXFx0LnByZXBhcmVcXHQgPSBhZHZhX2NwbGRfcHJlcGFyZSxcXG4rXFx0LndyaXRlXFx0XFx0ID0gYWR2YV9jcGxkX3dyaXRlLFxcbitcXHQucG9sbF9jb21wbGV0ZVxcdCA9IGFkdmFfY3BsZF9wb2xsX2NvbXBsZXRlLFxcbitcXHQuY2FuY2VsXFx0XFx0ID0gYWR2YV9jcGxkX2NhbmNlbCxcXG4rXFx0LmNsZWFudXBcXHQgPSBhZHZhX2NwbGRfY2xlYW51cCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcXG4gXFx0XFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxcbkBAIC00Mjc0LDYgKzQ5MzIsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0cixcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsXFxuK1xcdFxcdTAwMjZkZXZfYXR0cl9jcGxkX3N0YXR1cy5hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbiBcXG5AQCAtNDg2Nyw2ICs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdC8qIE11c3QgY29tZSBmaXJzdDogY2FuY2VscyBhbmQgZmx1c2hlcyBhbiBpbi1mbGlnaHQgdXBsb2FkIHdoaWxlIHRoZVxcbitcXHQgKiBJMkMgY29udHJvbGxlciBpcyBzdGlsbCB1cCwgYW5kIGRyb3BzIGNwbGRfbG9jayBzbyBhIGNwbGRfc3RhdHVzXFxuK1xcdCAqIHJlYWRlciBjYW5ub3Qgc3RhbGwgcHRwX29jcF9hdHRyX2dyb3VwX2RlbCgpIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGJwLVxcdTAwM2VjcGxkX2Z3X3VwbG9hZCkge1xcbitcXHRcXHRmaXJtd2FyZV91cGxvYWRfdW5yZWdpc3RlcihicC1cXHUwMDNlY3BsZF9md191cGxvYWQpO1xcbitcXHRcXHRicC1cXHUwMDNlY3BsZF9md191cGxvYWQgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRwdHBfb2NwX2RlYnVnZnNfcmVtb3ZlX2RldmljZShicCk7XFxuIFxcdHB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTtcXG4gXFx0cHRwX29jcF9hdHRyX2dyb3VwX2RlbChicCk7XFxuQEAgLTQ5MDQsNiArNTU3Miw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcXG4gXFx0XFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cXHUwMDNlaTJjX2Nsayk7XFxuIFxcdGlmIChicC1cXHUwMDNlbl9pcnFzKVxcbiBcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhicC1cXHUwMDNlcGRldik7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbiBcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2YnAtXFx1MDAzZWRldik7XFxuIH1cXG4gXFxuQEAgLTUwODAsNiArNTc0OSwxNyBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0X2Rpc2FibGU7XFxuIFxcbitcXHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXFxuK1xcdCAqIHNvIG11dGV4X2Rlc3Ryb3koKSBhbHdheXMgcnVucyBvbiBhbiBpbml0aWFsaXNlZCBtdXRleC5cXG4rXFx0ICogTXVzdCBhbHNvIGJlIGJlZm9yZSBwdHBfb2NwX3JlZ2lzdGVyX3Jlc291cmNlcygpOiB0aGUgSTJDIGJ1c1xcbitcXHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxcbitcXHQgKiByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgYWRhcHRlciBudW1iZXIgaW4gY3BsZF9pMmNfYWRhcF9ucjsgdGhlXFxuK1xcdCAqIC0xIHNlbnRpbmVsIGJlbG93IG11c3QgYWxyZWFkeSBiZSB3cml0dGVuIHNvIHRoYXQgYSBub3RpZmllclxcbitcXHQgKiBmaXJpbmcgZHVyaW5nIHJlZ2lzdHJhdGlvbiBpcyBuZXZlciBvdmVyd3JpdHRlbiBieSB0aGlzIGluaXQuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIgPSAtMTtcXG4rXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XFxuIFxcbiBcXHQvKiBjb21wYXQgbW9kZS5cXG5AQCAtNTIxOSwxMSArNTg5OSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIFxcbiBmb3VuZDpcXG4gXFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4tXFx0aWYgKGFkZClcXG4rXFx0aWYgKGFkZCkge1xcbiBcXHRcXHRwdHBfb2NwX3N5bWxpbmsoYnAsIGNoaWxkLCBcXFwiaTJjXFxcIik7XFxuLVxcdGVsc2VcXG4rXFx0XFx0LyogQ2FjaGUgYWRhcHRlciBucjsgdXNlZCBieSB0aGUgQ1BMRCBzdGF0dXMvaWQvdXBsb2FkIHBhdGhzXFxuK1xcdFxcdCAqIGZvciByZWZlcmVuY2UtY291bnRlZCB1bmJpbmQtc2FmZSBhZGFwdGVyIGFjY2Vzcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXFx1MDAzZW5yKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgLTEpOyAvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlICovXFxuIFxcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZicC1cXHUwMDNlZGV2LmtvYmosIFxcXCJpMmNcXFwiKTtcXG4tXFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM2OjUwLjAyODY5OTU3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY3NjA1NjAwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGIyNWU0ZWYyODQzZGMzZWFmMjc4ZDZmNTlmZWM3NzA0YmY1MzJiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTY6MzY6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNDFlZWFkZDQ2MzMwMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbkBAIC0xMSw2ICsxMSwzMCBAQCBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG4gRGVzY3JpcHRpb246XHRUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkXG4gXHRcdHJlZ2lzdGVyZWQuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXG4rRGF0ZTpcdFx0SnVseSAyMDI2XG4rQ29udGFjdDpcdFNhZ2kgTWFpbW9uIFx1MDAzY21haW1vbi5zYWdpQGdtYWlsLmNvbVx1MDAzZVxuK0Rlc2NyaXB0aW9uOlx0KFJPLCByb290IG9ubHkpIFRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELCBpblxuK1x0XHRodW1hbi1yZWFkYWJsZSBmb3JtOlxuK1xuK1x0XHQgIGRvbmU9XHUwMDNjMHwxXHUwMDNlIGJ1c3k9XHUwMDNjMHwxXHUwMDNlIGZhaWxlZD1cdTAwM2MwfDFcdTAwM2VcbitcbitcdFx0T25seSBwcmVzZW50IG9uIEFEVkEgeDEgVEFQIGJvYXJkcyAoUENJIElEIDB4YWQ1YToweDA0MTApLlxuK1xuK1x0XHRkb25lPTEgaW5kaWNhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBzdWNjZXNzZnVsbHlcbitcdFx0cHJvZ3JhbW1lZCBhbmQgaXMgYWN0aXZlLiAgYnVzeT0xIG1lYW5zIGFuIGludGVybmFsIG9wZXJhdGlvblxuK1x0XHRpcyBpbiBwcm9ncmVzcy4gIGZhaWxlZD0xIG1lYW5zIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkLlxuK1xuK1x0XHRBIHJlYWQgYXJiaXRyYXRlcyBmb3IgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZCByZXByb2dyYW1zIHRoZVxuK1x0XHRvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlXG4rXHRcdElEIG9mIHRoZSBDUExEIGlzIHJlcG9ydGVkIGFzIHRoZSBmaXhlZCBcImNwbGQuaWRcIiB2ZXJzaW9uIGJ5XG4rXHRcdGRldmxpbmsgZGV2IGluZm8uXG4rXG4rXHRcdFRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWxcbitcdFx0ZmlybXdhcmUtdXBsb2FkIGludGVyZmFjZSwgcmVnaXN0ZXJlZCBwZXIgY2FyZCBhdDpcbitcdFx0L3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi9cbitcdFx0d2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS5cbitcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vYXZhaWxhYmxlX2Nsb2NrX3NvdXJjZXNcbiBEYXRlOlx0XHRTZXB0ZW1iZXIgMjAyMVxuIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9LY29uZmlnIGIvZHJpdmVycy9wdHAvS2NvbmZpZ1xuaW5kZXggZmViNTBmOGNjNDA2YS4uMjRmMDQ3YzM3ZTRjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL0tjb25maWdcbisrKyBiL2RyaXZlcnMvcHRwL0tjb25maWdcbkBAIC0yMTksNiArMjE5LDggQEAgY29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgQ1JDMTZcbiBcdHNlbGVjdCBEUExMXG4rXHRzZWxlY3QgRldfTE9BREVSXG4rXHRzZWxlY3QgRldfVVBMT0FEXG4gXHRoZWxwXG4gXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuaW5kZXggM2QyNmVjMWY3YjllYy4uODZkMWMxYTMxMWNjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXG5AQCAtMjAsMTAgKzIwLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpL2FsdGVyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICs4OSw3IEBAIHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XG4gXHR1OFx0XHRcdFx0c2lnbmFsc19ucjtcbiBcdHU4XHRcdFx0XHRmcmVxX2luX25yO1xuIFx0Y29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwXHQqYXR0cl9ncm91cHM7XG4rXHRib29sXHRcdFx0XHRoYXNfY3BsZDsgLyogeDE6IHN1cHBvcnRzIENQTEQgZmlybXdhcmUgdXBsb2FkICovXG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVx0XHRCSVQoMClcbkBAIC0xNjMsNyArMTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcbiBcdHUzMlx0Z3BpbzE7XG4gXHR1MzJcdF9fcGFkMDtcbiBcdHUzMlx0Z3BpbzI7XG4tXHR1MzJcdF9fcGFkMTtcbitcdC8qIGFkdmFfeDE6IEkyQyBidXMgb3duZXJzaGlwIHJlZ2lzdGVyOyByZXNlcnZlZCBvbiBvdGhlciB2YXJpYW50cyAqL1xuK1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiArNDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHtcbiBcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuIFx0aW50IHNpZ25hbHNfbnI7XG4gXHRpbnQgZnJlcV9pbl9ucjtcbitcdC8qIGFkdmFfeDEgQ1BMRCBJMkMgKGludGVybmFsIHVzZSBvbmx5KSAqL1xuK1x0c3RydWN0IG11dGV4XHRcdGNwbGRfbG9jazsgICAgICAgICAgICAvKiBzZXJpYWxpc2VzIENQTEQgb3BlcmF0aW9ucyAqL1xuK1x0aW50XHRcdFx0Y3BsZF9pMmNfYWRhcF9ucjsgICAgIC8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi9cbitcdHN0cnVjdCBpMmNfYWRhcHRlclx0KmNwbGRfYWRhcDsgICAgICAgICAgIC8qIGNsYWltZWQgYWRhcHRlcjsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovXG4rXHR1OFx0XHRcdCpjcGxkX2J1ZjsgICAgICAgICAgICAvKiBETUEtc2FmZSBzY3JhdGNoOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cbitcdHUzMlx0XHRcdGNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovXG4rXHRib29sXHRcdFx0aGFzX2NwbGQ7ICAgICAgICAgICAgIC8qIHgxIFRBUCBDUExEIHByZXNlbnQgKi9cbitcdHN0cnVjdCBmd191cGxvYWRcdCpjcGxkX2Z3X3VwbG9hZDsgICAgICAvKiBmaXJtd2FyZSB1cGxvYWQgaGFuZGxlOyBOVUxMIGlmIGFic2VudCAqL1xuK1x0Ym9vbFx0XHRcdGNwbGRfY2FuY2VsOyAgICAgICAgICAvKiBjYW5jZWxsYXRpb24gcmVxdWVzdGVkICovXG4rXHRib29sXHRcdFx0Y3BsZF9pbl9jb25maWdfbW9kZTsgIC8qIEVOX0NGR19UUCBpc3N1ZWQgYnV0IG5vdCB5ZXQgUkVGUkVTSCdkICovXG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXHRCSVQoMClcbkBAIC00NDksOCArNDY1LDExIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hcnRfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuIFxuIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X3VwbG9hZF9vcHMgYWR2YV9jcGxkX3VwbG9hZF9vcHM7XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3NtYV9vcDtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wO1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2RldmljZV9pZChzdHJ1Y3QgcHRwX29jcCAqYnAsIHUzMiAqaWQpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG5AQCAtMTI3Myw2ICsxMjkyLDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcbiBcdFx0XHQuc2lnbmFsc19uciAgID0gNCxcbiBcdFx0XHQuZnJlcV9pbl9uciAgID0gNCxcbiBcdFx0XHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXG4rXHRcdFx0Lmhhc19jcGxkICAgICA9IHRydWUsXG4gXHRcdH0sXG4gXHR9LFxuIFx0eyB9XG5AQCAtMjE4NSw2ICsyMjA1LDE5IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRpZiAoYnAtXHUwMDNlaGFzX2NwbGQpIHtcbitcdFx0dTMyIGlkO1xuK1xuK1x0XHRlcnIgPSBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKGJwLCBcdTAwMjZpZCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0c3ByaW50ZihidWYsIFwiMHglMDh4XCIsIGlkKTtcbitcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgXCJjcGxkLmlkXCIsIGJ1Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTk5LDYgKzMyMzIsMzAgQEAgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0cHRwX29jcF9zbWFfaW5pdChicCk7XG4gXG4rXHRicC1cdTAwM2VoYXNfY3BsZCA9IGluZm8tXHUwMDNlaGFzX2NwbGQ7XG4rXHRpZiAoYnAtXHUwMDNlaGFzX2NwbGQpIHtcbitcdFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xuK1x0XHRjb25zdCBjaGFyICpuYW1lO1xuK1xuK1x0XHQvKiBPbmUgaW5zdGFuY2UgcGVyIGNhcmQsIG51bWJlcmVkIGxpa2UgdGhlIG9jcE4gZGV2aWNlLlxuK1x0XHQgKiBmaXJtd2FyZV91cGxvYWRfcmVnaXN0ZXIoKSBrZWVwcyB0aGUgcG9pbnRlciByYXRoZXIgdGhhblxuK1x0XHQgKiBjb3B5aW5nIHRoZSBzdHJpbmcsIHNvIGl0IGhhcyB0byBvdXRsaXZlIHRoZSByZWdpc3RyYXRpb24uXG4rXHRcdCAqL1xuK1x0XHRuYW1lID0gZGV2bV9rYXNwcmludGYoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYsIEdGUF9LRVJORUwsXG4rXHRcdFx0XHQgICAgICBcImFkdmEtY3BsZC4lZFwiLCBicC1cdTAwM2VpZCk7XG4rXHRcdGlmICghbmFtZSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdFx0ZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0ICAgICAgIG5hbWUsIFx1MDAyNmFkdmFfY3BsZF91cGxvYWRfb3BzLCBicCk7XG4rXHRcdGlmIChJU19FUlIoZndsKSlcbitcdFx0XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkNQTEQgZmlybXdhcmUgdXBsb2FkIHVuYXZhaWxhYmxlOiAlcGVcXG5cIixcbitcdFx0XHRcdCBmd2wpO1xuK1x0XHRlbHNlXG4rXHRcdFx0YnAtXHUwMDNlY3BsZF9md191cGxvYWQgPSBmd2w7XG4rXHR9XG4rXG4gXHRyZXR1cm4gcHRwX29jcF9pbml0X2Nsb2NrKGJwLCBcdTAwMjZpbmZvLVx1MDAzZXNlcnZvKTtcbiB9XG4gXG5AQCAtNDIyNiw2ICs0MjgzLDYwNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHtcbiBcdHsgfSxcbiB9O1xuIFxuKy8qXG4rICogSW50ZXJuYWwgaGVscGVycyBmb3IgdGhlIGFkdmFfeDEgVEFQIENQTEQgKExhdHRpY2UgTENNWE8zTEYtMjEwMCkuXG4rICpcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cbisgKiBUaGUgaTJjX2J1c19jdHJsIGhhbmRzaGFrZSByZS1yb3V0ZXMgd2hhdCBlYWNoIG9uZSBpcyB3aXJlZCB0bzpcbisgKlxuKyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVx1MDAzZSBUTUMgb3IgTS4yLCBNQidzIGNob2ljZVxuKyAqICAgZ3JhbnQgMTogIDB4MTUwMDAwIC1cdTAwM2UgVE1DIGJ1cyAgICAgMHgxMjAwMDAgLVx1MDAzZSBNLjJcbisgKlxuKyAqIFRoZSBQQ0E5NTQ4IGF0IDB4NzQgYW5kIHRoZSBDUExEIGF0IDB4NDAgYmVoaW5kIGl0cyBjaGFubmVsIDAgc2l0IG9uXG4rICogdGhlIFRNQyBidXMsIHNvIHRoZXkgYXJlIHJlYWNoYWJsZSBvbmx5IHdoaWxlIHRoZSBncmFudCBpcyBoZWxkLiAgRm9yXG4rICogdGhhdCBzYW1lIHdpbmRvdyB0aGUgRUVQUk9NcyBhcmUgbm90IGJlaGluZCB0aGUgYWRhcHRlciBhdCBhbGwsIHNvIGFcbisgKiBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2sgYW5kIHRoZSBpMmMgYWRhcHRlciBsb2NrIGFjcm9zcyBpdCB0b1xuKyAqIGtlZXAgdGhlIEVFUFJPTSBhbmQgbnZtZW0gcGF0aHMgb2ZmIHRoZSBjb250cm9sbGVyLlxuKyAqXG4rICogTm8gcmF3IEkyQyBhY2Nlc3MgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG9ubHkgdGhlIGF0dHJpYnV0ZXMgYmVsb3cuXG4rICovXG4rXG4rI2RlZmluZSBBRFZBX01VWF9BRERSICAgICAweDc0XG4rI2RlZmluZSBBRFZBX0NQTERfQUREUiAgICAweDQwXG4rI2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXG4rXG4rLyogTG9uZ2VzdCBjb21tYW5kIG9yIHJlcGx5OyBib3VuZHMgZWFjaCBoYWxmIG9mIHRoZSBwZXItY2xhaW0gc2NyYXRjaC4gKi9cbisjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxuK1xuKyNkZWZpbmUgTUJMQVpFX1JFUVVFU1QgICAgMHgwMDAwYWFhYVVcbisjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXG4rI2RlZmluZSBNQkxBWkVfUkVMRUFTRSAgICAweDU1NTUwMDAwVVxuKyNkZWZpbmUgTUJMQVpFX1JFVFJJRVMgICAgMjAwXG4rI2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxuK1xuKy8qIExhdHRpY2UgTENNWE8zTEYgSVNDIGNvbW1hbmQgY29kZXMgKi9cbisjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqL1xuKyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcbisjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFXG4rI2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NlxuKyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcbisjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFXG4rI2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OVxuKyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XG4rI2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi9cbitcbisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAoTGF0dGljZSBMQ01YTzNMRiBkYXRhc2hlZXQpICovXG4rI2RlZmluZSBDUExEX1NUQVRVU19ET05FICAgQklUKDgpXG4rI2RlZmluZSBDUExEX1NUQVRVU19CVVNZICAgQklUKDEyKVxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRkFJTEVEIEJJVCgxMylcbitcbisvKlxuKyAqIGFkdmFfeDFfaTJjX3hmZXIoKSAtIGlzc3VlIGEgc2luZ2xlIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1cy5cbisgKlxuKyAqIFdyaXRlcyBAY21kIHdoZW4gaXQgaXMgbm90IG5lZ2F0aXZlLCBmb2xsb3dlZCBieSBAd2xlbiBieXRlcyBvZiBAd2RhdGEsXG4rICogdGhlbiByZWFkcyBAcmxlbiBieXRlcyBpZiBhc2tlZC4gIEEgTlVMTCBAd2RhdGEgc2VuZHMgemVyb3MuXG4rICpcbisgKiBUaGUgbWVzc2FnZSBpcyBhc3NlbWJsZWQgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIHRha2VuIGJ5XG4rICogYWR2YV94MV9idXNfY2xhaW0oKSwgd2hpY2ggdGhlIFhpbGlueCBjb250cm9sbGVyIG5lZWRzIGZvciBETUEgc2FmZXR5OlxuKyAqIGFuIG9wY29kZSBhbmQgaXRzIGFyZ3VtZW50cyBhcmUgY29waWVkIGV4YWN0bHkgb25jZSwgYW5kIGEgZmlybXdhcmVcbisgKiB1cGxvYWQgY29zdHMgb25lIGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gb25lIHBlciBwYWdlLlxuKyAqXG4rICogQ2FsbGVyIG11c3QgaG9sZCB0aGF0IGNsYWltLCBoZW5jZSBfX2kyY190cmFuc2ZlcigpIG92ZXIgaTJjX3RyYW5zZmVyKCkuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbitcdFx0XHQgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sXG4rXHRcdFx0ICAgIHZvaWQgKnJkYXRhLCB1OCBybGVuKVxuK3tcbitcdHU4ICp3YnVmLCAqcmJ1ZjtcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbitcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4rXHRpbnQgbm1zZ3MgPSAwLCByZXQ7XG4rXHR1MTYgaGRyID0gY21kIFx1MDAzZT0gMDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4rXHRpZiAoIWFkYXAgfHwgIWJwLVx1MDAzZWNwbGRfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGlmIChoZHIgKyB3bGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiBcdTAwM2UgQURWQV9DUExEX1hGRVJfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHdidWYgPSBicC1cdTAwM2VjcGxkX2J1ZjtcbitcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiArIEFEVkFfQ1BMRF9YRkVSX01BWDtcbitcbitcdGlmIChoZHIgKyB3bGVuKSB7XG4rXHRcdGlmIChoZHIpXG4rXHRcdFx0d2J1ZlswXSA9IGNtZDtcbitcdFx0aWYgKHdkYXRhKVxuK1x0XHRcdG1lbWNweSh3YnVmICsgaGRyLCB3ZGF0YSwgd2xlbik7XG4rXHRcdGVsc2VcbitcdFx0XHRtZW1zZXQod2J1ZiArIGhkciwgMCwgd2xlbik7XG4rXHRcdG1zZ3Nbbm1zZ3MrK10gPSAoc3RydWN0IGkyY19tc2cpe1xuK1x0XHRcdC5hZGRyICA9IGFkZHIsXG4rXHRcdFx0LmZsYWdzID0gSTJDX01fRE1BX1NBRkUsXG4rXHRcdFx0LmxlbiAgID0gaGRyICsgd2xlbixcbitcdFx0XHQuYnVmICAgPSB3YnVmLFxuK1x0XHR9O1xuK1x0fVxuK1x0aWYgKHJsZW4pIHtcbitcdFx0bXNnc1tubXNncysrXSA9IChzdHJ1Y3QgaTJjX21zZyl7XG4rXHRcdFx0LmFkZHIgID0gYWRkcixcbitcdFx0XHQuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX0RNQV9TQUZFLFxuK1x0XHRcdC5sZW4gICA9IHJsZW4sXG4rXHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbitcdFx0fTtcbitcdH1cbitcbitcdHJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcbitcdGlmIChyZXQgIT0gbm1zZ3MpXG4rXHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4rXG4rXHRpZiAocmRhdGEgXHUwMDI2XHUwMDI2IHJsZW4pXG4rXHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0aWYgKGJwLVx1MDAzZXBwc19zZWxlY3QpXG4rXHRcdGlvd3JpdGUzMihNQkxBWkVfUkVMRUFTRSwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK31cbitcbisvKiBBY3F1aXJlIHRoZSBzaGFyZWQgSTJDIGJ1cyBmcm9tIHRoZSBNaWNyb0JsYXplIGZpcm13YXJlLiAgUmV0dXJucyB3aXRoIG5vXG4rICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhXG4rICogc2VnbWVudCB0byBhIGhvc3QgdGhhdCBoYXMgZ2l2ZW4gdXAgd2FpdGluZyBmb3IgaXQuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWJwLVx1MDAzZXBwc19zZWxlY3QpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0LyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2tcbitcdCAqIGtlZXBzIGxpdmUgb25lcyBvdXQuICBUaGUgcmVhZCBiYWNrIG9ubHkgZmx1c2hlcyB0aGUgcG9zdGVkIHdyaXRlLlxuK1x0ICovXG4rXHRpb3dyaXRlMzIoMCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0aW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1xuK1x0aW93cml0ZTMyKE1CTEFaRV9SRVFVRVNULCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQkxBWkVfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHVzbGVlcF9yYW5nZShNQkxBWkVfUkVUUllfVVMsIE1CTEFaRV9SRVRSWV9VUyArIDEwMDApO1xuK1x0XHR2YWwgPSBpb3JlYWQzMihcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4rXHRcdGlmICh2YWwgPT0gTUJMQVpFX0dSQU5URUQpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTtcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbisvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuXG4rICogU2FmZSBhZnRlciBhIGZhaWxlZCBjbGFpbTogaXQgYWxzbyBjbGVhcnMgYSByZXF1ZXN0IHRoYXQgd2FzIG5ldmVyIGdyYW50ZWQuXG4rICovXG4rc3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gYnAtXHUwMDNlY3BsZF9hZGFwO1xuK1xuK1x0aWYgKCFhZGFwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTtcbitcdGJwLVx1MDAzZWNwbGRfYWRhcCA9IE5VTEw7XG4rXHRrZnJlZShicC1cdTAwM2VjcGxkX2J1Zik7XG4rXHRicC1cdTAwM2VjcGxkX2J1ZiA9IE5VTEw7XG4rXHRpMmNfdW5sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xuK1x0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuK31cbitcbisvKlxuKyAqIENsYWltIHRoZSBUTUMgYnVzIGZvciBhIENQTEQgb3BlcmF0aW9uLiAgSG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIG92ZXJcbisgKiB0aGUgaGFuZHNoYWtlIGtlZXBzIHB0cF9vY3BfcmVhZF9lZXByb20oKSwgdGhlIG52bWVtIGF0dHJpYnV0ZXMgYW5kIHRoZVxuKyAqIGF0MjQgc3lzZnMgZmlsZXMgb2ZmIHRoZSBjb250cm9sbGVyIHdoaWxlIGl0IGlzIHJvdXRlZCBhd2F5IGZyb20gdGhlXG4rICogRUVQUk9Ncy4gIEEgZmlybXdhcmUgdXBsb2FkIGhvbGRzIGl0IGFjcm9zcyB0aGUgd2hvbGUgcHJlcGFyZS93cml0ZS9wb2xsXG4rICogc2VxdWVuY2UsIHNvIGFuIEVFUFJPTSByZWFkIGJsb2NrcyBmb3IgYXMgbG9uZyBhcyBwcm9ncmFtbWluZyB0YWtlcy5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1xuK1x0YWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikpO1xuK1x0aWYgKCFhZGFwKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdC8qIE9uZSBzY3JhdGNoIGJ1ZmZlciBwZXIgY2xhaW0gcmF0aGVyIHRoYW4gcGVyIHRyYW5zZmVyOiBhIGZpcm13YXJlXG4rXHQgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGVcbitcdCAqIGFsbG9jYXRpb24gaW5zdGVhZCBvZiBvbmUgZm9yIGVhY2ggMTYtYnl0ZSBwYWdlLlxuK1x0ICovXG4rXHRicC1cdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJwLVx1MDAzZWNwbGRfYnVmKSB7XG4rXHRcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbitcdGJwLVx1MDAzZWNwbGRfYWRhcCA9IGFkYXA7XG4rXG4rXHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcbitcdGlmIChyZXQpXG4rXHRcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogU2VsZWN0IGEgbXV4IGNoYW5uZWwsIG9yIGRlc2VsZWN0IGFsbCB3aXRoIGNoIFx1MDAzYyAwIC0gdGhlIHBvd2VyLW9uIHN0YXRlLlxuKyAqIFRoZSBtdXggaXMgb24gdGhlIFRNQyBidXMsIHNvIHdoYXQgaXQgaXMgbGVmdCBzZXQgdG8gbmV2ZXIgYWZmZWN0cyB0aGVcbisgKiBFRVBST00gcGF0aHMuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX211eF9zZWxlY3Qoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgY2gpXG4re1xuK1x0dTggdmFsID0gKGNoIFx1MDAzZT0gMCkgPyBCSVQoY2gpIDogMDtcbitcbitcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX01VWF9BRERSLCB2YWwsIE5VTEwsIDAsIE5VTEwsIDApO1xuK31cbitcbisvKlxuKyAqIEFyZ3VtZW50IGJ5dGVzIHRoYXQgZm9sbG93IGFuIElTQyBvcGNvZGUuICBSZXR1cm5zIE5VTEwgd2l0aCBAbmFyZ3Mgc2V0XG4rICogd2hlbiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgemVybzogYWR2YV94MV9pMmNfeGZlcigpIHplcm9lcyB0aGUgYnVmZmVyLlxuKyAqL1xuK3N0YXRpYyBjb25zdCB1OCAqYWR2YV94MV9jcGxkX2FyZ3ModTggY21kLCB1OCAqbmFyZ3MpXG4re1xuK1x0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XG4rXHRzdGF0aWMgY29uc3QgdTggZXJhc2VfY2ZnW10gPSB7IDB4MDQsIDB4MDAsIDB4MDAgfTsgLyogY2ZnIHNlY3RvciBvbmx5ICovXG4rXG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XG4rXHRcdCpuYXJncyA9IHNpemVvZihlbl9jZmdfdHApO1xuK1x0XHRyZXR1cm4gZW5fY2ZnX3RwO1xuK1x0Y2FzZSBDUExEX0NNRF9FUkFTRTpcbitcdFx0Km5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7XG4rXHRcdHJldHVybiBlcmFzZV9jZmc7XG4rXHRjYXNlIENQTERfQ01EX1JFU0VUX0FERFI6XG4rXHRjYXNlIENQTERfQ01EX1NFVF9ET05FOlxuK1x0XHQqbmFyZ3MgPSAzO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGNhc2UgQ1BMRF9DTURfRElTX0NGRzpcbitcdGNhc2UgQ1BMRF9DTURfUkVGUkVTSDpcbitcdFx0Km5hcmdzID0gMjtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRkZWZhdWx0OlxuK1x0XHQqbmFyZ3MgPSAwO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4rLyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXG4re1xuK1x0Y29uc3QgdTggKmFyZ3M7XG4rXHR1OCBuYXJncztcbitcbitcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFx1MDAyNm5hcmdzKTtcbitcbitcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgY21kLCBhcmdzLCBuYXJncywgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogU2VuZCBhIDQtYnl0ZSBjb21tYW5kIHRoZW4gcmVhZCBkYXRhIGJhY2sgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgU1RPUFxuKyAqIChMYXR0aWNlIGNvbWJpbmVkIHdyaXRlLVx1MDAzZXJlcGVhdGVkLVNUQVJULVx1MDAzZXJlYWQpLiAgVHdvIG1lc3NhZ2VzIGluIG9uZVxuKyAqIHRyYW5zZmVyIGlzIGV4YWN0bHkgdGhhdCwgc28gbm8gcHJvdG9jb2wtbWFuZ2xpbmcgZmxhZyBpcyBuZWVkZWQuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfY21kX3JlYWQoc3RydWN0IHB0cF9vY3AgKmJwLFxuK1x0XHRcdFx0IHUzMiBjbWRfYmUsIHU4ICpvdXQsIHU4IG91dF9sZW4pXG4re1xuK1x0X19iZTMyIGNtZCA9IGNwdV90b19iZTMyKGNtZF9iZSk7XG4rXG4rXHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIC0xLCBcdTAwMjZjbWQsIDQsIG91dCwgb3V0X2xlbik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpXG4re1xuK1x0dTggYnVmWzRdO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9TVEFUVVMsIGJ1ZiwgNCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0KnN0YXR1cyA9IGdldF91bmFsaWduZWRfYmUzMihidWYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgQ1BMRCBnb2VzIGlkbGUsIG9yIEBtYXhfbXMgZWxhcHNlcy5cbisgKiBUaGUgZGVhZGxpbmUgaXMgb24gd2FsbCB0aW1lLCBzbyB0aGUgSTJDIHRyYW5zYWN0aW9ucyBjb3VudCBhZ2FpbnN0IGl0LFxuKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHJlYWQgb25jZSBtb3JlIGFmdGVyIGl0IGV4cGlyZXMgYmVmb3JlIGdpdmluZyB1cC5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KHN0cnVjdCBwdHBfb2NwICpicCwgdW5zaWduZWQgaW50IG1heF9tcylcbit7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdGludCBlcnIsIHJldDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cywgZXJyLFxuK1x0XHRcdFx0ZXJyIHx8IFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkgfHxcbitcdFx0XHRcdChzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0ZBSUxFRCkgfHxcbitcdFx0XHRcdCEoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbitcdFx0XHRcdENQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4rXHRcdFx0XHRicCwgXHUwMDI2c3RhdHVzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSlcbitcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4rXHRpZiAoZXJyIHx8IChzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0ZBSUxFRCkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEEgc3RlcCBhYm9ydGVkIGJ5IGNhbmNlbCgpIG11c3QgYmUgcmVwb3J0ZWQgYXMgc3VjaCwgbm90IGFzIGEgSFcgZXJyb3IuICovXG4rc3RhdGljIGVudW0gZndfdXBsb2FkX2VyciBhZHZhX2NwbGRfZXJyKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSA/IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRURcbitcdFx0XHRcdFx0ICA6IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rfVxuK1xuKy8qXG4rICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgb2YgdGhlIFRBUCBDUExELiAgSXQgaXMgYSBmaXhlZCBwcm9wZXJ0eSBvZlxuKyAqIHRoZSBwYXJ0LCBzbyBjYWNoZSBpdCBhbmQgcGF5IHRoZSBidXMgYXJiaXRyYXRpb24gb25seSBvbmNlLiAgVGhlXG4rICogTENNWE8zTEYtMjEwMCBJRENPREUgaXMgMHhlMTJiYzA0My5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKVxuK3tcbitcdHU4IGRhdGFbNF07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGJwLVx1MDAzZWNwbGRfaWQpIHtcbitcdFx0KmlkID0gYnAtXHUwMDNlY3BsZF9pZDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbitcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZTtcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9JRCwgZGF0YSwgNCk7XG4rXHRpZiAoIXJldClcbitcdFx0YnAtXHUwMDNlY3BsZF9pZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK3JlbGVhc2U6XG4rXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbitvdXQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcdGlmICghcmV0KVxuK1x0XHQqaWQgPSBicC1cdTAwM2VjcGxkX2lkO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLypcbisgKiBjcGxkX3N0YXR1cyAtIHNob3cgdGhlIHN0YXR1cyByZWdpc3RlciBvZiB0aGUgVEFQIENQTEQuXG4rICpcbisgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiBcImRvbmU9XHUwMDNjMHwxXHUwMDNlIGJ1c3k9XHUwMDNjMHwxXHUwMDNlIGZhaWxlZD1cdTAwM2MwfDFcdTAwM2VcXG5cIlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90XG4rY3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHQgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0dTMyIHN0ID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbitcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZTtcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXHUwMDI2c3QpO1xuK1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4rcmVsZWFzZTpcbitcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0cmV0dXJuIHJldCA/IHJldCA6IHN5c2ZzX2VtaXQoYnVmLCBcImRvbmU9JXUgYnVzeT0ldSBmYWlsZWQ9JXVcXG5cIixcbitcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19ET05FKSxcbitcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbitcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpKTtcbit9XG4rc3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTtcbitcbisvKlxuKyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLlxuKyAqXG4rICogVGhlIGtlcm5lbCBmaXJtd2FyZS11cGxvYWQgc3Vic3lzdGVtIChDT05GSUdfRldfVVBMT0FEKSBleHBvc2VzOlxuKyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59XG4rICogd2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhlIG93bmluZyBvY3BOIGRldmljZS5cbisgKiBVc2Vyc3BhY2Ugd3JpdGVzIHRoZSByYXcgYmluYXJ5IHBhZ2UgZGF0YSBkaXJlY3RseSDigJQgbm8gL2xpYi9maXJtd2FyZS9cbisgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLlxuKyAqXG4rICogQ2FsbGJhY2sgc2VxdWVuY2UgZHJpdmVuIGJ5IHRoZSBmcmFtZXdvcms6XG4rICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaFxuKyAqICAgd3JpdGUoKSAgICAgICAgLSBwcm9ncmFtIG9uZSAxNi1ieXRlIHBhZ2UgcGVyIGNhbGxcbisgKiAgIHBvbGxfY29tcGxldGUoKS0gc2V0IERPTkUsIFJFRlJFU0gsIHdhaXQgZm9yIENQTEQgdG8gcmVib290XG4rICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrXG4rICogICBjbGVhbnVwKCkgICAgICAtIHJlbGVhc2UgYnVzIHJlc291cmNlcyAoY2FsbGVkIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbisgKi9cbitzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXG4rYWR2YV9jcGxkX3ByZXBhcmUoc3RydWN0IGZ3X3VwbG9hZCAqZndsLCBjb25zdCB1OCAqZGF0YSwgdTMyIHNpemUpXG4re1xuK1x0ZW51bSBmd191cGxvYWRfZXJyIHJldCA9IEZXX1VQTE9BRF9FUlJfTk9ORTtcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4rXG4rXHQvKiBEbyBub3QgY2xlYXIgY3BsZF9jYW5jZWwgaGVyZTogZndfdXBsb2FkX3N0YXJ0KCkgcXVldWVzIHRoZSB3b3JrXG4rXHQgKiBiZWZvcmUgdGhpcyBydW5zLCBzbyBhIGNhbmNlbCBtYXkgYWxyZWFkeSBoYXZlIGFycml2ZWQuICBJdCBpc1xuK1x0ICogY2xlYXJlZCBvbmNlIHRoZSB1cGxvYWQgaXMgb3Zlciwgb24gZXZlcnkgZXhpdCBiZWxvdyBhbmQgaW5cbitcdCAqIGNsZWFudXAoKS5cbitcdCAqL1xuK1x0aWYgKCFzaXplIHx8IHNpemUgJSBDUExEX1BBR0VfU0laRSkge1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4rXHRcdHJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTtcbitcdH1cbitcbitcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGlmIChhZHZhX3gxX2J1c19jbGFpbShicCkpIHtcbitcdFx0cmV0ID0gRldfVVBMT0FEX0VSUl9USU1FT1VUO1xuK1x0XHRnb3RvIGVycl91bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKSkge1xuK1x0XHRyZXQgPSBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xuK1x0XHRnb3RvIGVycl9yZWxlYXNlO1xuK1x0fVxuK1xuK1x0LyogU2V0IGJlZm9yZSBpc3N1aW5nIEVOX0NGR19UUCwgbm90IGFmdGVyIGl0IGNvbXBsZXRlczogdGhlIENQTEQgbWF5XG4rXHQgKiBoYXZlIGVudGVyZWQgY29uZmlndXJhdGlvbiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIHJlcG9ydHMgYW4gZXJyb3JcbitcdCAqIG9yIHRoZSB3YWl0IGJlbG93IHRpbWVzIG91dCwgYW5kIGVycl9kZXNlbGVjdCBvbmx5IHNlbmRzIERJU19DRkdcbitcdCAqIHdoZW4gdGhpcyBpcyBzZXQuICBBIERJU19DRkcgdG8gYSBkZXZpY2UgdGhhdCBuZXZlciBlbnRlcmVkIHRoZVxuK1x0ICogbW9kZSBpcyBoYXJtbGVzczsgbGVhdmluZyBpdCBlbmFibGVkIGlzIG5vdC5cbitcdCAqL1xuK1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7XG4rXG4rXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FTl9DRkdfVFApIHx8XG4rXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApKSB7XG4rXHRcdHJldCA9IGFkdmFfY3BsZF9lcnIoYnApO1xuK1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbitcdH1cbitcbitcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpKSB7XG4rXHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4rXHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuK1x0fVxuK1xuK1x0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRVJBU0UpIHx8XG4rXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDE1MDAwKSkge1xuK1x0XHRyZXQgPSBhZHZhX2NwbGRfZXJyKGJwKTtcbitcdFx0Z290byBlcnJfZGVzZWxlY3Q7XG4rXHR9XG4rXG4rXHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSkge1xuK1x0XHRyZXQgPSBGV19VUExPQURfRVJSX0NBTkNFTEVEO1xuK1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbitcdH1cbitcbitcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpKSB7XG4rXHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rXHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuK1x0fVxuK1xuK1x0LyogY2xlYW51cCgpIHVubG9ja3MgZXZlcnl0aGluZy4gIGZ3X3VwbG9hZF9tYWluKCkgb25seSBwYWlycyBpdCB3aXRoXG4rXHQgKiBhIHByZXBhcmUoKSB0aGF0IHN1Y2NlZWRlZCwgc28gdGhlIGVycm9yIHBhdGhzIGJlbG93IHVubG9jayBoZXJlXG4rXHQgKiBpbnN0ZWFkOyBoYW5kIHRoZSBjb250ZXh0IHRvIGNsZWFudXAoKSBmb3Igc3BhcnNlJ3MgYmVuZWZpdC5cbitcdCAqL1xuK1x0X19yZWxlYXNlKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuK1xuK2Vycl9kZXNlbGVjdDpcbitcdGlmIChicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKSB7XG4rXHRcdGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4rXHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbitcdH1cbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK2Vycl9yZWxlYXNlOlxuK1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rZXJyX3VubG9jazpcbitcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwsIGZhbHNlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGVudW0gZndfdXBsb2FkX2VyclxuK2FkdmFfY3BsZF93cml0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd2wsIGNvbnN0IHU4ICpkYXRhLFxuK1x0XHR1MzIgb2Zmc2V0LCB1MzIgc2l6ZSwgdTMyICp3cml0dGVuKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4rXHR1OCBhcmdzWzMgKyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpKVxuK1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDtcbitcbitcdGlmIChzaXplIFx1MDAzYyBDUExEX1BBR0VfU0laRSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSU5WQUxJRF9TSVpFO1xuK1xuK1x0bWVtY3B5KFx1MDAyNmFyZ3NbM10sIGRhdGEgKyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTtcbitcbitcdGlmIChhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgQ1BMRF9DTURfV1JJVEVfUEFHRSxcbitcdFx0XHQgICAgIGFyZ3MsIHNpemVvZihhcmdzKSwgTlVMTCwgMCkgfHxcbitcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTAwKSlcbitcdFx0cmV0dXJuIGFkdmFfY3BsZF9lcnIoYnApO1xuK1xuK1x0KndyaXR0ZW4gPSBDUExEX1BBR0VfU0laRTtcbitcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XG4rfVxuK1xuK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnJcbithZHZhX2NwbGRfcG9sbF9jb21wbGV0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXG4re1xuK1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVx1MDAzZWRkX2hhbmRsZTtcbitcdGludCBlcnI7XG4rXHR1MzIgc3Q7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXG4rXHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4rXG4rXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSkgfHxcbitcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTAwMCkpXG4rXHRcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcbitcbitcdGlmIChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KSB8fCAhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19ET05FKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rXG4rXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rXG4rXHQvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gY2xlYW51cCgpXG4rXHQgKiBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZmFpbC5cbitcdCAqL1xuK1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xuK1xuK1x0LyogVGhlIG5ldyBpbWFnZSBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgdGhpcyBwb2ludCwgc28gYSBzZWdtZW50IHRoYXRcbitcdCAqIGlzIG5vdCBiYWNrIHlldCBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyBhIGZhaWxlZCB1cGRhdGU6IHJldHJ5IHRoZVxuK1x0ICogcmVzZWxlY3QgaW5zdGVhZCBvZiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cbitcdCAqL1xuK1x0bXNsZWVwKDE1MDApO1xuK1x0aWYgKHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXG4rXHRcdFx0ICAgICAgMzAwMCAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuK1x0XHRcdCAgICAgIGJwLCBBRFZBX01VWF9DSEFOTkVMKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfVElNRU9VVDtcbitcbitcdGlmIChhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMzAwMCkpXG4rXHRcdHJldHVybiBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRFxuK1x0XHRcdFx0XHRcdCAgOiBGV19VUExPQURfRVJSX1RJTUVPVVQ7XG4rXG4rXHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2FkdmFfY3BsZF9jYW5jZWwoc3RydWN0IGZ3X3VwbG9hZCAqZndsKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4rXG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbithZHZhX2NwbGRfY2xlYW51cChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXG4re1xuK1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVx1MDAzZWRkX2hhbmRsZTtcbitcbitcdF9fYWNxdWlyZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1x0LyogaGVsZCBzaW5jZSBwcmVwYXJlKCkgcmV0dXJuZWQgb2sgKi9cbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGlmIChicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKSB7XG4rXHRcdGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4rXHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbitcdH1cbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmd191cGxvYWRfb3BzIGFkdmFfY3BsZF91cGxvYWRfb3BzID0ge1xuK1x0LnByZXBhcmVcdCA9IGFkdmFfY3BsZF9wcmVwYXJlLFxuK1x0LndyaXRlXHRcdCA9IGFkdmFfY3BsZF93cml0ZSxcbitcdC5wb2xsX2NvbXBsZXRlXHQgPSBhZHZhX2NwbGRfcG9sbF9jb21wbGV0ZSxcbitcdC5jYW5jZWxcdFx0ID0gYWR2YV9jcGxkX2NhbmNlbCxcbitcdC5jbGVhbnVwXHQgPSBhZHZhX2NwbGRfY2xlYW51cCxcbit9O1xuK1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiArNDkzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0cixcbitcdFx1MDAyNmRldl9hdHRyX2NwbGRfc3RhdHVzLmF0dHIsXG4gXHROVUxMLFxuIH07XG4gXG5AQCAtNDg2Nyw2ICs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiB7XG4gXHRpbnQgaTtcbiBcbitcdC8qIE11c3QgY29tZSBmaXJzdDogY2FuY2VscyBhbmQgZmx1c2hlcyBhbiBpbi1mbGlnaHQgdXBsb2FkIHdoaWxlIHRoZVxuK1x0ICogSTJDIGNvbnRyb2xsZXIgaXMgc3RpbGwgdXAsIGFuZCBkcm9wcyBjcGxkX2xvY2sgc28gYSBjcGxkX3N0YXR1c1xuK1x0ICogcmVhZGVyIGNhbm5vdCBzdGFsbCBwdHBfb2NwX2F0dHJfZ3JvdXBfZGVsKCkgYmVsb3cuXG4rXHQgKi9cbitcdGlmIChicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCkge1xuK1x0XHRmaXJtd2FyZV91cGxvYWRfdW5yZWdpc3RlcihicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCk7XG4rXHRcdGJwLVx1MDAzZWNwbGRfZndfdXBsb2FkID0gTlVMTDtcbitcdH1cbitcbiBcdHB0cF9vY3BfZGVidWdmc19yZW1vdmVfZGV2aWNlKGJwKTtcbiBcdHB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTtcbiBcdHB0cF9vY3BfYXR0cl9ncm91cF9kZWwoYnApO1xuQEAgLTQ5MDQsNiArNTU3Miw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiBcdFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cdTAwM2VpMmNfY2xrKTtcbiBcdGlmIChicC1cdTAwM2VuX2lycXMpXG4gXHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVx1MDAzZXBkZXYpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuIFx0ZGV2aWNlX3VucmVnaXN0ZXIoXHUwMDI2YnAtXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtNTA4MCw2ICs1NzQ5LDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4rXHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXG4rXHQgKiBzbyBtdXRleF9kZXN0cm95KCkgYWx3YXlzIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXguXG4rXHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXG4rXHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxuK1x0ICogcmVnaXN0ZXJzIGFuZCBzdG9yZXMgdGhlIGFkYXB0ZXIgbnVtYmVyIGluIGNwbGRfaTJjX2FkYXBfbnI7IHRoZVxuK1x0ICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyXG4rXHQgKiBmaXJpbmcgZHVyaW5nIHJlZ2lzdHJhdGlvbiBpcyBuZXZlciBvdmVyd3JpdHRlbiBieSB0aGlzIGluaXQuXG4rXHQgKi9cbitcdG11dGV4X2luaXQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcdGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIgPSAtMTtcbitcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmJwLVx1MDAzZXN5bmNfd29yaywgcHRwX29jcF9zeW5jX3dvcmspO1xuIFxuIFx0LyogY29tcGF0IG1vZGUuXG5AQCAtNTIxOSwxMSArNTg5OSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbitcdGlmIChhZGQpIHtcbiBcdFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXCJpMmNcIik7XG4tXHRlbHNlXG4rXHRcdC8qIENhY2hlIGFkYXB0ZXIgbnI7IHVzZWQgYnkgdGhlIENQTEQgc3RhdHVzL2lkL3VwbG9hZCBwYXRoc1xuK1x0XHQgKiBmb3IgcmVmZXJlbmNlLWNvdW50ZWQgdW5iaW5kLXNhZmUgYWRhcHRlciBhY2Nlc3MuXG4rXHRcdCAqL1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXHUwMDNlbnIpO1xuK1x0fSBlbHNlIHtcbitcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCAtMSk7IC8qIGludmFsaWRhdGUgYmVmb3JlIGZyZWUgKi9cbiBcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwiaTJjXCIpO1xuLVxuK1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MzY6NTAuMDI4NzAxMTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMTE3NjAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgXCJXb3J0aEZ1enppbmcsXCIgYW5kIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBcIkZvY3VzU3ltYm9sc1wiIGFuZCBcIkVuYWJsZUNvbmZpZ3NcIiBpZiBmdXp6aW5nIGlzIHdhcnJhbnRlZCwgYWxvbmcgd2l0aCB0aGUgXCJSZWFzb25pbmdcIiBiZWhpbmQgbXkgY29uY2x1c2lvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCwgYGRyaXZlcnMvcHRwL0tjb25maWdgLCBhbmQgYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRgLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBwdHBfb2NwYCwgd2hpY2gsIGJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGlzIGFzc29jaWF0ZWQgd2l0aCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGtpbmQgb2YgaGFyZHdhcmUgYXJlIHdlIGRlYWxpbmcgd2l0aD9cblxuTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBkaXJlY3RseS4gTXkgc3VzcGljaW9uIGlzIHRoYXQgYHB0cF9vY3BgIG1pZ2h0IGJlIGEgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBzb21ldGhpbmcgbGlrZSB0aGUgT3BlbkNvbXB1dGUgVGltZUNhcmQgb3IgcG90ZW50aWFsbHkgQURWQSBvciBBUlQgdGltZWNhcmRzLlxuXG5UaGlzIGxlYWRzIG1lIHRvIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGRyaXZlciByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHM/IElmIGl0IGRvZXMsIGFuZCBpdCdzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCB0aGVuIGZ1enppbmcgaXMgbGlrZWx5IG91dC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcnVsZSBoZXJlOiBJZiB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgb3IgaWYgaXQgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIG9yIHRlYXJkb3duIGNhbGxiYWNrcywgdGhlbiBpdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgaWYgYHB0cF9vY3BgIGlzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGxpa2UgT3BlbkNvbXB1dGUgVGltZUNhcmQgb3IgQURWQSB4MSBUQVAgY2FyZHMuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZSBmb3IgYHB0cF9vY3BgIHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgbm90IGEgZHJpdmVyIHdoZXJlIEkgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM2OjU1LjQ1OTg3OTY3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNT0RVTEVfREVWSUNFX1RBQkxFXFxcXChwY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvcHRwX29jcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xMzAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfb2NwX3BjaWRldl9pZFtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDgtfTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTMwOTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcHRwX29jcF9wY2lkZXZfaWQpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjozNjo1NS41MDkxNzU4MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzcyOTQ5NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQQ0kgRGV2aWNlIElEIEhhbmRsaW5nIGluIHRoZSBQVFAgT0NQIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBwdHBfb2NwX3BjaWRldl9pZGAgdmFyaWFibGUgYW5kIHdoZXJlIGl0J3MgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUFRQIE9DUCBkcml2ZXIgaXMgaWRlbnRpZnlpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHNwZWNpZmljIFBDSSBkZXZpY2VzIGl0J3MgZGVzaWduZWQgdG8gd29yayB3aXRoLiBJIHN1c3BlY3QgdGhpcyBJRCBpcyBjcnVjaWFsIGZvciBkZXZpY2UgcHJvYmluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGVuc3VyaW5nIHRoYXQgdGhlIGRyaXZlciBjb3JyZWN0bHkgYmluZHMgdG8gdGhlIGludGVuZGVkIGhhcmR3YXJlLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgaG93IGl0J3MgaW5pdGlhbGl6ZWQsIHdoZXJlIGl0J3MgY29tcGFyZWQgYWdhaW5zdCBQQ0kgZGV2aWNlIElEcywgYW5kIGhvdyBhbnkgZGlzY3JlcGFuY2llcyBhcmUgaGFuZGxlZC4gQXJlIHRoZXJlIHNwZWNpZmljIHZlbmRvci9kZXZpY2UgSURzIGhhcmRjb2RlZCwgb3IgaXMgaXQgbW9yZSBnZW5lcmljPyBBcmUgd2UgZGVhbGluZyB3aXRoIGEgc2luZ2xlIElEIG9yIGEgcmFuZ2Ugb2YgYWNjZXB0YWJsZSBJRHM/IFRoaXMgSUQgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJ3MgY29tcGF0aWJpbGl0eSB3aXRoaW4gdGhpcyBQVFAgaW1wbGVtZW50YXRpb24uIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBvbiBzeXN0ZW0gYm9vdCwgaG90cGx1ZyBldmVudHMsIG9yIGRldmljZSBlbnVtZXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnZXQgY29kaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY1MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM2OjU4LjI4MjEyODIyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5NTpcXHRcXHRcXHRcXHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcXG4xMjk2OlxcdFxcdFxcdH0sXFxuMTI5NzpcXHRcXHR9LFxcbjEyOTg6XFx0XFx0eyB9XFxuMTI5OTpcXHR9O1xcbjEzMDA6XFx0XFxuMTMwMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcXG4xMzAyOlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxcbjEzMDM6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQ0VMRVNUSUNBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9mYl9yZXNvdXJjZSkgfSxcXG4xMzA0OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE9ST0xJQSwgQVJUQ0FSRCwgXFx1MDAyNm9jcF9hcnRfcmVzb3VyY2UpIH0sXFxuMTMwNTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxcbjEzMDY6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFxcdTAwMjZvY3BfYWR2YV94MV9yZXNvdXJjZSkgfSxcXG4xMzA3OlxcdFxcdHsgfVxcbjEzMDg6XFx0fTtcXG4xMzA5OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XFxuMTMxMDpcXHRcXG4xMzExOlxcdHN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcXG4xMzEyOlxcdHN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcXG4xMzEzOlxcdFxcbjEzMTQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9jbG9ja1tdID0ge1xcbjEzMTU6XFx0XFx0eyAubmFtZSA9IFxcXCJOT05FXFxcIixcXHQudmFsdWUgPSAwIH0sXFxuMTMxNjpcXHRcXHR7IC5uYW1lID0gXFxcIlRPRFxcXCIsXFx0LnZhbHVlID0gMSB9LFxcbjEzMTc6XFx0XFx0eyAubmFtZSA9IFxcXCJJUklHXFxcIixcXHQudmFsdWUgPSAyIH0sXFxuMTMxODpcXHRcXHR7IC5uYW1lID0gXFxcIlBQU1xcXCIsXFx0LnZhbHVlID0gMyB9LFxcbjEzMTk6XFx0XFx0eyAubmFtZSA9IFxcXCJQVFBcXFwiLFxcdC52YWx1ZSA9IDQgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MzY6NTguMjgyMzY0ODU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2OTI4NjExMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgcHRwX29jcCBEcml2ZXIgYW5kIFdvcnRoRnV6emluZyoqXG5cbk9rYXksIHNvIGBwdHBfb2NwYCBpcyBjbGVhcmx5IGEgZHJpdmVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgUENJIGRldmljZXMuIEknbSBzZWVpbmcgaXQgc3VwcG9ydHMgYSBoYW5kZnVsIG9mIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzOiBNZXRhIFRpbWVDYXJkLCBDZWxlc3RpY2EgVGltZUNhcmQsIE9yb2xpYSBBcnRDYXJkLCBhbmQgQURWQSBUaW1lQ2FyZHMsIGluY2x1ZGluZyB0aGUgWDEgdmFyaWFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCB0aGVyZSdzIG5vIG1lbnRpb24gb2Ygc29mdHdhcmUgZW11bGF0aW9uIG9yIHZpcnR1YWwgZGV2aWNlcyBmb3IgYHB0cF9vY3BgIHdpdGhpbiBRRU1VIG9yIGFueXdoZXJlIGVsc2UuIFRoZSB0ZXh0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgUUVNVSAqZG9lc24ndCogZW11bGF0ZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkLiBUaGlzIGRyaXZlciBhcHBlYXJzIHRvIGJlIHNvbGVseSBmb3IgcmVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gVGhlIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBhZGRlZCBpbiB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCB0aGUgQURWQSBUaW1lQ2FyZCBYMSwgZGVhbGluZyB3aXRoIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMsIHZpYSBJMkMsIHN5c2ZzLCBhbmQgYGRldmxpbmtgLlxuXG5HaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0aGF0IHBhdGNoZXMgYXJlICpub3QqIHdvcnRoIGZ1enppbmcgaWYgdGhleSBpbnZvbHZlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSB0aGF0ICpyZXF1aXJlcyogcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIHJlZCBmbGFnLiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyBkcml2ZXIgZml0cyB0aGF0IGRlc2NyaXB0aW9uIHBlcmZlY3RseS5cblxuSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9uIG9mIG1vY2sgZHJpdmVycyBvciBzb2Z0d2FyZSBlbXVsYXRpb24gd2l0aGluIHRoZSBgcHRwYCBkaXJlY3Rvcnkgb3IgZWxzZXdoZXJlLiBCdXQgcmlnaHQgbm93LCBiYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggcHJvYmFibHkgZmFsbHMgaW50byB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjYXRlZ29yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDU3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6Mzc6MDguOTc1MjI3NzQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA3MDU0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWc9MTk5PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTVdcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjEwLVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MjExOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxMi1cXHR0cmlzdGF0ZSBcXFwiT3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX1ZNVylcXHQrPSBwdHBfdm13Lm9cXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfT0NQKVxcdCs9IHB0cF9vY3Aub1xcbmRyaXZlcnMvcHRwL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QVFBfREZMX1RPRClcXHRcXHQrPSBwdHBfZGZsX3RvZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM3OjEwLjU0NTkzNzAzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTE1Mjg5NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQVFAgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL3B0cC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjExLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IHNlY3Rpb24gd2hlcmUgSSBjYW4gcmV2aWV3IHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBtZSBmb3IgY29uZmlndXJpbmcgdGhlIFBUUCBkcml2ZXJzLiBUaGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UsIGEgZmVhdHVyZSBJJ20gaW50ZXJlc3RlZCBpbiBlbmFibGluZy9kaXNhYmxpbmcsIG9yIHBlcmhhcHMgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIFBUUCBpbXBsZW1lbnRhdGlvbiBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjozNzoyMi4wNjEyMjk3MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFxuIDIxMTpcXHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXFxuIDIxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXFxcIlxcbiAyMTM6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgUENJXFxuIDIxNTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBNVERcXG4gMjE2OlxcdFxcdGRlcGVuZHMgb24gU0VSSUFMXzgyNTBcXG4gMjE3OlxcdFxcdGRlcGVuZHMgb24gIVMzOTBcXG4gMjE4OlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiAyMTk6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIDIyMDpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gMjIxOlxcdFxcdHNlbGVjdCBEUExMXFxuIDIyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuIDIyMzpcXHRcXHRzZWxlY3QgRldfVVBMT0FEXFxuIDIyNDpcXHRcXHRoZWxwXFxuIDIyNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxcbiAyMjY6XFx0XFxuIDIyNzpcXHRcXHQgIFRoZSBPcGVuQ29tcHV0ZSB0aW1lIGNhcmQgaXMgYW4gYXRvbWljIGNsb2NrIGFsb25nIHdpdGhcXG4gMjI4OlxcdFxcdCAgYSBHUFMgcmVjZWl2ZXIgdGhhdCBwcm92aWRlcyBhIEdyYW5kbWFzdGVyIGNsb2NrIHNvdXJjZVxcbiAyMjk6XFx0XFx0ICBmb3IgYSBQVFAgZW5hYmxlZCBuZXR3b3JrLlxcbiAyMzA6XFx0XFxuIDIzMTpcXHRcXHQgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudGltaW5nY2FyZC5jb20vXFxuIDIzMjpcXHRcXG4gMjMzOlxcdGNvbmZpZyBQVFBfREZMX1RPRFxcbiAyMzQ6XFx0XFx0dHJpc3RhdGUgXFxcIkZQR0EgREZMIFRvRCBEcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM3OjIyLjA2MTMwMzM2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzI3NzQ0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBwdHBfb2NwYCBEcml2ZXIncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGJhc2VkIG9uIHRoZSBhbmFseXNpcywgaXQncyBwcmV0dHkgY2xlYXI6IGBXb3J0aEZ1enppbmdgIGlzIGdvaW5nIHRvIGJlIGZhbHNlIGluIHRoaXMgY2FzZS4gVGhlIGBwdHBfb2NwYCBkcml2ZXIgaXMgZXhwbGljaXRseSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgT3BlbkNvbXB1dGUgVGltZUNhcmQgZGV2aWNlc+KAlHRoaW5rIEFEVkEgeDEsIE1ldGEgVGltZWNhcmQsIGFuZCB0aGUgbGlrZS4gVGhlc2UgYXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEl0J3Mgbm90IHRhcmdldGluZyBzb21lIGdlbmVyaWMgUENJIGRldmljZTsgaXQncyBzcGVjaWZpYyBoYXJkd2FyZS4gQW5kIGNydWNpYWxseSwgaXQncyAqbm90KiBzb21ldGhpbmcgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIGZlYXR1cmVzIGZvciBDUExEIGZpcm13YXJlIHVwbG9hZHMgYW5kIHN0YXR1cyByZXBvcnRpbmcgdGhyb3VnaCBzeXNmcywgYWxsIHRpZWQgdG8gdGhhdCBwYXJ0aWN1bGFyIGhhcmR3YXJlIChpZGVudGlmaWVkIGJ5IFBDSSBJRCAweGFkNWE6MHgwNDEwKS4gU28sIHRvIGV2ZW4gKmludGVyYWN0KiB3aXRoIHRoaXMgZHJpdmVyIHByb3Blcmx5LCB5b3UnZCBuZWVkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgcnVsZXMgb3V0IG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCByZXN1bHRzIGFyZSBzaW1wbGU6XG5cbiogICBgV29ydGhGdXp6aW5nYDogZmFsc2VcbiogICBgRm9jdXNTeW1ib2xzYDogXFxbIF1cbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdXG5cblRoZXJlIGlzIG5vIHJlYXNvbiB0byBwdXJzdWUgZnV6emluZyBoZXJlLiBJdCdzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTY3LCJPdXRwdXRUb2tlbnMiOjEwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM3OjI2Ljc4OTA1MDc5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFkZCBDUExEIGZpcm13YXJlIHVwbG9hZCBhbmQgc3RhdHVzIHJlcG9ydGluZyBzdXBwb3J0IHRvIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYykgZm9yIEFEVkEgeDEgVEFQIGNhcmRzLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6Mzc6MjYuNzg5MjYyMDgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5szj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 16:35:30 +0000 UTC FinishedAt: 2026-09-02 16:37: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+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhZGQgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgYW5kIHN0YXR1cyByZXBvcnRpbmcgc3VwcG9ydCB0byB0aGUgT3BlbkNvbXB1dGUgVGltZUNhcmQgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpIGZvciBBRFZBIHgxIFRBUCBjYXJkcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgaW4gZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGIyNWU0ZWYyODQzZGMzZWFmMjc4ZDZmNTlmZWM3NzA0YmY1MzJiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTY6MzY6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbmluZGV4IDNhZTQxYjc2MzRhYzkuLjQxZWVhZGQ0NjMzMDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5AQCAtMTEsNiAmIzQzOzExLDMwIEBAIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcbiBcdFx0cmVnaXN0ZXJlZC5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXG4mIzQzO0RhdGU6XHRcdEp1bHkgMjAyNlxuJiM0MztDb250YWN0Olx0U2FnaSBNYWltb24gXHUwMDNjbWFpbW9uLnNhZ2lAZ21haWwuY29tXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlx0KFJPLCByb290IG9ubHkpIFRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELCBpblxuJiM0MztcdFx0aHVtYW4tcmVhZGFibGUgZm9ybTpcbiYjNDM7XG4mIzQzO1x0XHQgIGRvbmU9XHUwMDNjMHwxXHUwMDNlIGJ1c3k9XHUwMDNjMHwxXHUwMDNlIGZhaWxlZD1cdTAwM2MwfDFcdTAwM2VcbiYjNDM7XG4mIzQzO1x0XHRPbmx5IHByZXNlbnQgb24gQURWQSB4MSBUQVAgYm9hcmRzIChQQ0kgSUQgMHhhZDVhOjB4MDQxMCkuXG4mIzQzO1xuJiM0MztcdFx0ZG9uZT0xIGluZGljYXRlcyB0aGUgY29uZmlndXJhdGlvbiBmbGFzaCB3YXMgc3VjY2Vzc2Z1bGx5XG4mIzQzO1x0XHRwcm9ncmFtbWVkIGFuZCBpcyBhY3RpdmUuICBidXN5PTEgbWVhbnMgYW4gaW50ZXJuYWwgb3BlcmF0aW9uXG4mIzQzO1x0XHRpcyBpbiBwcm9ncmVzcy4gIGZhaWxlZD0xIG1lYW5zIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkLlxuJiM0MztcbiYjNDM7XHRcdEEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlXG4mIzQzO1x0XHRvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlXG4mIzQzO1x0XHRJRCBvZiB0aGUgQ1BMRCBpcyByZXBvcnRlZCBhcyB0aGUgZml4ZWQgXCYjMzQ7Y3BsZC5pZFwmIzM0OyB2ZXJzaW9uIGJ5XG4mIzQzO1x0XHRkZXZsaW5rIGRldiBpbmZvLlxuJiM0MztcbiYjNDM7XHRcdFRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWxcbiYjNDM7XHRcdGZpcm13YXJlLXVwbG9hZCBpbnRlcmZhY2UsIHJlZ2lzdGVyZWQgcGVyIGNhcmQgYXQ6XG4mIzQzO1x0XHQvc3lzL2NsYXNzL2Zpcm13YXJlL2FkdmEtY3BsZC5OL1xuJiM0MztcdFx0d2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXG4gRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjFcbiBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvS2NvbmZpZyBiL2RyaXZlcnMvcHRwL0tjb25maWdcbmluZGV4IGZlYjUwZjhjYzQwNmEuLjI0ZjA0N2MzN2U0YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9LY29uZmlnXG5AQCAtMjE5LDYgJiM0MzsyMTksOCBAQCBjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBDUkMxNlxuIFx0c2VsZWN0IERQTExcbiYjNDM7XHRzZWxlY3QgRldfTE9BREVSXG4mIzQzO1x0c2VsZWN0IEZXX1VQTE9BRFxuIFx0aGVscFxuIFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbmluZGV4IDNkMjZlYzFmN2I5ZWMuLjg2ZDFjMWEzMTFjYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuQEAgLTIwLDEwICYjNDM7MjAsMTQgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvYWx0ZXJhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICYjNDM7ODksNyBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8ge1xuIFx0dThcdFx0XHRcdHNpZ25hbHNfbnI7XG4gXHR1OFx0XHRcdFx0ZnJlcV9pbl9ucjtcbiBcdGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cFx0KmF0dHJfZ3JvdXBzO1xuJiM0MztcdGJvb2xcdFx0XHRcdGhhc19jcGxkOyAvKiB4MTogc3VwcG9ydHMgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgKi9cbiB9O1xuIFxuICNkZWZpbmUgT0NQX0NUUkxfRU5BQkxFXHRcdEJJVCgwKVxuQEAgLTE2Myw3ICYjNDM7MTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcbiBcdHUzMlx0Z3BpbzE7XG4gXHR1MzJcdF9fcGFkMDtcbiBcdHUzMlx0Z3BpbzI7XG4tXHR1MzJcdF9fcGFkMTtcbiYjNDM7XHQvKiBhZHZhX3gxOiBJMkMgYnVzIG93bmVyc2hpcCByZWdpc3RlcjsgcmVzZXJ2ZWQgb24gb3RoZXIgdmFyaWFudHMgKi9cbiYjNDM7XHR1MzJcdGkyY19idXNfY3RybDtcbiB9O1xuIFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xuQEAgLTQxNiw2ICYjNDM7NDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHtcbiBcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuIFx0aW50IHNpZ25hbHNfbnI7XG4gXHRpbnQgZnJlcV9pbl9ucjtcbiYjNDM7XHQvKiBhZHZhX3gxIENQTEQgSTJDIChpbnRlcm5hbCB1c2Ugb25seSkgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0Y3BsZF9sb2NrOyAgICAgICAgICAgIC8qIHNlcmlhbGlzZXMgQ1BMRCBvcGVyYXRpb25zICovXG4mIzQzO1x0aW50XHRcdFx0Y3BsZF9pMmNfYWRhcF9ucjsgICAgIC8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi9cbiYjNDM7XHRzdHJ1Y3QgaTJjX2FkYXB0ZXJcdCpjcGxkX2FkYXA7ICAgICAgICAgICAvKiBjbGFpbWVkIGFkYXB0ZXI7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuJiM0MztcdHU4XHRcdFx0KmNwbGRfYnVmOyAgICAgICAgICAgIC8qIERNQS1zYWZlIHNjcmF0Y2g7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuJiM0MztcdHUzMlx0XHRcdGNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovXG4mIzQzO1x0Ym9vbFx0XHRcdGhhc19jcGxkOyAgICAgICAgICAgICAvKiB4MSBUQVAgQ1BMRCBwcmVzZW50ICovXG4mIzQzO1x0c3RydWN0IGZ3X3VwbG9hZFx0KmNwbGRfZndfdXBsb2FkOyAgICAgIC8qIGZpcm13YXJlIHVwbG9hZCBoYW5kbGU7IE5VTEwgaWYgYWJzZW50ICovXG4mIzQzO1x0Ym9vbFx0XHRcdGNwbGRfY2FuY2VsOyAgICAgICAgICAvKiBjYW5jZWxsYXRpb24gcmVxdWVzdGVkICovXG4mIzQzO1x0Ym9vbFx0XHRcdGNwbGRfaW5fY29uZmlnX21vZGU7ICAvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gmIzM5O2QgKi9cbiB9O1xuIFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcdEJJVCgwKVxuQEAgLTQ0OSw4ICYjNDM7NDY1LDExIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hcnRfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuIFxuIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmd191cGxvYWRfb3BzIGFkdmFfY3BsZF91cGxvYWRfb3BzO1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2RldmljZV9pZChzdHJ1Y3QgcHRwX29jcCAqYnAsIHUzMiAqaWQpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG5AQCAtMTI3Myw2ICYjNDM7MTI5Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XG4gXHRcdFx0LnNpZ25hbHNfbnIgICA9IDQsXG4gXHRcdFx0LmZyZXFfaW5fbnIgICA9IDQsXG4gXHRcdFx0LmF0dHJfZ3JvdXBzICA9IGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzLFxuJiM0MztcdFx0XHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcbiBcdFx0fSxcbiBcdH0sXG4gXHR7IH1cbkBAIC0yMTg1LDYgJiM0MzsyMjA1LDE5IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkKSB7XG4mIzQzO1x0XHR1MzIgaWQ7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9jcGxkX2RldmljZV9pZChicCwgXHUwMDI2aWQpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7MHglMDh4XCYjMzQ7LCBpZCk7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBcJiMzNDtjcGxkLmlkXCYjMzQ7LCBidWYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxOTksNiAmIzQzOzMyMzIsMzAgQEAgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0cHRwX29jcF9zbWFfaW5pdChicCk7XG4gXG4mIzQzO1x0YnAtXHUwMDNlaGFzX2NwbGQgPSBpbmZvLVx1MDAzZWhhc19jcGxkO1xuJiM0MztcdGlmIChicC1cdTAwM2VoYXNfY3BsZCkge1xuJiM0MztcdFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBPbmUgaW5zdGFuY2UgcGVyIGNhcmQsIG51bWJlcmVkIGxpa2UgdGhlIG9jcE4gZGV2aWNlLlxuJiM0MztcdFx0ICogZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKCkga2VlcHMgdGhlIHBvaW50ZXIgcmF0aGVyIHRoYW5cbiYjNDM7XHRcdCAqIGNvcHlpbmcgdGhlIHN0cmluZywgc28gaXQgaGFzIHRvIG91dGxpdmUgdGhlIHJlZ2lzdHJhdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bmFtZSA9IGRldm1fa2FzcHJpbnRmKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBHRlBfS0VSTkVMLFxuJiM0MztcdFx0XHRcdCAgICAgIFwmIzM0O2FkdmEtY3BsZC4lZFwmIzM0OywgYnAtXHUwMDNlaWQpO1xuJiM0MztcdFx0aWYgKCFuYW1lKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRmd2wgPSBmaXJtd2FyZV91cGxvYWRfcmVnaXN0ZXIoVEhJU19NT0RVTEUsIFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG5hbWUsIFx1MDAyNmFkdmFfY3BsZF91cGxvYWRfb3BzLCBicCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZ3bCkpXG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtDUExEIGZpcm13YXJlIHVwbG9hZCB1bmF2YWlsYWJsZTogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBmd2wpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCA9IGZ3bDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHB0cF9vY3BfaW5pdF9jbG9jayhicCwgXHUwMDI2aW5mby1cdTAwM2VzZXJ2byk7XG4gfVxuIFxuQEAgLTQyMjYsNiAmIzQzOzQyODMsNjA3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0ge1xuIFx0eyB9LFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEludGVybmFsIGhlbHBlcnMgZm9yIHRoZSBhZHZhX3gxIFRBUCBDUExEIChMYXR0aWNlIExDTVhPM0xGLTIxMDApLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cbiYjNDM7ICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBvbmUgaXMgd2lyZWQgdG86XG4mIzQzOyAqXG4mIzQzOyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVx1MDAzZSBUTUMgb3IgTS4yLCBNQiYjMzk7cyBjaG9pY2VcbiYjNDM7ICogICBncmFudCAxOiAgMHgxNTAwMDAgLVx1MDAzZSBUTUMgYnVzICAgICAweDEyMDAwMCAtXHUwMDNlIE0uMlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIHNpdCBvblxuJiM0MzsgKiB0aGUgVE1DIGJ1cywgc28gdGhleSBhcmUgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBGb3JcbiYjNDM7ICogdGhhdCBzYW1lIHdpbmRvdyB0aGUgRUVQUk9NcyBhcmUgbm90IGJlaGluZCB0aGUgYWRhcHRlciBhdCBhbGwsIHNvIGFcbiYjNDM7ICogQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrIGFuZCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBhY3Jvc3MgaXQgdG9cbiYjNDM7ICoga2VlcCB0aGUgRUVQUk9NIGFuZCBudm1lbSBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIuXG4mIzQzOyAqXG4mIzQzOyAqIE5vIHJhdyBJMkMgYWNjZXNzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvbmx5IHRoZSBhdHRyaWJ1dGVzIGJlbG93LlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NFxuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcbiYjNDM7I2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXG4mIzQzO1xuJiM0MzsvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxuJiM0MzsjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXG4mIzQzOyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFVcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxuJiM0MztcbiYjNDM7LyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX1NUQVRVUyAgMHgzQzAwMDAwMFVMXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfRU5fQ0ZHX1RQICAgIDB4NzQgICAvKiBlbmFibGUgY29uZmlnLCB0cmFuc3BhcmVudCBtb2RlICovXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9FUkFTRSAgICAgICAgMHgwRVxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFU0VUX0FERFIgICAweDQ2XG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9TRVRfRE9ORSAgICAgMHg1RVxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFRlJFU0ggICAgICAweDc5XG4mIzQzOyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XG4mIzQzOyNkZWZpbmUgQ1BMRF9QT0xMX1VTICAgICAgICAgIDEwMDAwICAvKiBzdGF0dXMgcG9sbCBpbnRlcnZhbCB3aGlsZSBidXN5ICovXG4mIzQzO1xuJiM0MzsvKiBTdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAoTGF0dGljZSBMQ01YTzNMRiBkYXRhc2hlZXQpICovXG4mIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KVxuJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0JVU1kgICBCSVQoMTIpXG4mIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRkFJTEVEIEJJVCgxMylcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGFkdmFfeDFfaTJjX3hmZXIoKSAtIGlzc3VlIGEgc2luZ2xlIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1cy5cbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIEBjbWQgd2hlbiBpdCBpcyBub3QgbmVnYXRpdmUsIGZvbGxvd2VkIGJ5IEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSxcbiYjNDM7ICogdGhlbiByZWFkcyBAcmxlbiBieXRlcyBpZiBhc2tlZC4gIEEgTlVMTCBAd2RhdGEgc2VuZHMgemVyb3MuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtZXNzYWdlIGlzIGFzc2VtYmxlZCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgdGFrZW4gYnlcbiYjNDM7ICogYWR2YV94MV9idXNfY2xhaW0oKSwgd2hpY2ggdGhlIFhpbGlueCBjb250cm9sbGVyIG5lZWRzIGZvciBETUEgc2FmZXR5OlxuJiM0MzsgKiBhbiBvcGNvZGUgYW5kIGl0cyBhcmd1bWVudHMgYXJlIGNvcGllZCBleGFjdGx5IG9uY2UsIGFuZCBhIGZpcm13YXJlXG4mIzQzOyAqIHVwbG9hZCBjb3N0cyBvbmUgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBvbmUgcGVyIHBhZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgdGhhdCBjbGFpbSwgaGVuY2UgX19pMmNfdHJhbnNmZXIoKSBvdmVyIGkyY190cmFuc2ZlcigpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLFxuJiM0MztcdFx0XHQgICAgdm9pZCAqcmRhdGEsIHU4IHJsZW4pXG4mIzQzO3tcbiYjNDM7XHR1OCAqd2J1ZiwgKnJidWY7XG4mIzQzO1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuJiM0MztcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4mIzQzO1x0aW50IG5tc2dzID0gMCwgcmV0O1xuJiM0MztcdHUxNiBoZHIgPSBjbWQgXHUwMDNlPSAwO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4mIzQzO1x0aWYgKCFhZGFwIHx8ICFicC1cdTAwM2VjcGxkX2J1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyICYjNDM7IHdsZW4gXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWCB8fCBybGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0d2J1ZiA9IGJwLVx1MDAzZWNwbGRfYnVmO1xuJiM0MztcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiAmIzQzOyBBRFZBX0NQTERfWEZFUl9NQVg7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIgJiM0Mzsgd2xlbikge1xuJiM0MztcdFx0aWYgKGhkcilcbiYjNDM7XHRcdFx0d2J1ZlswXSA9IGNtZDtcbiYjNDM7XHRcdGlmICh3ZGF0YSlcbiYjNDM7XHRcdFx0bWVtY3B5KHdidWYgJiM0MzsgaGRyLCB3ZGF0YSwgd2xlbik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1lbXNldCh3YnVmICYjNDM7IGhkciwgMCwgd2xlbik7XG4mIzQzO1x0XHRtc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpe1xuJiM0MztcdFx0XHQuYWRkciAgPSBhZGRyLFxuJiM0MztcdFx0XHQuZmxhZ3MgPSBJMkNfTV9ETUFfU0FGRSxcbiYjNDM7XHRcdFx0LmxlbiAgID0gaGRyICYjNDM7IHdsZW4sXG4mIzQzO1x0XHRcdC5idWYgICA9IHdidWYsXG4mIzQzO1x0XHR9O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocmxlbikge1xuJiM0MztcdFx0bXNnc1tubXNncyYjNDM7JiM0MztdID0gKHN0cnVjdCBpMmNfbXNnKXtcbiYjNDM7XHRcdFx0LmFkZHIgID0gYWRkcixcbiYjNDM7XHRcdFx0LmZsYWdzID0gSTJDX01fUkQgfCBJMkNfTV9ETUFfU0FGRSxcbiYjNDM7XHRcdFx0LmxlbiAgID0gcmxlbixcbiYjNDM7XHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbiYjNDM7XHRcdH07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4mIzQzO1x0aWYgKHJldCAhPSBubXNncylcbiYjNDM7XHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4mIzQzO1xuJiM0MztcdGlmIChyZGF0YSBcdTAwMjZcdTAwMjYgcmxlbilcbiYjNDM7XHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdGlmIChicC1cdTAwM2VwcHNfc2VsZWN0KVxuJiM0MztcdFx0aW93cml0ZTMyKE1CTEFaRV9SRUxFQVNFLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFjcXVpcmUgdGhlIHNoYXJlZCBJMkMgYnVzIGZyb20gdGhlIE1pY3JvQmxhemUgZmlybXdhcmUuICBSZXR1cm5zIHdpdGggbm9cbiYjNDM7ICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhXG4mIzQzOyAqIHNlZ21lbnQgdG8gYSBob3N0IHRoYXQgaGFzIGdpdmVuIHVwIHdhaXRpbmcgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBEcm9wIGEgcmVxdWVzdCBsZWZ0IGJ5IGEgY2FsbGVyIHRoYXQgZGllZCBtaWQtc2VxdWVuY2U7IGNwbGRfbG9ja1xuJiM0MztcdCAqIGtlZXBzIGxpdmUgb25lcyBvdXQuICBUaGUgcmVhZCBiYWNrIG9ubHkgZmx1c2hlcyB0aGUgcG9zdGVkIHdyaXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlvd3JpdGUzMigwLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0aW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuJiM0MztcbiYjNDM7XHRpb3dyaXRlMzIoTUJMQVpFX1JFUVVFU1QsIFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQkxBWkVfUkVUUklFUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZShNQkxBWkVfUkVUUllfVVMsIE1CTEFaRV9SRVRSWV9VUyAmIzQzOyAxMDAwKTtcbiYjNDM7XHRcdHZhbCA9IGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XHRcdGlmICh2YWwgPT0gTUJMQVpFX0dSQU5URUQpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJvdXRlIHRoZSBob3N0IGNvbnRyb2xsZXIgYmFjayB0byB0aGUgRUVQUk9NcyBhbmQgcmVsZWFzZSB0aGUgYWRhcHRlci5cbiYjNDM7ICogU2FmZSBhZnRlciBhIGZhaWxlZCBjbGFpbTogaXQgYWxzbyBjbGVhcnMgYSByZXF1ZXN0IHRoYXQgd2FzIG5ldmVyIGdyYW50ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX2J1c19yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLVx1MDAzZWNwbGRfYWRhcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhZGFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2FkYXAgPSBOVUxMO1xuJiM0MztcdGtmcmVlKGJwLVx1MDAzZWNwbGRfYnVmKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2J1ZiA9IE5VTEw7XG4mIzQzO1x0aTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbiYjNDM7XHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENsYWltIHRoZSBUTUMgYnVzIGZvciBhIENQTEQgb3BlcmF0aW9uLiAgSG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIG92ZXJcbiYjNDM7ICogdGhlIGhhbmRzaGFrZSBrZWVwcyBwdHBfb2NwX3JlYWRfZWVwcm9tKCksIHRoZSBudm1lbSBhdHRyaWJ1dGVzIGFuZCB0aGVcbiYjNDM7ICogYXQyNCBzeXNmcyBmaWxlcyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkIGF3YXkgZnJvbSB0aGVcbiYjNDM7ICogRUVQUk9Ncy4gIEEgZmlybXdhcmUgdXBsb2FkIGhvbGRzIGl0IGFjcm9zcyB0aGUgd2hvbGUgcHJlcGFyZS93cml0ZS9wb2xsXG4mIzQzOyAqIHNlcXVlbmNlLCBzbyBhbiBFRVBST00gcmVhZCBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcbiYjNDM7XHRpZiAoIWFkYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0LyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGEgZmlybXdhcmVcbiYjNDM7XHQgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGVcbiYjNDM7XHQgKiBhbGxvY2F0aW9uIGluc3RlYWQgb2Ygb25lIGZvciBlYWNoIDE2LWJ5dGUgcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicC1cdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VjcGxkX2J1Zikge1xuJiM0MztcdFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2FkYXAgPSBhZGFwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCBcdTAwM2MgMCAtIHRoZSBwb3dlci1vbiBzdGF0ZS5cbiYjNDM7ICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZVxuJiM0MzsgKiBFRVBST00gcGF0aHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaClcbiYjNDM7e1xuJiM0MztcdHU4IHZhbCA9IChjaCBcdTAwM2U9IDApID8gQklUKGNoKSA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX01VWF9BRERSLCB2YWwsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBcmd1bWVudCBieXRlcyB0aGF0IGZvbGxvdyBhbiBJU0Mgb3Bjb2RlLiAgUmV0dXJucyBOVUxMIHdpdGggQG5hcmdzIHNldFxuJiM0MzsgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdTggKmFkdmFfeDFfY3BsZF9hcmdzKHU4IGNtZCwgdTggKm5hcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVyYXNlX2NmZ1tdID0geyAweDA0LCAweDAwLCAweDAwIH07IC8qIGNmZyBzZWN0b3Igb25seSAqL1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNtZCkge1xuJiM0MztcdGNhc2UgQ1BMRF9DTURfRU5fQ0ZHX1RQOlxuJiM0MztcdFx0Km5hcmdzID0gc2l6ZW9mKGVuX2NmZ190cCk7XG4mIzQzO1x0XHRyZXR1cm4gZW5fY2ZnX3RwO1xuJiM0MztcdGNhc2UgQ1BMRF9DTURfRVJBU0U6XG4mIzQzO1x0XHQqbmFyZ3MgPSBzaXplb2YoZXJhc2VfY2ZnKTtcbiYjNDM7XHRcdHJldHVybiBlcmFzZV9jZmc7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9SRVNFVF9BRERSOlxuJiM0MztcdGNhc2UgQ1BMRF9DTURfU0VUX0RPTkU6XG4mIzQzO1x0XHQqbmFyZ3MgPSAzO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9ESVNfQ0ZHOlxuJiM0MztcdGNhc2UgQ1BMRF9DTURfUkVGUkVTSDpcbiYjNDM7XHRcdCpuYXJncyA9IDI7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0Km5hcmdzID0gMDtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dyaXRlKHN0cnVjdCBwdHBfb2NwICpicCwgdTggY21kKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTggKmFyZ3M7XG4mIzQzO1x0dTggbmFyZ3M7XG4mIzQzO1xuJiM0MztcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFx1MDAyNm5hcmdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBjbWQsIGFyZ3MsIG5hcmdzLCBOVUxMLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2VuZCBhIDQtYnl0ZSBjb21tYW5kIHRoZW4gcmVhZCBkYXRhIGJhY2sgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgU1RPUFxuJiM0MzsgKiAoTGF0dGljZSBjb21iaW5lZCB3cml0ZS1cdTAwM2VyZXBlYXRlZC1TVEFSVC1cdTAwM2VyZWFkKS4gIFR3byBtZXNzYWdlcyBpbiBvbmVcbiYjNDM7ICogdHJhbnNmZXIgaXMgZXhhY3RseSB0aGF0LCBzbyBubyBwcm90b2NvbC1tYW5nbGluZyBmbGFnIGlzIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCxcbiYjNDM7XHRcdFx0XHQgdTMyIGNtZF9iZSwgdTggKm91dCwgdTggb3V0X2xlbilcbiYjNDM7e1xuJiM0MztcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIC0xLCBcdTAwMjZjbWQsIDQsIG91dCwgb3V0X2xlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHR1OCBidWZbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX1NUQVRVUywgYnVmLCA0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgQ1BMRCBnb2VzIGlkbGUsIG9yIEBtYXhfbXMgZWxhcHNlcy5cbiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCxcbiYjNDM7ICogYW5kIHRoZSBzdGF0dXMgaXMgcmVhZCBvbmNlIG1vcmUgYWZ0ZXIgaXQgZXhwaXJlcyBiZWZvcmUgZ2l2aW5nIHVwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHRpbnQgZXJyLCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cywgZXJyLFxuJiM0MztcdFx0XHRcdGVyciB8fCBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpIHx8XG4mIzQzO1x0XHRcdFx0KHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxuJiM0MztcdFx0XHRcdCEoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbiYjNDM7XHRcdFx0XHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuJiM0MztcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpKVxuJiM0MztcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4mIzQzO1x0aWYgKGVyciB8fCAoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIHN0ZXAgYWJvcnRlZCBieSBjYW5jZWwoKSBtdXN0IGJlIHJlcG9ydGVkIGFzIHN1Y2gsIG5vdCBhcyBhIEhXIGVycm9yLiAqL1xuJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyIGFkdmFfY3BsZF9lcnIoc3RydWN0IHB0cF9vY3AgKmJwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkgPyBGV19VUExPQURfRVJSX0NBTkNFTEVEXG4mIzQzO1x0XHRcdFx0XHQgIDogRldfVVBMT0FEX0VSUl9IV19FUlJPUjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgb2YgdGhlIFRBUCBDUExELiAgSXQgaXMgYSBmaXhlZCBwcm9wZXJ0eSBvZlxuJiM0MzsgKiB0aGUgcGFydCwgc28gY2FjaGUgaXQgYW5kIHBheSB0aGUgYnVzIGFyYml0cmF0aW9uIG9ubHkgb25jZS4gIFRoZVxuJiM0MzsgKiBMQ01YTzNMRi0yMTAwIElEQ09ERSBpcyAweGUxMmJjMDQzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICppZClcbiYjNDM7e1xuJiM0MztcdHU4IGRhdGFbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNwbGRfaWQpIHtcbiYjNDM7XHRcdCppZCA9IGJwLVx1MDAzZWNwbGRfaWQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEEgQ1BMRCBvcGVyYXRpb24gY2FuIGhvbGQgY3BsZF9sb2NrIGEgbG9uZyB0aW1lOyBzdGF5IGtpbGxhYmxlLiAqL1xuJiM0MztcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVsZWFzZTtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0YnAtXHUwMDNlY3BsZF9pZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcbiYjNDM7XHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcbiYjNDM7cmVsZWFzZTpcbiYjNDM7XHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbiYjNDM7b3V0OlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0KmlkID0gYnAtXHUwMDNlY3BsZF9pZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiBcJiMzNDtkb25lPVx1MDAzYzB8MVx1MDAzZSBidXN5PVx1MDAzYzB8MVx1MDAzZSBmYWlsZWQ9XHUwMDNjMHwxXHUwMDNlXFxuXCYjMzQ7XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0MztjcGxkX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHQgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4mIzQzO1x0dTMyIHN0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbiYjNDM7XHRyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4mIzQzO1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4mIzQzO3JlbGVhc2U6XG4mIzQzO1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0ID8gcmV0IDogc3lzZnNfZW1pdChidWYsIFwmIzM0O2RvbmU9JXUgYnVzeT0ldSBmYWlsZWQ9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgISEoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpLFxuJiM0MztcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbiYjNDM7XHRcdFx0XHQgICAgICAhIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSk7XG4mIzQzO31cbiYjNDM7c3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUga2VybmVsIGZpcm13YXJlLXVwbG9hZCBzdWJzeXN0ZW0gKENPTkZJR19GV19VUExPQUQpIGV4cG9zZXM6XG4mIzQzOyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59XG4mIzQzOyAqIHdoZXJlIE4gaXMgdGhlIGluZGV4IG9mIHRoZSBvd25pbmcgb2NwTiBkZXZpY2UuXG4mIzQzOyAqIFVzZXJzcGFjZSB3cml0ZXMgdGhlIHJhdyBiaW5hcnkgcGFnZSBkYXRhIGRpcmVjdGx5IOKAlCBubyAvbGliL2Zpcm13YXJlL1xuJiM0MzsgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsYmFjayBzZXF1ZW5jZSBkcml2ZW4gYnkgdGhlIGZyYW1ld29yazpcbiYjNDM7ICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaFxuJiM0MzsgKiAgIHdyaXRlKCkgICAgICAgIC0gcHJvZ3JhbSBvbmUgMTYtYnl0ZSBwYWdlIHBlciBjYWxsXG4mIzQzOyAqICAgcG9sbF9jb21wbGV0ZSgpLSBzZXQgRE9ORSwgUkVGUkVTSCwgd2FpdCBmb3IgQ1BMRCB0byByZWJvb3RcbiYjNDM7ICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrXG4mIzQzOyAqICAgY2xlYW51cCgpICAgICAgLSByZWxlYXNlIGJ1cyByZXNvdXJjZXMgKGNhbGxlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXG4mIzQzO2FkdmFfY3BsZF9wcmVwYXJlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsIHUzMiBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBmd191cGxvYWRfZXJyIHJldCA9IEZXX1VQTE9BRF9FUlJfTk9ORTtcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXHUwMDNlZGRfaGFuZGxlO1xuJiM0MztcbiYjNDM7XHQvKiBEbyBub3QgY2xlYXIgY3BsZF9jYW5jZWwgaGVyZTogZndfdXBsb2FkX3N0YXJ0KCkgcXVldWVzIHRoZSB3b3JrXG4mIzQzO1x0ICogYmVmb3JlIHRoaXMgcnVucywgc28gYSBjYW5jZWwgbWF5IGFscmVhZHkgaGF2ZSBhcnJpdmVkLiAgSXQgaXNcbiYjNDM7XHQgKiBjbGVhcmVkIG9uY2UgdGhlIHVwbG9hZCBpcyBvdmVyLCBvbiBldmVyeSBleGl0IGJlbG93IGFuZCBpblxuJiM0MztcdCAqIGNsZWFudXAoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNpemUgfHwgc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4mIzQzO1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9JTlZBTElEX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfYnVzX2NsYWltKGJwKSkge1xuJiM0MztcdFx0cmV0ID0gRldfVVBMT0FEX0VSUl9USU1FT1VUO1xuJiM0MztcdFx0Z290byBlcnJfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCkpIHtcbiYjNDM7XHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4mIzQzO1x0XHRnb3RvIGVycl9yZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBpc3N1aW5nIEVOX0NGR19UUCwgbm90IGFmdGVyIGl0IGNvbXBsZXRlczogdGhlIENQTEQgbWF5XG4mIzQzO1x0ICogaGF2ZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gbW9kZSBldmVuIGlmIHRoZSB3cml0ZSByZXBvcnRzIGFuIGVycm9yXG4mIzQzO1x0ICogb3IgdGhlIHdhaXQgYmVsb3cgdGltZXMgb3V0LCBhbmQgZXJyX2Rlc2VsZWN0IG9ubHkgc2VuZHMgRElTX0NGR1xuJiM0MztcdCAqIHdoZW4gdGhpcyBpcyBzZXQuICBBIERJU19DRkcgdG8gYSBkZXZpY2UgdGhhdCBuZXZlciBlbnRlcmVkIHRoZVxuJiM0MztcdCAqIG1vZGUgaXMgaGFybWxlc3M7IGxlYXZpbmcgaXQgZW5hYmxlZCBpcyBub3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCkgfHxcbiYjNDM7XHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApKSB7XG4mIzQzO1x0XHRyZXQgPSBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkpIHtcbiYjNDM7XHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4mIzQzO1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VSQVNFKSB8fFxuJiM0MztcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTUwMDApKSB7XG4mIzQzO1x0XHRyZXQgPSBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkpIHtcbiYjNDM7XHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4mIzQzO1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpKSB7XG4mIzQzO1x0XHRyZXQgPSBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xuJiM0MztcdFx0Z290byBlcnJfZGVzZWxlY3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBjbGVhbnVwKCkgdW5sb2NrcyBldmVyeXRoaW5nLiAgZndfdXBsb2FkX21haW4oKSBvbmx5IHBhaXJzIGl0IHdpdGhcbiYjNDM7XHQgKiBhIHByZXBhcmUoKSB0aGF0IHN1Y2NlZWRlZCwgc28gdGhlIGVycm9yIHBhdGhzIGJlbG93IHVubG9jayBoZXJlXG4mIzQzO1x0ICogaW5zdGVhZDsgaGFuZCB0aGUgY29udGV4dCB0byBjbGVhbnVwKCkgZm9yIHNwYXJzZSYjMzk7cyBiZW5lZml0LlxuJiM0MztcdCAqL1xuJiM0MztcdF9fcmVsZWFzZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XG4mIzQzO1xuJiM0MztlcnJfZGVzZWxlY3Q6XG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUpIHtcbiYjNDM7XHRcdGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4mIzQzO1x0XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuJiM0MztlcnJfcmVsZWFzZTpcbiYjNDM7XHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbiYjNDM7ZXJyX3VubG9jazpcbiYjNDM7XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGVudW0gZndfdXBsb2FkX2VyclxuJiM0MzthZHZhX2NwbGRfd3JpdGUoc3RydWN0IGZ3X3VwbG9hZCAqZndsLCBjb25zdCB1OCAqZGF0YSxcbiYjNDM7XHRcdHUzMiBvZmZzZXQsIHUzMiBzaXplLCB1MzIgKndyaXR0ZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXHUwMDNlZGRfaGFuZGxlO1xuJiM0MztcdHU4IGFyZ3NbMyAmIzQzOyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSlcbiYjNDM7XHRcdHJldHVybiBGV19VUExPQURfRVJSX0NBTkNFTEVEO1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2MgQ1BMRF9QQUdFX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9JTlZBTElEX1NJWkU7XG4mIzQzO1xuJiM0MztcdG1lbWNweShcdTAwMjZhcmdzWzNdLCBkYXRhICYjNDM7IG9mZnNldCwgQ1BMRF9QQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRpZiAoYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXG4mIzQzO1x0XHRcdCAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKSB8fFxuJiM0MztcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTAwKSlcbiYjNDM7XHRcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XG4mIzQzO1x0KndyaXR0ZW4gPSBDUExEX1BBR0VfU0laRTtcbiYjNDM7XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXG4mIzQzO2FkdmFfY3BsZF9wb2xsX2NvbXBsZXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3bClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHR1MzIgc3Q7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkpXG4mIzQzO1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfU0VUX0RPTkUpIHx8XG4mIzQzO1x0ICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKSlcbiYjNDM7XHRcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXHUwMDI2c3QpIHx8ICEoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpKVxuJiM0MztcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4mIzQzO1xuJiM0MztcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFRlJFU0gpKVxuJiM0MztcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4mIzQzO1xuJiM0MztcdC8qIFJFRlJFU0ggcmVib290cyB0aGUgQ1BMRCBvdXQgb2YgY29uZmlndXJhdGlvbiBtb2RlLCBzbyBjbGVhbnVwKClcbiYjNDM7XHQgKiBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZmFpbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBuZXcgaW1hZ2UgaXMgYWxyZWFkeSBydW5uaW5nIGF0IHRoaXMgcG9pbnQsIHNvIGEgc2VnbWVudCB0aGF0XG4mIzQzO1x0ICogaXMgbm90IGJhY2sgeWV0IG11c3Qgbm90IGJlIHJlcG9ydGVkIGFzIGEgZmFpbGVkIHVwZGF0ZTogcmV0cnkgdGhlXG4mIzQzO1x0ICogcmVzZWxlY3QgaW5zdGVhZCBvZiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2xlZXAoMTUwMCk7XG4mIzQzO1x0aWYgKHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXG4mIzQzO1x0XHRcdCAgICAgIDMwMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcbiYjNDM7XHRcdFx0ICAgICAgYnAsIEFEVkFfTVVYX0NIQU5ORUwpKVxuJiM0MztcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfVElNRU9VVDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAzMDAwKSlcbiYjNDM7XHRcdHJldHVybiBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRFxuJiM0MztcdFx0XHRcdFx0XHQgIDogRldfVVBMT0FEX0VSUl9USU1FT1VUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZHZhX2NwbGRfY2FuY2VsKHN0cnVjdCBmd191cGxvYWQgKmZ3bClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZHZhX2NwbGRfY2xlYW51cChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXHUwMDNlZGRfaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRfX2FjcXVpcmUoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcdC8qIGhlbGQgc2luY2UgcHJlcGFyZSgpIHJldHVybmVkIG9rICovXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoYnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSkge1xuJiM0MztcdFx0YWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9ESVNfQ0ZHKTtcbiYjNDM7XHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4mIzQzO1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCwgZmFsc2UpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X3VwbG9hZF9vcHMgYWR2YV9jcGxkX3VwbG9hZF9vcHMgPSB7XG4mIzQzO1x0LnByZXBhcmVcdCA9IGFkdmFfY3BsZF9wcmVwYXJlLFxuJiM0MztcdC53cml0ZVx0XHQgPSBhZHZhX2NwbGRfd3JpdGUsXG4mIzQzO1x0LnBvbGxfY29tcGxldGVcdCA9IGFkdmFfY3BsZF9wb2xsX2NvbXBsZXRlLFxuJiM0MztcdC5jYW5jZWxcdFx0ID0gYWR2YV9jcGxkX2NhbmNlbCxcbiYjNDM7XHQuY2xlYW51cFx0ID0gYWR2YV9jcGxkX2NsZWFudXAsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiAmIzQzOzQ5MzIsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0ge1xuIFx0XHUwMDI2ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsXG4mIzQzO1x0XHUwMDI2ZGV2X2F0dHJfY3BsZF9zdGF0dXMuYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC00ODY3LDYgJiM0Mzs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiB7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHQvKiBNdXN0IGNvbWUgZmlyc3Q6IGNhbmNlbHMgYW5kIGZsdXNoZXMgYW4gaW4tZmxpZ2h0IHVwbG9hZCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBJMkMgY29udHJvbGxlciBpcyBzdGlsbCB1cCwgYW5kIGRyb3BzIGNwbGRfbG9jayBzbyBhIGNwbGRfc3RhdHVzXG4mIzQzO1x0ICogcmVhZGVyIGNhbm5vdCBzdGFsbCBwdHBfb2NwX2F0dHJfZ3JvdXBfZGVsKCkgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJwLVx1MDAzZWNwbGRfZndfdXBsb2FkKSB7XG4mIzQzO1x0XHRmaXJtd2FyZV91cGxvYWRfdW5yZWdpc3RlcihicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCk7XG4mIzQzO1x0XHRicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHB0cF9vY3BfZGVidWdmc19yZW1vdmVfZGV2aWNlKGJwKTtcbiBcdHB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTtcbiBcdHB0cF9vY3BfYXR0cl9ncm91cF9kZWwoYnApO1xuQEAgLTQ5MDQsNiAmIzQzOzU1NzIsNyBAQCBwdHBfb2NwX2RldGFjaChzdHJ1Y3QgcHRwX29jcCAqYnApXG4gXHRcdGNsa19od191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUoYnAtXHUwMDNlaTJjX2Nsayk7XG4gXHRpZiAoYnAtXHUwMDNlbl9pcnFzKVxuIFx0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhicC1cdTAwM2VwZGV2KTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4gXHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZicC1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC01MDgwLDYgJiM0Mzs1NzQ5LDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4mIzQzO1x0LyogTXVzdCBiZSBiZWZvcmUgdGhlIGZpcnN0IGVycm9yIHBhdGggdGhhdCBjYWxscyBwdHBfb2NwX2RldGFjaCgpLFxuJiM0MztcdCAqIHNvIG11dGV4X2Rlc3Ryb3koKSBhbHdheXMgcnVucyBvbiBhbiBpbml0aWFsaXNlZCBtdXRleC5cbiYjNDM7XHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXG4mIzQzO1x0ICogbm90aWZpZXIgKHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwpIGZpcmVzIHdoZW4gdGhlIGFkYXB0ZXJcbiYjNDM7XHQgKiByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgYWRhcHRlciBudW1iZXIgaW4gY3BsZF9pMmNfYWRhcF9ucjsgdGhlXG4mIzQzO1x0ICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyXG4mIzQzO1x0ICogZmlyaW5nIGR1cmluZyByZWdpc3RyYXRpb24gaXMgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgdGhpcyBpbml0LlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yID0gLTE7XG4mIzQzO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MjE5LDExICYjNDM7NTg5OSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbiYjNDM7XHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBDYWNoZSBhZGFwdGVyIG5yOyB1c2VkIGJ5IHRoZSBDUExEIHN0YXR1cy9pZC91cGxvYWQgcGF0aHNcbiYjNDM7XHRcdCAqIGZvciByZWZlcmVuY2UtY291bnRlZCB1bmJpbmQtc2FmZSBhZGFwdGVyIGFjY2Vzcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLVx1MDAzZW5yKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCAtMSk7IC8qIGludmFsaWRhdGUgYmVmb3JlIGZyZWUgKi9cbiBcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRiMjVlNGVmMjg0M2RjM2VhZjI3OGQ2ZjU5ZmVjNzcwNGJmNTMyYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDE2OjM2OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQKaW5kZXggM2FlNDFiNzYzNGFjOS4uNDFlZWFkZDQ2MzMwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCkBAIC0xMSw2ICYjNDM7MTEsMzAgQEAgQ29udGFjdDoJSm9uYXRoYW4gTGVtb24gJmx0O2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbSZndDsKIERlc2NyaXB0aW9uOglUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkCiAJCXJlZ2lzdGVyZWQuCiAKJiM0MztXaGF0OgkJL3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzCiYjNDM7RGF0ZToJCUp1bHkgMjAyNgomIzQzO0NvbnRhY3Q6CVNhZ2kgTWFpbW9uICZsdDttYWltb24uc2FnaUBnbWFpbC5jb20mZ3Q7CiYjNDM7RGVzY3JpcHRpb246CShSTywgcm9vdCBvbmx5KSBUaGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZSBUQVAgQ1BMRCwgaW4KJiM0MzsJCWh1bWFuLXJlYWRhYmxlIGZvcm06CiYjNDM7CiYjNDM7CQkgIGRvbmU9Jmx0OzB8MSZndDsgYnVzeT0mbHQ7MHwxJmd0OyBmYWlsZWQ9Jmx0OzB8MSZndDsKJiM0MzsKJiM0MzsJCU9ubHkgcHJlc2VudCBvbiBBRFZBIHgxIFRBUCBib2FyZHMgKFBDSSBJRCAweGFkNWE6MHgwNDEwKS4KJiM0MzsKJiM0MzsJCWRvbmU9MSBpbmRpY2F0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggd2FzIHN1Y2Nlc3NmdWxseQomIzQzOwkJcHJvZ3JhbW1lZCBhbmQgaXMgYWN0aXZlLiAgYnVzeT0xIG1lYW5zIGFuIGludGVybmFsIG9wZXJhdGlvbgomIzQzOwkJaXMgaW4gcHJvZ3Jlc3MuICBmYWlsZWQ9MSBtZWFucyB0aGUgbGFzdCBJU0Mgb3BlcmF0aW9uIGZhaWxlZC4KJiM0MzsKJiM0MzsJCUEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlCiYjNDM7CQlvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlCiYjNDM7CQlJRCBvZiB0aGUgQ1BMRCBpcyByZXBvcnRlZCBhcyB0aGUgZml4ZWQgJiMzNDtjcGxkLmlkJiMzNDsgdmVyc2lvbiBieQomIzQzOwkJZGV2bGluayBkZXYgaW5mby4KJiM0MzsKJiM0MzsJCVRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwKJiM0MzsJCWZpcm13YXJlLXVwbG9hZCBpbnRlcmZhY2UsIHJlZ2lzdGVyZWQgcGVyIGNhcmQgYXQ6CiYjNDM7CQkvc3lzL2NsYXNzL2Zpcm13YXJlL2FkdmEtY3BsZC5OLwomIzQzOwkJd2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS4KJiM0MzsKIFdoYXQ6CQkvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vYXZhaWxhYmxlX2Nsb2NrX3NvdXJjZXMKIERhdGU6CQlTZXB0ZW1iZXIgMjAyMQogQ29udGFjdDoJSm9uYXRoYW4gTGVtb24gJmx0O2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbSZndDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL0tjb25maWcgYi9kcml2ZXJzL3B0cC9LY29uZmlnCmluZGV4IGZlYjUwZjhjYzQwNmEuLjI0ZjA0N2MzN2U0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHRwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvS2NvbmZpZwpAQCAtMjE5LDYgJiM0MzsyMTksOCBAQCBjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiAJc2VsZWN0IENSQzE2CiAJc2VsZWN0IERQTEwKJiM0MzsJc2VsZWN0IEZXX0xPQURFUgomIzQzOwlzZWxlY3QgRldfVVBMT0FECiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBhbiBPcGVuQ29tcHV0ZSB0aW1lIGNhcmQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuYwppbmRleCAzZDI2ZWMxZjdiOWVjLi44NmQxYzFhMzExY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX29jcC5jCkBAIC0yMCwxMCAmIzQzOzIwLDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpL2FsdGVyYS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L210ZC9tdGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9udm1lbS1jb25zdW1lci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYzE2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FVEFfVElNRUNBUkQJCTB4MDQwMAogCkBAIC04NSw2ICYjNDM7ODksNyBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8gewogCXU4CQkJCXNpZ25hbHNfbnI7CiAJdTgJCQkJZnJlcV9pbl9ucjsKIAljb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAJKmF0dHJfZ3JvdXBzOwomIzQzOwlib29sCQkJCWhhc19jcGxkOyAvKiB4MTogc3VwcG9ydHMgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgKi8KIH07CiAKICNkZWZpbmUgT0NQX0NUUkxfRU5BQkxFCQlCSVQoMCkKQEAgLTE2Myw3ICYjNDM7MTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHsKIAl1MzIJZ3BpbzE7CiAJdTMyCV9fcGFkMDsKIAl1MzIJZ3BpbzI7Ci0JdTMyCV9fcGFkMTsKJiM0MzsJLyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovCiYjNDM7CXUzMglpMmNfYnVzX2N0cmw7CiB9OwogCiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHsKQEAgLTQxNiw2ICYjNDM7NDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHsKIAlkcGxsX3RyYWNrZXIgdHJhY2tlcjsKIAlpbnQgc2lnbmFsc19ucjsKIAlpbnQgZnJlcV9pbl9ucjsKJiM0MzsJLyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovCiYjNDM7CXN0cnVjdCBtdXRleAkJY3BsZF9sb2NrOyAgICAgICAgICAgIC8qIHNlcmlhbGlzZXMgQ1BMRCBvcGVyYXRpb25zICovCiYjNDM7CWludAkJCWNwbGRfaTJjX2FkYXBfbnI7ICAgICAvKiBJMkMgYWRhcHRlciBucjsgLTEgaWYgYWJzZW50ICovCiYjNDM7CXN0cnVjdCBpMmNfYWRhcHRlcgkqY3BsZF9hZGFwOyAgICAgICAgICAgLyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi8KJiM0MzsJdTgJCQkqY3BsZF9idWY7ICAgICAgICAgICAgLyogRE1BLXNhZmUgc2NyYXRjaDsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovCiYjNDM7CXUzMgkJCWNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovCiYjNDM7CWJvb2wJCQloYXNfY3BsZDsgICAgICAgICAgICAgLyogeDEgVEFQIENQTEQgcHJlc2VudCAqLwomIzQzOwlzdHJ1Y3QgZndfdXBsb2FkCSpjcGxkX2Z3X3VwbG9hZDsgICAgICAvKiBmaXJtd2FyZSB1cGxvYWQgaGFuZGxlOyBOVUxMIGlmIGFic2VudCAqLwomIzQzOwlib29sCQkJY3BsZF9jYW5jZWw7ICAgICAgICAgIC8qIGNhbmNlbGxhdGlvbiByZXF1ZXN0ZWQgKi8KJiM0MzsJYm9vbAkJCWNwbGRfaW5fY29uZmlnX21vZGU7ICAvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gmIzM5O2QgKi8KIH07CiAKICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVAJQklUKDApCkBAIC00NDksOCAmIzQzOzQ2NSwxMSBAQCBzdGF0aWMgaW50IHB0cF9vY3BfYXJ0X2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTsKIAogc3RhdGljIGludCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpOwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmd191cGxvYWRfb3BzIGFkdmFfY3BsZF91cGxvYWRfb3BzOwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3NtYV9vcDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7CiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICppZCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107CiAKQEAgLTEyNzMsNiAmIzQzOzEyOTIsNyBAQCBzdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV94MV9yZXNvdXJjZVtdID0gewogCQkJLnNpZ25hbHNfbnIgICA9IDQsCiAJCQkuZnJlcV9pbl9uciAgID0gNCwKIAkJCS5hdHRyX2dyb3VwcyAgPSBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwcywKJiM0MzsJCQkuaGFzX2NwbGQgICAgID0gdHJ1ZSwKIAkJfSwKIAl9LAogCXsgfQpAQCAtMjE4NSw2ICYjNDM7MjIwNSwxOSBAQCBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwlpZiAoYnAtJmd0O2hhc19jcGxkKSB7CiYjNDM7CQl1MzIgaWQ7CiYjNDM7CiYjNDM7CQllcnIgPSBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKGJwLCAmYW1wO2lkKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCXNwcmludGYoYnVmLCAmIzM0OzB4JTA4eCYjMzQ7LCBpZCk7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCAmIzM0O2NwbGQuaWQmIzM0OywgYnVmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0zMTk5LDYgJiM0MzszMjMyLDMwIEBAIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcikKIAkJcmV0dXJuIGVycjsKIAlwdHBfb2NwX3NtYV9pbml0KGJwKTsKIAomIzQzOwlicC0mZ3Q7aGFzX2NwbGQgPSBpbmZvLSZndDtoYXNfY3BsZDsKJiM0MzsJaWYgKGJwLSZndDtoYXNfY3BsZCkgewomIzQzOwkJc3RydWN0IGZ3X3VwbG9hZCAqZndsOwomIzQzOwkJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsKJiM0MzsJCS8qIE9uZSBpbnN0YW5jZSBwZXIgY2FyZCwgbnVtYmVyZWQgbGlrZSB0aGUgb2NwTiBkZXZpY2UuCiYjNDM7CQkgKiBmaXJtd2FyZV91cGxvYWRfcmVnaXN0ZXIoKSBrZWVwcyB0aGUgcG9pbnRlciByYXRoZXIgdGhhbgomIzQzOwkJICogY29weWluZyB0aGUgc3RyaW5nLCBzbyBpdCBoYXMgdG8gb3V0bGl2ZSB0aGUgcmVnaXN0cmF0aW9uLgomIzQzOwkJICovCiYjNDM7CQluYW1lID0gZGV2bV9rYXNwcmludGYoJmFtcDticC0mZ3Q7cGRldi0mZ3Q7ZGV2LCBHRlBfS0VSTkVMLAomIzQzOwkJCQkgICAgICAmIzM0O2FkdmEtY3BsZC4lZCYjMzQ7LCBicC0mZ3Q7aWQpOwomIzQzOwkJaWYgKCFuYW1lKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCAmYW1wO2JwLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgICAgICAgbmFtZSwgJmFtcDthZHZhX2NwbGRfdXBsb2FkX29wcywgYnApOwomIzQzOwkJaWYgKElTX0VSUihmd2wpKQomIzQzOwkJCWRldl93YXJuKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7Q1BMRCBmaXJtd2FyZSB1cGxvYWQgdW5hdmFpbGFibGU6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBmd2wpOwomIzQzOwkJZWxzZQomIzQzOwkJCWJwLSZndDtjcGxkX2Z3X3VwbG9hZCA9IGZ3bDsKJiM0MzsJfQomIzQzOwogCXJldHVybiBwdHBfb2NwX2luaXRfY2xvY2soYnAsICZhbXA7aW5mby0mZ3Q7c2Vydm8pOwogfQogCkBAIC00MjI2LDYgJiM0Mzs0MjgzLDYwNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHsKIAl7IH0sCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBJbnRlcm5hbCBoZWxwZXJzIGZvciB0aGUgYWR2YV94MSBUQVAgQ1BMRCAoTGF0dGljZSBMQ01YTzNMRi0yMTAwKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBjYXJkIGhhcyB0d28gSTJDIGNvbnRyb2xsZXJzOyBMaW51eCByZWdpc3RlcnMgb25seSAweDAwMTUwMDAwLgomIzQzOyAqIFRoZSBpMmNfYnVzX2N0cmwgaGFuZHNoYWtlIHJlLXJvdXRlcyB3aGF0IGVhY2ggb25lIGlzIHdpcmVkIHRvOgomIzQzOyAqCiYjNDM7ICogICBncmFudCAwOiAgMHgxNTAwMDAgLSZndDsgRUVQUk9NcyAgICAgMHgxMjAwMDAgLSZndDsgVE1DIG9yIE0uMiwgTUImIzM5O3MgY2hvaWNlCiYjNDM7ICogICBncmFudCAxOiAgMHgxNTAwMDAgLSZndDsgVE1DIGJ1cyAgICAgMHgxMjAwMDAgLSZndDsgTS4yCiYjNDM7ICoKJiM0MzsgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIHNpdCBvbgomIzQzOyAqIHRoZSBUTUMgYnVzLCBzbyB0aGV5IGFyZSByZWFjaGFibGUgb25seSB3aGlsZSB0aGUgZ3JhbnQgaXMgaGVsZC4gIEZvcgomIzQzOyAqIHRoYXQgc2FtZSB3aW5kb3cgdGhlIEVFUFJPTXMgYXJlIG5vdCBiZWhpbmQgdGhlIGFkYXB0ZXIgYXQgYWxsLCBzbyBhCiYjNDM7ICogQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrIGFuZCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBhY3Jvc3MgaXQgdG8KJiM0MzsgKiBrZWVwIHRoZSBFRVBST00gYW5kIG52bWVtIHBhdGhzIG9mZiB0aGUgY29udHJvbGxlci4KJiM0MzsgKgomIzQzOyAqIE5vIHJhdyBJMkMgYWNjZXNzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvbmx5IHRoZSBhdHRyaWJ1dGVzIGJlbG93LgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NAomIzQzOyNkZWZpbmUgQURWQV9DUExEX0FERFIgICAgMHg0MAomIzQzOyNkZWZpbmUgQURWQV9NVVhfQ0hBTk5FTCAgMAomIzQzOwomIzQzOy8qIExvbmdlc3QgY29tbWFuZCBvciByZXBseTsgYm91bmRzIGVhY2ggaGFsZiBvZiB0aGUgcGVyLWNsYWltIHNjcmF0Y2guICovCiYjNDM7I2RlZmluZSBBRFZBX0NQTERfWEZFUl9NQVggMzIKJiM0MzsKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRVFVRVNUICAgIDB4MDAwMGFhYWFVCiYjNDM7I2RlZmluZSBNQkxBWkVfR1JBTlRFRCAgICAweDU1NTVhYWFhVQomIzQzOyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFUKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRVRSSUVTICAgIDIwMAomIzQzOyNkZWZpbmUgTUJMQVpFX1JFVFJZX1VTICAgMTAwMDAKJiM0MzsKJiM0MzsvKiBMYXR0aWNlIExDTVhPM0xGIElTQyBjb21tYW5kIGNvZGVzICovCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX0lEICAgICAgMHhFMDAwMDAwMFVMCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX1NUQVRVUyAgMHgzQzAwMDAwMFVMCiYjNDM7I2RlZmluZSBDUExEX0NNRF9FTl9DRkdfVFAgICAgMHg3NCAgIC8qIGVuYWJsZSBjb25maWcsIHRyYW5zcGFyZW50IG1vZGUgKi8KJiM0MzsjZGVmaW5lIENQTERfQ01EX0RJU19DRkcgICAgICAweDI2CiYjNDM7I2RlZmluZSBDUExEX0NNRF9FUkFTRSAgICAgICAgMHgwRQomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVTRVRfQUREUiAgIDB4NDYKJiM0MzsjZGVmaW5lIENQTERfQ01EX1dSSVRFX1BBR0UgICAweDcwCiYjNDM7I2RlZmluZSBDUExEX0NNRF9TRVRfRE9ORSAgICAgMHg1RQomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVGUkVTSCAgICAgIDB4NzkKJiM0MzsjZGVmaW5lIENQTERfUEFHRV9TSVpFICAgICAgICAxNgomIzQzOyNkZWZpbmUgQ1BMRF9QT0xMX1VTICAgICAgICAgIDEwMDAwICAvKiBzdGF0dXMgcG9sbCBpbnRlcnZhbCB3aGlsZSBidXN5ICovCiYjNDM7CiYjNDM7LyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqLwomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KQomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMikKJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBhZHZhX3gxX2kyY194ZmVyKCkgLSBpc3N1ZSBhIHNpbmdsZSBJMkMgdHJhbnNhY3Rpb24gb24gdGhlIFRNQyBidXMuCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgQGNtZCB3aGVuIGl0IGlzIG5vdCBuZWdhdGl2ZSwgZm9sbG93ZWQgYnkgQHdsZW4gYnl0ZXMgb2YgQHdkYXRhLAomIzQzOyAqIHRoZW4gcmVhZHMgQHJsZW4gYnl0ZXMgaWYgYXNrZWQuICBBIE5VTEwgQHdkYXRhIHNlbmRzIHplcm9zLgomIzQzOyAqCiYjNDM7ICogVGhlIG1lc3NhZ2UgaXMgYXNzZW1ibGVkIGluIHRoZSBzY3JhdGNoIGJ1ZmZlciB0YWtlbiBieQomIzQzOyAqIGFkdmFfeDFfYnVzX2NsYWltKCksIHdoaWNoIHRoZSBYaWxpbnggY29udHJvbGxlciBuZWVkcyBmb3IgRE1BIHNhZmV0eToKJiM0MzsgKiBhbiBvcGNvZGUgYW5kIGl0cyBhcmd1bWVudHMgYXJlIGNvcGllZCBleGFjdGx5IG9uY2UsIGFuZCBhIGZpcm13YXJlCiYjNDM7ICogdXBsb2FkIGNvc3RzIG9uZSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIG9uZSBwZXIgcGFnZS4KJiM0MzsgKgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgdGhhdCBjbGFpbSwgaGVuY2UgX19pMmNfdHJhbnNmZXIoKSBvdmVyIGkyY190cmFuc2ZlcigpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9pMmNfeGZlcihzdHJ1Y3QgcHRwX29jcCAqYnAsIHU4IGFkZHIsIGludCBjbWQsCiYjNDM7CQkJICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLAomIzQzOwkJCSAgICB2b2lkICpyZGF0YSwgdTggcmxlbikKJiM0Mzt7CiYjNDM7CXU4ICp3YnVmLCAqcmJ1ZjsKJiM0MzsJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOwomIzQzOwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOwomIzQzOwlpbnQgbm1zZ3MgPSAwLCByZXQ7CiYjNDM7CXUxNiBoZHIgPSBjbWQgJmd0Oz0gMDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwomIzQzOwlhZGFwID0gYnAtJmd0O2NwbGRfYWRhcDsKJiM0MzsJaWYgKCFhZGFwIHx8ICFicC0mZ3Q7Y3BsZF9idWYpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJaWYgKGhkciAmIzQzOyB3bGVuICZndDsgQURWQV9DUExEX1hGRVJfTUFYIHx8IHJsZW4gJmd0OyBBRFZBX0NQTERfWEZFUl9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJd2J1ZiA9IGJwLSZndDtjcGxkX2J1ZjsKJiM0MzsJcmJ1ZiA9IGJwLSZndDtjcGxkX2J1ZiAmIzQzOyBBRFZBX0NQTERfWEZFUl9NQVg7CiYjNDM7CiYjNDM7CWlmIChoZHIgJiM0Mzsgd2xlbikgewomIzQzOwkJaWYgKGhkcikKJiM0MzsJCQl3YnVmWzBdID0gY21kOwomIzQzOwkJaWYgKHdkYXRhKQomIzQzOwkJCW1lbWNweSh3YnVmICYjNDM7IGhkciwgd2RhdGEsIHdsZW4pOwomIzQzOwkJZWxzZQomIzQzOwkJCW1lbXNldCh3YnVmICYjNDM7IGhkciwgMCwgd2xlbik7CiYjNDM7CQltc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpewomIzQzOwkJCS5hZGRyICA9IGFkZHIsCiYjNDM7CQkJLmZsYWdzID0gSTJDX01fRE1BX1NBRkUsCiYjNDM7CQkJLmxlbiAgID0gaGRyICYjNDM7IHdsZW4sCiYjNDM7CQkJLmJ1ZiAgID0gd2J1ZiwKJiM0MzsJCX07CiYjNDM7CX0KJiM0MzsJaWYgKHJsZW4pIHsKJiM0MzsJCW1zZ3Nbbm1zZ3MmIzQzOyYjNDM7XSA9IChzdHJ1Y3QgaTJjX21zZyl7CiYjNDM7CQkJLmFkZHIgID0gYWRkciwKJiM0MzsJCQkuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX0RNQV9TQUZFLAomIzQzOwkJCS5sZW4gICA9IHJsZW4sCiYjNDM7CQkJLmJ1ZiAgID0gcmJ1ZiwKJiM0MzsJCX07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gX19pMmNfdHJhbnNmZXIoYWRhcCwgbXNncywgbm1zZ3MpOwomIzQzOwlpZiAocmV0ICE9IG5tc2dzKQomIzQzOwkJcmV0dXJuIChyZXQgJmx0OyAwKSA/IHJldCA6IC1FSU87CiYjNDM7CiYjNDM7CWlmIChyZGF0YSAmYW1wOyZhbXA7IHJsZW4pCiYjNDM7CQltZW1jcHkocmRhdGEsIHJidWYsIHJsZW4pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwlpZiAoYnAtJmd0O3Bwc19zZWxlY3QpCiYjNDM7CQlpb3dyaXRlMzIoTUJMQVpFX1JFTEVBU0UsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFjcXVpcmUgdGhlIHNoYXJlZCBJMkMgYnVzIGZyb20gdGhlIE1pY3JvQmxhemUgZmlybXdhcmUuICBSZXR1cm5zIHdpdGggbm8KJiM0MzsgKiByZXF1ZXN0IG91dHN0YW5kaW5nIG9uIGZhaWx1cmUsIHNvIHRoZSBmaXJtd2FyZSBpcyBuZXZlciBsZWZ0IGdyYW50aW5nIGEKJiM0MzsgKiBzZWdtZW50IHRvIGEgaG9zdCB0aGF0IGhhcyBnaXZlbiB1cCB3YWl0aW5nIGZvciBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghYnAtJmd0O3Bwc19zZWxlY3QpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJLyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2sKJiM0MzsJICoga2VlcHMgbGl2ZSBvbmVzIG91dC4gIFRoZSByZWFkIGJhY2sgb25seSBmbHVzaGVzIHRoZSBwb3N0ZWQgd3JpdGUuCiYjNDM7CSAqLwomIzQzOwlpb3dyaXRlMzIoMCwgJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsJaW9yZWFkMzIoJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsKJiM0MzsJaW93cml0ZTMyKE1CTEFaRV9SRVFVRVNULCAmYW1wO2JwLSZndDtwcHNfc2VsZWN0LSZndDtpMmNfYnVzX2N0cmwpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUJMQVpFX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgJiM0MzsgMTAwMCk7CiYjNDM7CQl2YWwgPSBpb3JlYWQzMigmYW1wO2JwLSZndDtwcHNfc2VsZWN0LSZndDtpMmNfYnVzX2N0cmwpOwomIzQzOwkJaWYgKHZhbCA9PSBNQkxBWkVfR1JBTlRFRCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJvdXRlIHRoZSBob3N0IGNvbnRyb2xsZXIgYmFjayB0byB0aGUgRUVQUk9NcyBhbmQgcmVsZWFzZSB0aGUgYWRhcHRlci4KJiM0MzsgKiBTYWZlIGFmdGVyIGEgZmFpbGVkIGNsYWltOiBpdCBhbHNvIGNsZWFycyBhIHJlcXVlc3QgdGhhdCB3YXMgbmV2ZXIgZ3JhbnRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX2J1c19yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLSZndDtjcGxkX2FkYXA7CiYjNDM7CiYjNDM7CWlmICghYWRhcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7CiYjNDM7CWJwLSZndDtjcGxkX2FkYXAgPSBOVUxMOwomIzQzOwlrZnJlZShicC0mZ3Q7Y3BsZF9idWYpOwomIzQzOwlicC0mZ3Q7Y3BsZF9idWYgPSBOVUxMOwomIzQzOwlpMmNfdW5sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpOwomIzQzOwlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2xhaW0gdGhlIFRNQyBidXMgZm9yIGEgQ1BMRCBvcGVyYXRpb24uICBIb2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgb3ZlcgomIzQzOyAqIHRoZSBoYW5kc2hha2Uga2VlcHMgcHRwX29jcF9yZWFkX2VlcHJvbSgpLCB0aGUgbnZtZW0gYXR0cmlidXRlcyBhbmQgdGhlCiYjNDM7ICogYXQyNCBzeXNmcyBmaWxlcyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkIGF3YXkgZnJvbSB0aGUKJiM0MzsgKiBFRVBST01zLiAgQSBmaXJtd2FyZSB1cGxvYWQgaG9sZHMgaXQgYWNyb3NzIHRoZSB3aG9sZSBwcmVwYXJlL3dyaXRlL3BvbGwKJiM0MzsgKiBzZXF1ZW5jZSwgc28gYW4gRUVQUk9NIHJlYWQgYmxvY2tzIGZvciBhcyBsb25nIGFzIHByb2dyYW1taW5nIHRha2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9idXNfY2xhaW0oc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLSZndDtjcGxkX2kyY19hZGFwX25yKSk7CiYjNDM7CWlmICghYWRhcCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwkvKiBPbmUgc2NyYXRjaCBidWZmZXIgcGVyIGNsYWltIHJhdGhlciB0aGFuIHBlciB0cmFuc2ZlcjogYSBmaXJtd2FyZQomIzQzOwkgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGUKJiM0MzsJICogYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIG9uZSBmb3IgZWFjaCAxNi1ieXRlIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9idWYgPSBremFsbG9jKDIgKiBBRFZBX0NQTERfWEZFUl9NQVgsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJwLSZndDtjcGxkX2J1ZikgewomIzQzOwkJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJaTJjX2xvY2tfYnVzKGFkYXAsIEkyQ19MT0NLX1JPT1RfQURBUFRFUik7CiYjNDM7CWJwLSZndDtjcGxkX2FkYXAgPSBhZGFwOwomIzQzOwomIzQzOwlyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZWxlY3QgYSBtdXggY2hhbm5lbCwgb3IgZGVzZWxlY3QgYWxsIHdpdGggY2ggJmx0OyAwIC0gdGhlIHBvd2VyLW9uIHN0YXRlLgomIzQzOyAqIFRoZSBtdXggaXMgb24gdGhlIFRNQyBidXMsIHNvIHdoYXQgaXQgaXMgbGVmdCBzZXQgdG8gbmV2ZXIgYWZmZWN0cyB0aGUKJiM0MzsgKiBFRVBST00gcGF0aHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX211eF9zZWxlY3Qoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgY2gpCiYjNDM7ewomIzQzOwl1OCB2YWwgPSAoY2ggJmd0Oz0gMCkgPyBCSVQoY2gpIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfTVVYX0FERFIsIHZhbCwgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQXJndW1lbnQgYnl0ZXMgdGhhdCBmb2xsb3cgYW4gSVNDIG9wY29kZS4gIFJldHVybnMgTlVMTCB3aXRoIEBuYXJncyBzZXQKJiM0MzsgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHU4ICphZHZhX3gxX2NwbGRfYXJncyh1OCBjbWQsIHU4ICpuYXJncykKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1OCBlbl9jZmdfdHBbXSA9IHsgMHgwOCwgMHgwMCB9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggZXJhc2VfY2ZnW10gPSB7IDB4MDQsIDB4MDAsIDB4MDAgfTsgLyogY2ZnIHNlY3RvciBvbmx5ICovCiYjNDM7CiYjNDM7CXN3aXRjaCAoY21kKSB7CiYjNDM7CWNhc2UgQ1BMRF9DTURfRU5fQ0ZHX1RQOgomIzQzOwkJKm5hcmdzID0gc2l6ZW9mKGVuX2NmZ190cCk7CiYjNDM7CQlyZXR1cm4gZW5fY2ZnX3RwOwomIzQzOwljYXNlIENQTERfQ01EX0VSQVNFOgomIzQzOwkJKm5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7CiYjNDM7CQlyZXR1cm4gZXJhc2VfY2ZnOwomIzQzOwljYXNlIENQTERfQ01EX1JFU0VUX0FERFI6CiYjNDM7CWNhc2UgQ1BMRF9DTURfU0VUX0RPTkU6CiYjNDM7CQkqbmFyZ3MgPSAzOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWNhc2UgQ1BMRF9DTURfRElTX0NGRzoKJiM0MzsJY2FzZSBDUExEX0NNRF9SRUZSRVNIOgomIzQzOwkJKm5hcmdzID0gMjsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJKm5hcmdzID0gMDsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIFNlbmQgYW4gSVNDIGNvbW1hbmQgd2l0aCB0aGUgZml4ZWQgYXJndW1lbnRzIHRoYXQgYmVsb25nIHRvIGl0LiAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dyaXRlKHN0cnVjdCBwdHBfb2NwICpicCwgdTggY21kKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKmFyZ3M7CiYjNDM7CXU4IG5hcmdzOwomIzQzOwomIzQzOwlhcmdzID0gYWR2YV94MV9jcGxkX2FyZ3MoY21kLCAmYW1wO25hcmdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBjbWQsIGFyZ3MsIG5hcmdzLCBOVUxMLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTZW5kIGEgNC1ieXRlIGNvbW1hbmQgdGhlbiByZWFkIGRhdGEgYmFjayB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBTVE9QCiYjNDM7ICogKExhdHRpY2UgY29tYmluZWQgd3JpdGUtJmd0O3JlcGVhdGVkLVNUQVJULSZndDtyZWFkKS4gIFR3byBtZXNzYWdlcyBpbiBvbmUKJiM0MzsgKiB0cmFuc2ZlciBpcyBleGFjdGx5IHRoYXQsIHNvIG5vIHByb3RvY29sLW1hbmdsaW5nIGZsYWcgaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCwKJiM0MzsJCQkJIHUzMiBjbWRfYmUsIHU4ICpvdXQsIHU4IG91dF9sZW4pCiYjNDM7ewomIzQzOwlfX2JlMzIgY21kID0gY3B1X3RvX2JlMzIoY21kX2JlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgJmFtcDtjbWQsIDQsIG91dCwgb3V0X2xlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpCiYjNDM7ewomIzQzOwl1OCBidWZbNF07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9TVEFUVVMsIGJ1ZiwgNCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuCiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCwKJiM0MzsgKiBhbmQgdGhlIHN0YXR1cyBpcyByZWFkIG9uY2UgbW9yZSBhZnRlciBpdCBleHBpcmVzIGJlZm9yZSBnaXZpbmcgdXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpCiYjNDM7ewomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJaW50IGVyciwgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVyciwKJiM0MzsJCQkJZXJyIHx8IFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpIHx8CiYjNDM7CQkJCShzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fAomIzQzOwkJCQkhKHN0YXR1cyAmYW1wOyBDUExEX1NUQVRVU19CVVNZKSwKJiM0MzsJCQkJQ1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwKJiM0MzsJCQkJYnAsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChSRUFEX09OQ0UoYnAtJmd0O2NwbGRfY2FuY2VsKSkKJiM0MzsJCXJldHVybiAtRUNBTkNFTEVEOwomIzQzOwlpZiAoZXJyIHx8IChzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfRkFJTEVEKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBzdGVwIGFib3J0ZWQgYnkgY2FuY2VsKCkgbXVzdCBiZSByZXBvcnRlZCBhcyBzdWNoLCBub3QgYXMgYSBIVyBlcnJvci4gKi8KJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyIGFkdmFfY3BsZF9lcnIoc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRAomIzQzOwkJCQkJICA6IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgb2YgdGhlIFRBUCBDUExELiAgSXQgaXMgYSBmaXhlZCBwcm9wZXJ0eSBvZgomIzQzOyAqIHRoZSBwYXJ0LCBzbyBjYWNoZSBpdCBhbmQgcGF5IHRoZSBidXMgYXJiaXRyYXRpb24gb25seSBvbmNlLiAgVGhlCiYjNDM7ICogTENNWE8zTEYtMjEwMCBJRENPREUgaXMgMHhlMTJiYzA0My4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKQomIzQzO3sKJiM0MzsJdTggZGF0YVs0XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGJwLSZndDtjcGxkX2lkKSB7CiYjNDM7CQkqaWQgPSBicC0mZ3Q7Y3BsZF9pZDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgQ1BMRCBvcGVyYXRpb24gY2FuIGhvbGQgY3BsZF9sb2NrIGEgbG9uZyB0aW1lOyBzdGF5IGtpbGxhYmxlLiAqLwomIzQzOwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byByZWxlYXNlOwomIzQzOwlyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCWJwLSZndDtjcGxkX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpOwomIzQzOwlhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTsKJiM0MztyZWxlYXNlOgomIzQzOwlhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCSppZCA9IGJwLSZndDtjcGxkX2lkOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGNwbGRfc3RhdHVzIC0gc2hvdyB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZSBUQVAgQ1BMRC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmc6ICYjMzQ7ZG9uZT0mbHQ7MHwxJmd0OyBidXN5PSZsdDswfDEmZ3Q7IGZhaWxlZD0mbHQ7MHwxJmd0O1xuJiMzNDsKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2NwbGRfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCSBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJdTMyIHN0ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovCiYjNDM7CXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2U7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCk7CiYjNDM7CWFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpOwomIzQzO3JlbGVhc2U6CiYjNDM7CWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CXJldHVybiByZXQgPyByZXQgOiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDtkb25lPSV1IGJ1c3k9JXUgZmFpbGVkPSV1XG4mIzM0OywKJiM0MzsJCQkJICAgICAgISEoc3QgJmFtcDsgQ1BMRF9TVEFUVVNfRE9ORSksCiYjNDM7CQkJCSAgICAgICEhKHN0ICZhbXA7IENQTERfU1RBVFVTX0JVU1kpLAomIzQzOwkJCQkgICAgICAhIShzdCAmYW1wOyBDUExEX1NUQVRVU19GQUlMRUQpKTsKJiM0Mzt9CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLgomIzQzOyAqCiYjNDM7ICogVGhlIGtlcm5lbCBmaXJtd2FyZS11cGxvYWQgc3Vic3lzdGVtIChDT05GSUdfRldfVVBMT0FEKSBleHBvc2VzOgomIzQzOyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59CiYjNDM7ICogd2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhlIG93bmluZyBvY3BOIGRldmljZS4KJiM0MzsgKiBVc2Vyc3BhY2Ugd3JpdGVzIHRoZSByYXcgYmluYXJ5IHBhZ2UgZGF0YSBkaXJlY3RseSDigJQgbm8gL2xpYi9maXJtd2FyZS8KJiM0MzsgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogQ2FsbGJhY2sgc2VxdWVuY2UgZHJpdmVuIGJ5IHRoZSBmcmFtZXdvcms6CiYjNDM7ICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaAomIzQzOyAqICAgd3JpdGUoKSAgICAgICAgLSBwcm9ncmFtIG9uZSAxNi1ieXRlIHBhZ2UgcGVyIGNhbGwKJiM0MzsgKiAgIHBvbGxfY29tcGxldGUoKS0gc2V0IERPTkUsIFJFRlJFU0gsIHdhaXQgZm9yIENQTEQgdG8gcmVib290CiYjNDM7ICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrCiYjNDM7ICogICBjbGVhbnVwKCkgICAgICAtIHJlbGVhc2UgYnVzIHJlc291cmNlcyAoY2FsbGVkIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSkKJiM0MzsgKi8KJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyCiYjNDM7YWR2YV9jcGxkX3ByZXBhcmUoc3RydWN0IGZ3X3VwbG9hZCAqZndsLCBjb25zdCB1OCAqZGF0YSwgdTMyIHNpemUpCiYjNDM7ewomIzQzOwllbnVtIGZ3X3VwbG9hZF9lcnIgcmV0ID0gRldfVVBMT0FEX0VSUl9OT05FOwomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtJmd0O2RkX2hhbmRsZTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IGNsZWFyIGNwbGRfY2FuY2VsIGhlcmU6IGZ3X3VwbG9hZF9zdGFydCgpIHF1ZXVlcyB0aGUgd29yawomIzQzOwkgKiBiZWZvcmUgdGhpcyBydW5zLCBzbyBhIGNhbmNlbCBtYXkgYWxyZWFkeSBoYXZlIGFycml2ZWQuICBJdCBpcwomIzQzOwkgKiBjbGVhcmVkIG9uY2UgdGhlIHVwbG9hZCBpcyBvdmVyLCBvbiBldmVyeSBleGl0IGJlbG93IGFuZCBpbgomIzQzOwkgKiBjbGVhbnVwKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNpemUgfHwgc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7CiYjNDM7CQlXUklURV9PTkNFKGJwLSZndDtjcGxkX2NhbmNlbCwgZmFsc2UpOwomIzQzOwkJcmV0dXJuIEZXX1VQTE9BRF9FUlJfSU5WQUxJRF9TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJwLSZndDtjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfYnVzX2NsYWltKGJwKSkgewomIzQzOwkJcmV0ID0gRldfVVBMT0FEX0VSUl9USU1FT1VUOwomIzQzOwkJZ290byBlcnJfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpKSB7CiYjNDM7CQlyZXQgPSBGV19VUExPQURfRVJSX0hXX0VSUk9SOwomIzQzOwkJZ290byBlcnJfcmVsZWFzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIGlzc3VpbmcgRU5fQ0ZHX1RQLCBub3QgYWZ0ZXIgaXQgY29tcGxldGVzOiB0aGUgQ1BMRCBtYXkKJiM0MzsJICogaGF2ZSBlbnRlcmVkIGNvbmZpZ3VyYXRpb24gbW9kZSBldmVuIGlmIHRoZSB3cml0ZSByZXBvcnRzIGFuIGVycm9yCiYjNDM7CSAqIG9yIHRoZSB3YWl0IGJlbG93IHRpbWVzIG91dCwgYW5kIGVycl9kZXNlbGVjdCBvbmx5IHNlbmRzIERJU19DRkcKJiM0MzsJICogd2hlbiB0aGlzIGlzIHNldC4gIEEgRElTX0NGRyB0byBhIGRldmljZSB0aGF0IG5ldmVyIGVudGVyZWQgdGhlCiYjNDM7CSAqIG1vZGUgaXMgaGFybWxlc3M7IGxlYXZpbmcgaXQgZW5hYmxlZCBpcyBub3QuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7CiYjNDM7CiYjNDM7CWlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCkgfHwKJiM0MzsJICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCA1MDAwKSkgewomIzQzOwkJcmV0ID0gYWR2YV9jcGxkX2VycihicCk7CiYjNDM7CQlnb3RvIGVycl9kZXNlbGVjdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKGJwLSZndDtjcGxkX2NhbmNlbCkpIHsKJiM0MzsJCXJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7CiYjNDM7CQlnb3RvIGVycl9kZXNlbGVjdDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FUkFTRSkgfHwKJiM0MzsJICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxNTAwMCkpIHsKJiM0MzsJCXJldCA9IGFkdmFfY3BsZF9lcnIoYnApOwomIzQzOwkJZ290byBlcnJfZGVzZWxlY3Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpKSB7CiYjNDM7CQlyZXQgPSBGV19VUExPQURfRVJSX0NBTkNFTEVEOwomIzQzOwkJZ290byBlcnJfZGVzZWxlY3Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUikpIHsKJiM0MzsJCXJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7CiYjNDM7CQlnb3RvIGVycl9kZXNlbGVjdDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBjbGVhbnVwKCkgdW5sb2NrcyBldmVyeXRoaW5nLiAgZndfdXBsb2FkX21haW4oKSBvbmx5IHBhaXJzIGl0IHdpdGgKJiM0MzsJICogYSBwcmVwYXJlKCkgdGhhdCBzdWNjZWVkZWQsIHNvIHRoZSBlcnJvciBwYXRocyBiZWxvdyB1bmxvY2sgaGVyZQomIzQzOwkgKiBpbnN0ZWFkOyBoYW5kIHRoZSBjb250ZXh0IHRvIGNsZWFudXAoKSBmb3Igc3BhcnNlJiMzOTtzIGJlbmVmaXQuCiYjNDM7CSAqLwomIzQzOwlfX3JlbGVhc2UoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJcmV0dXJuIEZXX1VQTE9BRF9FUlJfTk9ORTsKJiM0MzsKJiM0MztlcnJfZGVzZWxlY3Q6CiYjNDM7CWlmIChicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSkgewomIzQzOwkJYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9ESVNfQ0ZHKTsKJiM0MzsJCWJwLSZndDtjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsJYWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7CiYjNDM7ZXJyX3JlbGVhc2U6CiYjNDM7CWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzO2Vycl91bmxvY2s6CiYjNDM7CVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfY2FuY2VsLCBmYWxzZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyCiYjNDM7YWR2YV9jcGxkX3dyaXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsCiYjNDM7CQl1MzIgb2Zmc2V0LCB1MzIgc2l6ZSwgdTMyICp3cml0dGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9vY3AgKmJwID0gZndsLSZndDtkZF9oYW5kbGU7CiYjNDM7CXU4IGFyZ3NbMyAmIzQzOyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKGJwLSZndDtjcGxkX2NhbmNlbCkpCiYjNDM7CQlyZXR1cm4gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDsKJiM0MzsKJiM0MzsJaWYgKHNpemUgJmx0OyBDUExEX1BBR0VfU0laRSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTsKJiM0MzsKJiM0MzsJbWVtY3B5KCZhbXA7YXJnc1szXSwgZGF0YSAmIzQzOyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBDUExEX0NNRF9XUklURV9QQUdFLAomIzQzOwkJCSAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKSB8fAomIzQzOwkgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCkpCiYjNDM7CQlyZXR1cm4gYWR2YV9jcGxkX2VycihicCk7CiYjNDM7CiYjNDM7CSp3cml0dGVuID0gQ1BMRF9QQUdFX1NJWkU7CiYjNDM7CXJldHVybiBGV19VUExPQURfRVJSX05PTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnIKJiM0MzthZHZhX2NwbGRfcG9sbF9jb21wbGV0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtJmd0O2RkX2hhbmRsZTsKJiM0MzsJaW50IGVycjsKJiM0MzsJdTMyIHN0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UoYnAtJmd0O2NwbGRfY2FuY2VsKSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0NBTkNFTEVEOwomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSkgfHwKJiM0MzsJICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKSkKJiM0MzsJCXJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTsKJiM0MzsKJiM0MzsJaWYgKGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCkgfHwgIShzdCAmYW1wOyBDUExEX1NUQVRVU19ET05FKSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SOwomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKSkKJiM0MzsJCXJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SOwomIzQzOwomIzQzOwkvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gY2xlYW51cCgpCiYjNDM7CSAqIG11c3Qgbm90IHNlbmQgRElTX0NGRyBhZnRlcndhcmRzIGV2ZW4gaWYgdGhlIGNoZWNrcyBiZWxvdyBmYWlsLgomIzQzOwkgKi8KJiM0MzsJYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogVGhlIG5ldyBpbWFnZSBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgdGhpcyBwb2ludCwgc28gYSBzZWdtZW50IHRoYXQKJiM0MzsJICogaXMgbm90IGJhY2sgeWV0IG11c3Qgbm90IGJlIHJlcG9ydGVkIGFzIGEgZmFpbGVkIHVwZGF0ZTogcmV0cnkgdGhlCiYjNDM7CSAqIHJlc2VsZWN0IGluc3RlYWQgb2Ygc2FtcGxpbmcgdGhlIG11eCBvbmNlIGF0IGEgZml4ZWQgZGVsYXkuCiYjNDM7CSAqLwomIzQzOwltc2xlZXAoMTUwMCk7CiYjNDM7CWlmIChyZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX211eF9zZWxlY3QsIGVyciwgIWVyciwgQ1BMRF9QT0xMX1VTLAomIzQzOwkJCSAgICAgIDMwMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwKJiM0MzsJCQkgICAgICBicCwgQURWQV9NVVhfQ0hBTk5FTCkpCiYjNDM7CQlyZXR1cm4gRldfVVBMT0FEX0VSUl9USU1FT1VUOwomIzQzOwomIzQzOwlpZiAoYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDMwMDApKQomIzQzOwkJcmV0dXJuIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRAomIzQzOwkJCQkJCSAgOiBGV19VUExPQURfRVJSX1RJTUVPVVQ7CiYjNDM7CiYjNDM7CXJldHVybiBGV19VUExPQURfRVJSX05PTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7YWR2YV9jcGxkX2NhbmNlbChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtJmd0O2RkX2hhbmRsZTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkdmFfY3BsZF9jbGVhbnVwKHN0cnVjdCBmd191cGxvYWQgKmZ3bCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC0mZ3Q7ZGRfaGFuZGxlOwomIzQzOwomIzQzOwlfX2FjcXVpcmUoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsJLyogaGVsZCBzaW5jZSBwcmVwYXJlKCkgcmV0dXJuZWQgb2sgKi8KJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwomIzQzOwlpZiAoYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUpIHsKJiM0MzsJCWFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7CiYjNDM7CQlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpOwomIzQzOwlhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTsKJiM0MzsJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9jYW5jZWwsIGZhbHNlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZndfdXBsb2FkX29wcyBhZHZhX2NwbGRfdXBsb2FkX29wcyA9IHsKJiM0MzsJLnByZXBhcmUJID0gYWR2YV9jcGxkX3ByZXBhcmUsCiYjNDM7CS53cml0ZQkJID0gYWR2YV9jcGxkX3dyaXRlLAomIzQzOwkucG9sbF9jb21wbGV0ZQkgPSBhZHZhX2NwbGRfcG9sbF9jb21wbGV0ZSwKJiM0MzsJLmNhbmNlbAkJID0gYWR2YV9jcGxkX2NhbmNlbCwKJiM0MzsJLmNsZWFudXAJID0gYWR2YV9jcGxkX2NsZWFudXAsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7CiAJJmFtcDtkZXZfYXR0cl9zZXJpYWxudW0uYXR0ciwKIAkmYW1wO2Rldl9hdHRyX2duc3Nfc3luYy5hdHRyLApAQCAtNDI3NCw2ICYjNDM7NDkzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7CiAJJmFtcDtkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsCiAJJmFtcDtkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLAogCSZhbXA7ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0ciwKJiM0MzsJJmFtcDtkZXZfYXR0cl9jcGxkX3N0YXR1cy5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC00ODY3LDYgJiM0Mzs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicCkKIHsKIAlpbnQgaTsKIAomIzQzOwkvKiBNdXN0IGNvbWUgZmlyc3Q6IGNhbmNlbHMgYW5kIGZsdXNoZXMgYW4gaW4tZmxpZ2h0IHVwbG9hZCB3aGlsZSB0aGUKJiM0MzsJICogSTJDIGNvbnRyb2xsZXIgaXMgc3RpbGwgdXAsIGFuZCBkcm9wcyBjcGxkX2xvY2sgc28gYSBjcGxkX3N0YXR1cwomIzQzOwkgKiByZWFkZXIgY2Fubm90IHN0YWxsIHB0cF9vY3BfYXR0cl9ncm91cF9kZWwoKSBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmIChicC0mZ3Q7Y3BsZF9md191cGxvYWQpIHsKJiM0MzsJCWZpcm13YXJlX3VwbG9hZF91bnJlZ2lzdGVyKGJwLSZndDtjcGxkX2Z3X3VwbG9hZCk7CiYjNDM7CQlicC0mZ3Q7Y3BsZF9md191cGxvYWQgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcHRwX29jcF9kZWJ1Z2ZzX3JlbW92ZV9kZXZpY2UoYnApOwogCXB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTsKIAlwdHBfb2NwX2F0dHJfZ3JvdXBfZGVsKGJwKTsKQEAgLTQ5MDQsNiAmIzQzOzU1NzIsNyBAQCBwdHBfb2NwX2RldGFjaChzdHJ1Y3QgcHRwX29jcCAqYnApCiAJCWNsa19od191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUoYnAtJmd0O2kyY19jbGspOwogCWlmIChicC0mZ3Q7bl9pcnFzKQogCQlwY2lfZnJlZV9pcnFfdmVjdG9ycyhicC0mZ3Q7cGRldik7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmYW1wO2JwLSZndDtkZXYpOwogfQogCkBAIC01MDgwLDYgJiM0Mzs1NzQ5LDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCiYjNDM7CS8qIE11c3QgYmUgYmVmb3JlIHRoZSBmaXJzdCBlcnJvciBwYXRoIHRoYXQgY2FsbHMgcHRwX29jcF9kZXRhY2goKSwKJiM0MzsJICogc28gbXV0ZXhfZGVzdHJveSgpIGFsd2F5cyBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LgomIzQzOwkgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzCiYjNDM7CSAqIG5vdGlmaWVyIChwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKSBmaXJlcyB3aGVuIHRoZSBhZGFwdGVyCiYjNDM7CSAqIHJlZ2lzdGVycyBhbmQgc3RvcmVzIHRoZSBhZGFwdGVyIG51bWJlciBpbiBjcGxkX2kyY19hZGFwX25yOyB0aGUKJiM0MzsJICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyCiYjNDM7CSAqIGZpcmluZyBkdXJpbmcgcmVnaXN0cmF0aW9uIGlzIG5ldmVyIG92ZXJ3cml0dGVuIGJ5IHRoaXMgaW5pdC4KJiM0MzsJICovCiYjNDM7CW11dGV4X2luaXQoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIgPSAtMTsKJiM0MzsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2JwLSZndDtzeW5jX3dvcmssIHB0cF9vY3Bfc3luY193b3JrKTsKIAogCS8qIGNvbXBhdCBtb2RlLgpAQCAtNTIxOSwxMSAmIzQzOzU4OTksMTYgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCiBmb3VuZDoKIAlicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChhZGQpCiYjNDM7CWlmIChhZGQpIHsKIAkJcHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgJiMzNDtpMmMmIzM0Oyk7Ci0JZWxzZQomIzQzOwkJLyogQ2FjaGUgYWRhcHRlciBucjsgdXNlZCBieSB0aGUgQ1BMRCBzdGF0dXMvaWQvdXBsb2FkIHBhdGhzCiYjNDM7CQkgKiBmb3IgcmVmZXJlbmNlLWNvdW50ZWQgdW5iaW5kLXNhZmUgYWRhcHRlciBhY2Nlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktJmd0O25yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIsIC0xKTsgLyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSAqLwogCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2JwLSZndDtkZXYua29iaiwgJiMzNDtpMmMmIzM0Oyk7Ci0KJiM0MzsJfQogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgcHJpbWFyeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyAmIzM0O1dvcnRoRnV6emluZywmIzM0OyBhbmQgdG8gaWRlbnRpZnkgcG90ZW50aWFsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgYW5kICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGlmIGZ1enppbmcgaXMgd2FycmFudGVkLCBhbG9uZyB3aXRoIHRoZSAmIzM0O1JlYXNvbmluZyYjMzQ7IGJlaGluZCBteSBjb25jbHVzaW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2AsIGBkcml2ZXJzL3B0cC9LY29uZmlnYCwgYW5kIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkYC4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgcHRwX29jcGAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpcyBhc3NvY2lhdGVkIHdpdGggYFBUUF8xNTg4X0NMT0NLX09DUGAuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hhdCBraW5kIG9mIGhhcmR3YXJlIGFyZSB3ZSBkZWFsaW5nIHdpdGg/CgpNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGRpcmVjdGx5LiBNeSBzdXNwaWNpb24gaXMgdGhhdCBgcHRwX29jcGAgbWlnaHQgYmUgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHNvbWV0aGluZyBsaWtlIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBvciBwb3RlbnRpYWxseSBBRFZBIG9yIEFSVCB0aW1lY2FyZHMuCgpUaGlzIGxlYWRzIG1lIHRvIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGRyaXZlciByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHM/IElmIGl0IGRvZXMsIGFuZCBpdCYjMzk7cyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlbiBmdXp6aW5nIGlzIGxpa2VseSBvdXQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJ1bGUgaGVyZTogSWYgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIG9yIGlmIGl0IGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLCBvciB0ZWFyZG93biBjYWxsYmFja3MsIHRoZW4gaXQmIzM5O3MgYSBuby1nbyBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgaWYgYHB0cF9vY3BgIGlzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGxpa2UgT3BlbkNvbXB1dGUgVGltZUNhcmQgb3IgQURWQSB4MSBUQVAgY2FyZHMuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZSBmb3IgYHB0cF9vY3BgIHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgbm90IGEgZHJpdmVyIHdoZXJlIEkgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXChwY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jPTEzMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDgtfTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzA5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY1MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBDSSBEZXZpY2UgSUQgSGFuZGxpbmcgaW4gdGhlIFBUUCBPQ1AgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBwdHBfb2NwX3BjaWRldl9pZGAgdmFyaWFibGUgYW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFBUUCBPQ1AgZHJpdmVyIGlzIGlkZW50aWZ5aW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBzcGVjaWZpYyBQQ0kgZGV2aWNlcyBpdCYjMzk7cyBkZXNpZ25lZCB0byB3b3JrIHdpdGguIEkgc3VzcGVjdCB0aGlzIElEIGlzIGNydWNpYWwgZm9yIGRldmljZSBwcm9iaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgZW5zdXJpbmcgdGhhdCB0aGUgZHJpdmVyIGNvcnJlY3RseSBiaW5kcyB0byB0aGUgaW50ZW5kZWQgaGFyZHdhcmUuIEnigJlsbCBiZSBsb29raW5nIGZvciBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIHdoZXJlIGl0JiMzOTtzIGNvbXBhcmVkIGFnYWluc3QgUENJIGRldmljZSBJRHMsIGFuZCBob3cgYW55IGRpc2NyZXBhbmNpZXMgYXJlIGhhbmRsZWQuIEFyZSB0aGVyZSBzcGVjaWZpYyB2ZW5kb3IvZGV2aWNlIElEcyBoYXJkY29kZWQsIG9yIGlzIGl0IG1vcmUgZ2VuZXJpYz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNpbmdsZSBJRCBvciBhIHJhbmdlIG9mIGFjY2VwdGFibGUgSURzPyBUaGlzIElEIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSYjMzk7cyBjb21wYXRpYmlsaXR5IHdpdGhpbiB0aGlzIFBUUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBvbiBzeXN0ZW0gYm9vdCwgaG90cGx1ZyBldmVudHMsIG9yIGRldmljZSBlbnVtZXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnZXQgY29kaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjk1Olx0XHRcdFx0Lmhhc19jcGxkICAgICA9IHRydWUsXG4xMjk2Olx0XHRcdH0sXG4xMjk3Olx0XHR9LFxuMTI5ODpcdFx0eyB9XG4xMjk5Olx0fTtcbjEzMDA6XHRcbjEzMDE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcbjEzMDI6XHRcdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXG4xMzAzOlx0XHR7IFBDSV9ERVZJQ0VfREFUQShDRUxFU1RJQ0EsIFRJTUVDQVJELCBcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXG4xMzA0Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShPUk9MSUEsIEFSVENBUkQsIFx1MDAyNm9jcF9hcnRfcmVzb3VyY2UpIH0sXG4xMzA1Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXHUwMDI2b2NwX2FkdmFfcmVzb3VyY2UpIH0sXG4xMzA2Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRF9YMSwgXHUwMDI2b2NwX2FkdmFfeDFfcmVzb3VyY2UpIH0sXG4xMzA3Olx0XHR7IH1cbjEzMDg6XHR9O1xuMTMwOTpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG4xMzEwOlx0XG4xMzExOlx0c3RhdGljIERFRklORV9NVVRFWChwdHBfb2NwX2xvY2spO1xuMTMxMjpcdHN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcbjEzMTM6XHRcbjEzMTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciBwdHBfb2NwX2Nsb2NrW10gPSB7XG4xMzE1Olx0XHR7IC5uYW1lID0gXCYjMzQ7Tk9ORVwmIzM0OyxcdC52YWx1ZSA9IDAgfSxcbjEzMTY6XHRcdHsgLm5hbWUgPSBcJiMzNDtUT0RcJiMzNDssXHQudmFsdWUgPSAxIH0sXG4xMzE3Olx0XHR7IC5uYW1lID0gXCYjMzQ7SVJJR1wmIzM0OyxcdC52YWx1ZSA9IDIgfSxcbjEzMTg6XHRcdHsgLm5hbWUgPSBcJiMzNDtQUFNcJiMzNDssXHQudmFsdWUgPSAzIH0sXG4xMzE5Olx0XHR7IC5uYW1lID0gXCYjMzQ7UFRQXCYjMzQ7LFx0LnZhbHVlID0gNCB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHB0cF9vY3AgRHJpdmVyIGFuZCBXb3J0aEZ1enppbmcqKgoKT2theSwgc28gYHB0cF9vY3BgIGlzIGNsZWFybHkgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBQQ0kgZGV2aWNlcy4gSSYjMzk7bSBzZWVpbmcgaXQgc3VwcG9ydHMgYSBoYW5kZnVsIG9mIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzOiBNZXRhIFRpbWVDYXJkLCBDZWxlc3RpY2EgVGltZUNhcmQsIE9yb2xpYSBBcnRDYXJkLCBhbmQgQURWQSBUaW1lQ2FyZHMsIGluY2x1ZGluZyB0aGUgWDEgdmFyaWFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gbWVudGlvbiBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgdmlydHVhbCBkZXZpY2VzIGZvciBgcHRwX29jcGAgd2l0aGluIFFFTVUgb3IgYW55d2hlcmUgZWxzZS4gVGhlIHRleHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBRRU1VICpkb2VzbiYjMzk7dCogZW11bGF0ZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkLiBUaGlzIGRyaXZlciBhcHBlYXJzIHRvIGJlIHNvbGVseSBmb3IgcmVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gVGhlIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBhZGRlZCBpbiB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCB0aGUgQURWQSBUaW1lQ2FyZCBYMSwgZGVhbGluZyB3aXRoIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMsIHZpYSBJMkMsIHN5c2ZzLCBhbmQgYGRldmxpbmtgLgoKR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdGhhdCBwYXRjaGVzIGFyZSAqbm90KiB3b3J0aCBmdXp6aW5nIGlmIHRoZXkgaW52b2x2ZSBjb2RlIHBhdGhzIGltcG9zc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGRyaXZlciBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LgoKSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbiBvZiBtb2NrIGRyaXZlcnMgb3Igc29mdHdhcmUgZW11bGF0aW9uIHdpdGhpbiB0aGUgYHB0cGAgZGlyZWN0b3J5IG9yIGVsc2V3aGVyZS4gQnV0IHJpZ2h0IG5vdywgYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHByb2JhYmx5IGZhbGxzIGludG8gdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVFBfMTU4OF9DTE9DS19PQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZz0xOTk9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNV1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWctMjEwLVxuZHJpdmVycy9wdHAvS2NvbmZpZzoyMTE6Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuZHJpdmVycy9wdHAvS2NvbmZpZy0yMTItXHR0cmlzdGF0ZSBcJiMzNDtPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBhcyBQVFAgY2xvY2tcJiMzNDtcbi0tXG5kcml2ZXJzL3B0cC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfVk1XKVx0JiM0Mzs9IHB0cF92bXcub1xuZHJpdmVycy9wdHAvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX09DUClcdCYjNDM7PSBwdHBfb2NwLm9cbmRyaXZlcnMvcHRwL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QVFBfREZMX1RPRClcdFx0JiM0Mzs9IHB0cF9kZmxfdG9kLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFBUUCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvcHRwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMTEuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IHNlY3Rpb24gd2hlcmUgSSBjYW4gcmV2aWV3IHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBtZSBmb3IgY29uZmlndXJpbmcgdGhlIFBUUCBkcml2ZXJzLiBUaGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UsIGEgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gZW5hYmxpbmcvZGlzYWJsaW5nLCBvciBwZXJoYXBzIHRvIHVuZGVyc3RhbmQgaG93IGEgcGFydGljdWxhciBQVFAgaW1wbGVtZW50YXRpb24gaXMgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBleGFtaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XG4gMjExOlx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIDIxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXCYjMzQ7XG4gMjEzOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gMjE0Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTSBcdTAwMjZcdTAwMjYgUENJXG4gMjE1Olx0XHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTVREXG4gMjE2Olx0XHRkZXBlbmRzIG9uIFNFUklBTF84MjUwXG4gMjE3Olx0XHRkZXBlbmRzIG9uICFTMzkwXG4gMjE4Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAyMTk6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuIDIyMDpcdFx0c2VsZWN0IENSQzE2XG4gMjIxOlx0XHRzZWxlY3QgRFBMTFxuIDIyMjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuIDIyMzpcdFx0c2VsZWN0IEZXX1VQTE9BRFxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGFuIE9wZW5Db21wdXRlIHRpbWUgY2FyZC5cbiAyMjY6XHRcbiAyMjc6XHRcdCAgVGhlIE9wZW5Db21wdXRlIHRpbWUgY2FyZCBpcyBhbiBhdG9taWMgY2xvY2sgYWxvbmcgd2l0aFxuIDIyODpcdFx0ICBhIEdQUyByZWNlaXZlciB0aGF0IHByb3ZpZGVzIGEgR3JhbmRtYXN0ZXIgY2xvY2sgc291cmNlXG4gMjI5Olx0XHQgIGZvciBhIFBUUCBlbmFibGVkIG5ldHdvcmsuXG4gMjMwOlx0XG4gMjMxOlx0XHQgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudGltaW5nY2FyZC5jb20vXG4gMjMyOlx0XG4gMjMzOlx0Y29uZmlnIFBUUF9ERkxfVE9EXG4gMjM0Olx0XHR0cmlzdGF0ZSBcJiMzNDtGUEdBIERGTCBUb0QgRHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTY3CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgcHRwX29jcGAgRHJpdmVyJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGJhc2VkIG9uIHRoZSBhbmFseXNpcywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBgV29ydGhGdXp6aW5nYCBpcyBnb2luZyB0byBiZSBmYWxzZSBpbiB0aGlzIGNhc2UuIFRoZSBgcHRwX29jcGAgZHJpdmVyIGlzIGV4cGxpY2l0bHkgZGVzaWduZWQgZm9yIHBoeXNpY2FsIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRldmljZXPigJR0aGluayBBRFZBIHgxLCBNZXRhIFRpbWVjYXJkLCBhbmQgdGhlIGxpa2UuIFRoZXNlIGFyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzLiBJdCYjMzk7cyBub3QgdGFyZ2V0aW5nIHNvbWUgZ2VuZXJpYyBQQ0kgZGV2aWNlOyBpdCYjMzk7cyBzcGVjaWZpYyBoYXJkd2FyZS4gQW5kIGNydWNpYWxseSwgaXQmIzM5O3MgKm5vdCogc29tZXRoaW5nIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhZGRpbmcgZmVhdHVyZXMgZm9yIENQTEQgZmlybXdhcmUgdXBsb2FkcyBhbmQgc3RhdHVzIHJlcG9ydGluZyB0aHJvdWdoIHN5c2ZzLCBhbGwgdGllZCB0byB0aGF0IHBhcnRpY3VsYXIgaGFyZHdhcmUgKGlkZW50aWZpZWQgYnkgUENJIElEIDB4YWQ1YToweDA0MTApLiBTbywgdG8gZXZlbiAqaW50ZXJhY3QqIHdpdGggdGhpcyBkcml2ZXIgcHJvcGVybHksIHlvdSYjMzk7ZCBuZWVkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgcnVsZXMgb3V0IG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgcmVzdWx0cyBhcmUgc2ltcGxlOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZQoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoKVGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1cnN1ZSBmdXp6aW5nIGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhZGQgQ1BMRCBmaXJtd2FyZSB1cGxvYWQgYW5kIHN0YXR1cyByZXBvcnRpbmcgc3VwcG9ydCB0byB0aGUgT3BlbkNvbXB1dGUgVGltZUNhcmQgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpIGZvciBBRFZBIHgxIFRBUCBjYXJkcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgaW4gZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIGFkZCBDUExEIGZpcm13YXJlIHVwbG9hZCBhbmQgc3RhdHVzIHJlcG9ydGluZyBzdXBwb3J0IHRvIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYykgZm9yIEFEVkEgeDEgVEFQIGNhcmRzLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE2OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjozNjo0OC41NDM3NzAyNzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODI0NTUwNzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MzY6NDguNTQzNzc0MzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg0MjQ5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGIyNWU0ZWYyODQzZGMzZWFmMjc4ZDZmNTlmZWM3NzA0YmY1MzJiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDE2OjM2OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNDFlZWFkZDQ2MzMwMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbkBAIC0xMSw2ICsxMSwzMCBAQCBDb250YWN0OlxcdEpvbmF0aGFuIExlbW9uIFxcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cXHUwMDNlXFxuIERlc2NyaXB0aW9uOlxcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcXG4gXFx0XFx0cmVnaXN0ZXJlZC5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXFxuK0RhdGU6XFx0XFx0SnVseSAyMDI2XFxuK0NvbnRhY3Q6XFx0U2FnaSBNYWltb24gXFx1MDAzY21haW1vbi5zYWdpQGdtYWlsLmNvbVxcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0KFJPLCByb290IG9ubHkpIFRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELCBpblxcbitcXHRcXHRodW1hbi1yZWFkYWJsZSBmb3JtOlxcbitcXG4rXFx0XFx0ICBkb25lPVxcdTAwM2MwfDFcXHUwMDNlIGJ1c3k9XFx1MDAzYzB8MVxcdTAwM2UgZmFpbGVkPVxcdTAwM2MwfDFcXHUwMDNlXFxuK1xcbitcXHRcXHRPbmx5IHByZXNlbnQgb24gQURWQSB4MSBUQVAgYm9hcmRzIChQQ0kgSUQgMHhhZDVhOjB4MDQxMCkuXFxuK1xcbitcXHRcXHRkb25lPTEgaW5kaWNhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBzdWNjZXNzZnVsbHlcXG4rXFx0XFx0cHJvZ3JhbW1lZCBhbmQgaXMgYWN0aXZlLiAgYnVzeT0xIG1lYW5zIGFuIGludGVybmFsIG9wZXJhdGlvblxcbitcXHRcXHRpcyBpbiBwcm9ncmVzcy4gIGZhaWxlZD0xIG1lYW5zIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkLlxcbitcXG4rXFx0XFx0QSByZWFkIGFyYml0cmF0ZXMgZm9yIHRoZSBzaGFyZWQgSTJDIGJ1cyBhbmQgcmVwcm9ncmFtcyB0aGVcXG4rXFx0XFx0b24tY2FyZCBtdXgsIHNvIGl0IGlzIHJlc3RyaWN0ZWQgdG8gcm9vdC4gIFRoZSBMYXR0aWNlIGRldmljZVxcbitcXHRcXHRJRCBvZiB0aGUgQ1BMRCBpcyByZXBvcnRlZCBhcyB0aGUgZml4ZWQgXFxcImNwbGQuaWRcXFwiIHZlcnNpb24gYnlcXG4rXFx0XFx0ZGV2bGluayBkZXYgaW5mby5cXG4rXFxuK1xcdFxcdFRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWxcXG4rXFx0XFx0ZmlybXdhcmUtdXBsb2FkIGludGVyZmFjZSwgcmVnaXN0ZXJlZCBwZXIgY2FyZCBhdDpcXG4rXFx0XFx0L3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi9cXG4rXFx0XFx0d2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXFxuIERhdGU6XFx0XFx0U2VwdGVtYmVyIDIwMjFcXG4gQ29udGFjdDpcXHRKb25hdGhhbiBMZW1vbiBcXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9LY29uZmlnIGIvZHJpdmVycy9wdHAvS2NvbmZpZ1xcbmluZGV4IGZlYjUwZjhjYzQwNmEuLjI0ZjA0N2MzN2U0YzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wdHAvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvcHRwL0tjb25maWdcXG5AQCAtMjE5LDYgKzIxOSw4IEBAIGNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIFxcdHNlbGVjdCBDUkMxNlxcbiBcXHRzZWxlY3QgRFBMTFxcbitcXHRzZWxlY3QgRldfTE9BREVSXFxuK1xcdHNlbGVjdCBGV19VUExPQURcXG4gXFx0aGVscFxcbiBcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX29jcC5jIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuaW5kZXggM2QyNmVjMWY3YjllYy4uODZkMWMxYTMxMWNjNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcXG4rKysgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcXG5AQCAtMjAsMTAgKzIwLDE0IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGkvYWx0ZXJhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L210ZC9tdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMxNi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRVRBX1RJTUVDQVJEXFx0XFx0MHgwNDAwXFxuIFxcbkBAIC04NSw2ICs4OSw3IEBAIHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XFxuIFxcdHU4XFx0XFx0XFx0XFx0c2lnbmFsc19ucjtcXG4gXFx0dThcXHRcXHRcXHRcXHRmcmVxX2luX25yO1xcbiBcXHRjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXBcXHQqYXR0cl9ncm91cHM7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRoYXNfY3BsZDsgLyogeDE6IHN1cHBvcnRzIENQTEQgZmlybXdhcmUgdXBsb2FkICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVxcdFxcdEJJVCgwKVxcbkBAIC0xNjMsNyArMTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcXG4gXFx0dTMyXFx0Z3BpbzE7XFxuIFxcdHUzMlxcdF9fcGFkMDtcXG4gXFx0dTMyXFx0Z3BpbzI7XFxuLVxcdHUzMlxcdF9fcGFkMTtcXG4rXFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuK1xcdHUzMlxcdGkyY19idXNfY3RybDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xcbkBAIC00MTYsNiArNDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHtcXG4gXFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XFxuIFxcdGludCBzaWduYWxzX25yO1xcbiBcXHRpbnQgZnJlcV9pbl9ucjtcXG4rXFx0LyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovXFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGNwbGRfbG9jazsgICAgICAgICAgICAvKiBzZXJpYWxpc2VzIENQTEQgb3BlcmF0aW9ucyAqL1xcbitcXHRpbnRcXHRcXHRcXHRjcGxkX2kyY19hZGFwX25yOyAgICAgLyogSTJDIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXJcXHQqY3BsZF9hZGFwOyAgICAgICAgICAgLyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cXG4rXFx0dThcXHRcXHRcXHQqY3BsZF9idWY7ICAgICAgICAgICAgLyogRE1BLXNhZmUgc2NyYXRjaDsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovXFxuK1xcdHUzMlxcdFxcdFxcdGNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovXFxuK1xcdGJvb2xcXHRcXHRcXHRoYXNfY3BsZDsgICAgICAgICAgICAgLyogeDEgVEFQIENQTEQgcHJlc2VudCAqL1xcbitcXHRzdHJ1Y3QgZndfdXBsb2FkXFx0KmNwbGRfZndfdXBsb2FkOyAgICAgIC8qIGZpcm13YXJlIHVwbG9hZCBoYW5kbGU7IE5VTEwgaWYgYWJzZW50ICovXFxuK1xcdGJvb2xcXHRcXHRcXHRjcGxkX2NhbmNlbDsgICAgICAgICAgLyogY2FuY2VsbGF0aW9uIHJlcXVlc3RlZCAqL1xcbitcXHRib29sXFx0XFx0XFx0Y3BsZF9pbl9jb25maWdfbW9kZTsgIC8qIEVOX0NGR19UUCBpc3N1ZWQgYnV0IG5vdCB5ZXQgUkVGUkVTSCdkICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXFx0QklUKDApXFxuQEAgLTQ0OSw4ICs0NjUsMTEgQEAgc3RhdGljIGludCBwdHBfb2NwX2FydF9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuIFxcbiBzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X3VwbG9hZF9vcHMgYWR2YV9jcGxkX3VwbG9hZF9vcHM7XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wO1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XFxuIFxcbkBAIC0xMjczLDYgKzEyOTIsNyBAQCBzdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV94MV9yZXNvdXJjZVtdID0ge1xcbiBcXHRcXHRcXHQuc2lnbmFsc19uciAgID0gNCxcXG4gXFx0XFx0XFx0LmZyZXFfaW5fbnIgICA9IDQsXFxuIFxcdFxcdFxcdC5hdHRyX2dyb3VwcyAgPSBhZHZhX3RpbWVjYXJkX3gxX2dyb3VwcyxcXG4rXFx0XFx0XFx0Lmhhc19jcGxkICAgICA9IHRydWUsXFxuIFxcdFxcdH0sXFxuIFxcdH0sXFxuIFxcdHsgfVxcbkBAIC0yMTg1LDYgKzIyMDUsMTkgQEAgcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0aWYgKGJwLVxcdTAwM2VoYXNfY3BsZCkge1xcbitcXHRcXHR1MzIgaWQ7XFxuK1xcbitcXHRcXHRlcnIgPSBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKGJwLCBcXHUwMDI2aWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0c3ByaW50ZihidWYsIFxcXCIweCUwOHhcXFwiLCBpZCk7XFxuK1xcdFxcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsIFxcXCJjcGxkLmlkXFxcIiwgYnVmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMxOTksNiArMzIzMiwzMCBAQCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdHB0cF9vY3Bfc21hX2luaXQoYnApO1xcbiBcXG4rXFx0YnAtXFx1MDAzZWhhc19jcGxkID0gaW5mby1cXHUwMDNlaGFzX2NwbGQ7XFxuK1xcdGlmIChicC1cXHUwMDNlaGFzX2NwbGQpIHtcXG4rXFx0XFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xcbitcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXG4rXFx0XFx0LyogT25lIGluc3RhbmNlIHBlciBjYXJkLCBudW1iZXJlZCBsaWtlIHRoZSBvY3BOIGRldmljZS5cXG4rXFx0XFx0ICogZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKCkga2VlcHMgdGhlIHBvaW50ZXIgcmF0aGVyIHRoYW5cXG4rXFx0XFx0ICogY29weWluZyB0aGUgc3RyaW5nLCBzbyBpdCBoYXMgdG8gb3V0bGl2ZSB0aGUgcmVnaXN0cmF0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bmFtZSA9IGRldm1fa2FzcHJpbnRmKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBHRlBfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiYWR2YS1jcGxkLiVkXFxcIiwgYnAtXFx1MDAzZWlkKTtcXG4rXFx0XFx0aWYgKCFuYW1lKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGZ3bCA9IGZpcm13YXJlX3VwbG9hZF9yZWdpc3RlcihUSElTX01PRFVMRSwgXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuYW1lLCBcXHUwMDI2YWR2YV9jcGxkX3VwbG9hZF9vcHMsIGJwKTtcXG4rXFx0XFx0aWYgKElTX0VSUihmd2wpKVxcbitcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2YnAtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJDUExEIGZpcm13YXJlIHVwbG9hZCB1bmF2YWlsYWJsZTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgZndsKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRicC1cXHUwMDNlY3BsZF9md191cGxvYWQgPSBmd2w7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBwdHBfb2NwX2luaXRfY2xvY2soYnAsIFxcdTAwMjZpbmZvLVxcdTAwM2VzZXJ2byk7XFxuIH1cXG4gXFxuQEAgLTQyMjYsNiArNDI4Myw2MDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7XFxuIFxcdHsgfSxcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIEludGVybmFsIGhlbHBlcnMgZm9yIHRoZSBhZHZhX3gxIFRBUCBDUExEIChMYXR0aWNlIExDTVhPM0xGLTIxMDApLlxcbisgKlxcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cXG4rICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBvbmUgaXMgd2lyZWQgdG86XFxuKyAqXFxuKyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cXHUwMDNlIEVFUFJPTXMgICAgIDB4MTIwMDAwIC1cXHUwMDNlIFRNQyBvciBNLjIsIE1CJ3MgY2hvaWNlXFxuKyAqICAgZ3JhbnQgMTogIDB4MTUwMDAwIC1cXHUwMDNlIFRNQyBidXMgICAgIDB4MTIwMDAwIC1cXHUwMDNlIE0uMlxcbisgKlxcbisgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIHNpdCBvblxcbisgKiB0aGUgVE1DIGJ1cywgc28gdGhleSBhcmUgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBGb3JcXG4rICogdGhhdCBzYW1lIHdpbmRvdyB0aGUgRUVQUk9NcyBhcmUgbm90IGJlaGluZCB0aGUgYWRhcHRlciBhdCBhbGwsIHNvIGFcXG4rICogQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrIGFuZCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBhY3Jvc3MgaXQgdG9cXG4rICoga2VlcCB0aGUgRUVQUk9NIGFuZCBudm1lbSBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIuXFxuKyAqXFxuKyAqIE5vIHJhdyBJMkMgYWNjZXNzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvbmx5IHRoZSBhdHRyaWJ1dGVzIGJlbG93LlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NFxcbisjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcXG4rI2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXFxuK1xcbisvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xcbisjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxcbitcXG4rI2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxcbisjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXFxuKyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFVcXG4rI2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcXG4rI2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxcbitcXG4rLyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xcbisjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcXG4rI2RlZmluZSBDUExEX0NNRF9SRUFEX1NUQVRVUyAgMHgzQzAwMDAwMFVMXFxuKyNkZWZpbmUgQ1BMRF9DTURfRU5fQ0ZHX1RQICAgIDB4NzQgICAvKiBlbmFibGUgY29uZmlnLCB0cmFuc3BhcmVudCBtb2RlICovXFxuKyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcXG4rI2RlZmluZSBDUExEX0NNRF9FUkFTRSAgICAgICAgMHgwRVxcbisjZGVmaW5lIENQTERfQ01EX1JFU0VUX0FERFIgICAweDQ2XFxuKyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcXG4rI2RlZmluZSBDUExEX0NNRF9TRVRfRE9ORSAgICAgMHg1RVxcbisjZGVmaW5lIENQTERfQ01EX1JFRlJFU0ggICAgICAweDc5XFxuKyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XFxuKyNkZWZpbmUgQ1BMRF9QT0xMX1VTICAgICAgICAgIDEwMDAwICAvKiBzdGF0dXMgcG9sbCBpbnRlcnZhbCB3aGlsZSBidXN5ICovXFxuK1xcbisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAoTGF0dGljZSBMQ01YTzNMRiBkYXRhc2hlZXQpICovXFxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KVxcbisjZGVmaW5lIENQTERfU1RBVFVTX0JVU1kgICBCSVQoMTIpXFxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRkFJTEVEIEJJVCgxMylcXG4rXFxuKy8qXFxuKyAqIGFkdmFfeDFfaTJjX3hmZXIoKSAtIGlzc3VlIGEgc2luZ2xlIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1cy5cXG4rICpcXG4rICogV3JpdGVzIEBjbWQgd2hlbiBpdCBpcyBub3QgbmVnYXRpdmUsIGZvbGxvd2VkIGJ5IEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSxcXG4rICogdGhlbiByZWFkcyBAcmxlbiBieXRlcyBpZiBhc2tlZC4gIEEgTlVMTCBAd2RhdGEgc2VuZHMgemVyb3MuXFxuKyAqXFxuKyAqIFRoZSBtZXNzYWdlIGlzIGFzc2VtYmxlZCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgdGFrZW4gYnlcXG4rICogYWR2YV94MV9idXNfY2xhaW0oKSwgd2hpY2ggdGhlIFhpbGlueCBjb250cm9sbGVyIG5lZWRzIGZvciBETUEgc2FmZXR5OlxcbisgKiBhbiBvcGNvZGUgYW5kIGl0cyBhcmd1bWVudHMgYXJlIGNvcGllZCBleGFjdGx5IG9uY2UsIGFuZCBhIGZpcm13YXJlXFxuKyAqIHVwbG9hZCBjb3N0cyBvbmUgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBvbmUgcGVyIHBhZ2UuXFxuKyAqXFxuKyAqIENhbGxlciBtdXN0IGhvbGQgdGhhdCBjbGFpbSwgaGVuY2UgX19pMmNfdHJhbnNmZXIoKSBvdmVyIGkyY190cmFuc2ZlcigpLlxcbisgKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLFxcbitcXHRcXHRcXHQgICAgdm9pZCAqcmRhdGEsIHU4IHJsZW4pXFxuK3tcXG4rXFx0dTggKndidWYsICpyYnVmO1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XFxuK1xcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XFxuK1xcdGludCBubXNncyA9IDAsIHJldDtcXG4rXFx0dTE2IGhkciA9IGNtZCBcXHUwMDNlPSAwO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcbitcXHRhZGFwID0gYnAtXFx1MDAzZWNwbGRfYWRhcDtcXG4rXFx0aWYgKCFhZGFwIHx8ICFicC1cXHUwMDNlY3BsZF9idWYpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0aWYgKGhkciArIHdsZW4gXFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiBcXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR3YnVmID0gYnAtXFx1MDAzZWNwbGRfYnVmO1xcbitcXHRyYnVmID0gYnAtXFx1MDAzZWNwbGRfYnVmICsgQURWQV9DUExEX1hGRVJfTUFYO1xcbitcXG4rXFx0aWYgKGhkciArIHdsZW4pIHtcXG4rXFx0XFx0aWYgKGhkcilcXG4rXFx0XFx0XFx0d2J1ZlswXSA9IGNtZDtcXG4rXFx0XFx0aWYgKHdkYXRhKVxcbitcXHRcXHRcXHRtZW1jcHkod2J1ZiArIGhkciwgd2RhdGEsIHdsZW4pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1lbXNldCh3YnVmICsgaGRyLCAwLCB3bGVuKTtcXG4rXFx0XFx0bXNnc1tubXNncysrXSA9IChzdHJ1Y3QgaTJjX21zZyl7XFxuK1xcdFxcdFxcdC5hZGRyICA9IGFkZHIsXFxuK1xcdFxcdFxcdC5mbGFncyA9IEkyQ19NX0RNQV9TQUZFLFxcbitcXHRcXHRcXHQubGVuICAgPSBoZHIgKyB3bGVuLFxcbitcXHRcXHRcXHQuYnVmICAgPSB3YnVmLFxcbitcXHRcXHR9O1xcbitcXHR9XFxuK1xcdGlmIChybGVuKSB7XFxuK1xcdFxcdG1zZ3Nbbm1zZ3MrK10gPSAoc3RydWN0IGkyY19tc2cpe1xcbitcXHRcXHRcXHQuYWRkciAgPSBhZGRyLFxcbitcXHRcXHRcXHQuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX0RNQV9TQUZFLFxcbitcXHRcXHRcXHQubGVuICAgPSBybGVuLFxcbitcXHRcXHRcXHQuYnVmICAgPSByYnVmLFxcbitcXHRcXHR9O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XFxuK1xcdGlmIChyZXQgIT0gbm1zZ3MpXFxuK1xcdFxcdHJldHVybiAocmV0IFxcdTAwM2MgMCkgPyByZXQgOiAtRUlPO1xcbitcXG4rXFx0aWYgKHJkYXRhIFxcdTAwMjZcXHUwMDI2IHJsZW4pXFxuK1xcdFxcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXFxuK3tcXG4rXFx0aWYgKGJwLVxcdTAwM2VwcHNfc2VsZWN0KVxcbitcXHRcXHRpb3dyaXRlMzIoTUJMQVpFX1JFTEVBU0UsIFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rfVxcbitcXG4rLyogQWNxdWlyZSB0aGUgc2hhcmVkIEkyQyBidXMgZnJvbSB0aGUgTWljcm9CbGF6ZSBmaXJtd2FyZS4gIFJldHVybnMgd2l0aCBub1xcbisgKiByZXF1ZXN0IG91dHN0YW5kaW5nIG9uIGZhaWx1cmUsIHNvIHRoZSBmaXJtd2FyZSBpcyBuZXZlciBsZWZ0IGdyYW50aW5nIGFcXG4rICogc2VnbWVudCB0byBhIGhvc3QgdGhhdCBoYXMgZ2l2ZW4gdXAgd2FpdGluZyBmb3IgaXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcHBzX3NlbGVjdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHQvKiBEcm9wIGEgcmVxdWVzdCBsZWZ0IGJ5IGEgY2FsbGVyIHRoYXQgZGllZCBtaWQtc2VxdWVuY2U7IGNwbGRfbG9ja1xcbitcXHQgKiBrZWVwcyBsaXZlIG9uZXMgb3V0LiAgVGhlIHJlYWQgYmFjayBvbmx5IGZsdXNoZXMgdGhlIHBvc3RlZCB3cml0ZS5cXG4rXFx0ICovXFxuK1xcdGlvd3JpdGUzMigwLCBcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCk7XFxuK1xcdGlvcmVhZDMyKFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rXFxuK1xcdGlvd3JpdGUzMihNQkxBWkVfUkVRVUVTVCwgXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgKyAxMDAwKTtcXG4rXFx0XFx0dmFsID0gaW9yZWFkMzIoXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRcXHRpZiAodmFsID09IE1CTEFaRV9HUkFOVEVEKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbisvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuXFxuKyAqIFNhZmUgYWZ0ZXIgYSBmYWlsZWQgY2xhaW06IGl0IGFsc28gY2xlYXJzIGEgcmVxdWVzdCB0aGF0IHdhcyBuZXZlciBncmFudGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXFxuK3tcXG4rXFx0c3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gYnAtXFx1MDAzZWNwbGRfYWRhcDtcXG4rXFxuK1xcdGlmICghYWRhcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XFxuK1xcdGJwLVxcdTAwM2VjcGxkX2FkYXAgPSBOVUxMO1xcbitcXHRrZnJlZShicC1cXHUwMDNlY3BsZF9idWYpO1xcbitcXHRicC1cXHUwMDNlY3BsZF9idWYgPSBOVUxMO1xcbitcXHRpMmNfdW5sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xcbitcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENsYWltIHRoZSBUTUMgYnVzIGZvciBhIENQTEQgb3BlcmF0aW9uLiAgSG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIG92ZXJcXG4rICogdGhlIGhhbmRzaGFrZSBrZWVwcyBwdHBfb2NwX3JlYWRfZWVwcm9tKCksIHRoZSBudm1lbSBhdHRyaWJ1dGVzIGFuZCB0aGVcXG4rICogYXQyNCBzeXNmcyBmaWxlcyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkIGF3YXkgZnJvbSB0aGVcXG4rICogRUVQUk9Ncy4gIEEgZmlybXdhcmUgdXBsb2FkIGhvbGRzIGl0IGFjcm9zcyB0aGUgd2hvbGUgcHJlcGFyZS93cml0ZS9wb2xsXFxuKyAqIHNlcXVlbmNlLCBzbyBhbiBFRVBST00gcmVhZCBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFxuK1xcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2kyY19hZGFwX25yKSk7XFxuK1xcdGlmICghYWRhcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHQvKiBPbmUgc2NyYXRjaCBidWZmZXIgcGVyIGNsYWltIHJhdGhlciB0aGFuIHBlciB0cmFuc2ZlcjogYSBmaXJtd2FyZVxcbitcXHQgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGVcXG4rXFx0ICogYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIG9uZSBmb3IgZWFjaCAxNi1ieXRlIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRicC1cXHUwMDNlY3BsZF9idWYgPSBremFsbG9jKDIgKiBBRFZBX0NQTERfWEZFUl9NQVgsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJwLVxcdTAwM2VjcGxkX2J1Zikge1xcbitcXHRcXHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfYWRhcCA9IGFkYXA7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBTZWxlY3QgYSBtdXggY2hhbm5lbCwgb3IgZGVzZWxlY3QgYWxsIHdpdGggY2ggXFx1MDAzYyAwIC0gdGhlIHBvd2VyLW9uIHN0YXRlLlxcbisgKiBUaGUgbXV4IGlzIG9uIHRoZSBUTUMgYnVzLCBzbyB3aGF0IGl0IGlzIGxlZnQgc2V0IHRvIG5ldmVyIGFmZmVjdHMgdGhlXFxuKyAqIEVFUFJPTSBwYXRocy5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9tdXhfc2VsZWN0KHN0cnVjdCBwdHBfb2NwICpicCwgaW50IGNoKVxcbit7XFxuK1xcdHU4IHZhbCA9IChjaCBcXHUwMDNlPSAwKSA/IEJJVChjaCkgOiAwO1xcbitcXG4rXFx0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfTVVYX0FERFIsIHZhbCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFyZ3VtZW50IGJ5dGVzIHRoYXQgZm9sbG93IGFuIElTQyBvcGNvZGUuICBSZXR1cm5zIE5VTEwgd2l0aCBAbmFyZ3Mgc2V0XFxuKyAqIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHplcm86IGFkdmFfeDFfaTJjX3hmZXIoKSB6ZXJvZXMgdGhlIGJ1ZmZlci5cXG4rICovXFxuK3N0YXRpYyBjb25zdCB1OCAqYWR2YV94MV9jcGxkX2FyZ3ModTggY21kLCB1OCAqbmFyZ3MpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBlcmFzZV9jZmdbXSA9IHsgMHgwNCwgMHgwMCwgMHgwMCB9OyAvKiBjZmcgc2VjdG9yIG9ubHkgKi9cXG4rXFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgQ1BMRF9DTURfRU5fQ0ZHX1RQOlxcbitcXHRcXHQqbmFyZ3MgPSBzaXplb2YoZW5fY2ZnX3RwKTtcXG4rXFx0XFx0cmV0dXJuIGVuX2NmZ190cDtcXG4rXFx0Y2FzZSBDUExEX0NNRF9FUkFTRTpcXG4rXFx0XFx0Km5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7XFxuK1xcdFxcdHJldHVybiBlcmFzZV9jZmc7XFxuK1xcdGNhc2UgQ1BMRF9DTURfUkVTRVRfQUREUjpcXG4rXFx0Y2FzZSBDUExEX0NNRF9TRVRfRE9ORTpcXG4rXFx0XFx0Km5hcmdzID0gMztcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGNhc2UgQ1BMRF9DTURfRElTX0NGRzpcXG4rXFx0Y2FzZSBDUExEX0NNRF9SRUZSRVNIOlxcbitcXHRcXHQqbmFyZ3MgPSAyO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0Km5hcmdzID0gMDtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dyaXRlKHN0cnVjdCBwdHBfb2NwICpicCwgdTggY21kKVxcbit7XFxuK1xcdGNvbnN0IHU4ICphcmdzO1xcbitcXHR1OCBuYXJncztcXG4rXFxuK1xcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFxcdTAwMjZuYXJncyk7XFxuK1xcbitcXHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIGNtZCwgYXJncywgbmFyZ3MsIE5VTEwsIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBTZW5kIGEgNC1ieXRlIGNvbW1hbmQgdGhlbiByZWFkIGRhdGEgYmFjayB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBTVE9QXFxuKyAqIChMYXR0aWNlIGNvbWJpbmVkIHdyaXRlLVxcdTAwM2VyZXBlYXRlZC1TVEFSVC1cXHUwMDNlcmVhZCkuICBUd28gbWVzc2FnZXMgaW4gb25lXFxuKyAqIHRyYW5zZmVyIGlzIGV4YWN0bHkgdGhhdCwgc28gbm8gcHJvdG9jb2wtbWFuZ2xpbmcgZmxhZyBpcyBuZWVkZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChzdHJ1Y3QgcHRwX29jcCAqYnAsXFxuK1xcdFxcdFxcdFxcdCB1MzIgY21kX2JlLCB1OCAqb3V0LCB1OCBvdXRfbGVuKVxcbit7XFxuK1xcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xcbitcXG4rXFx0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgXFx1MDAyNmNtZCwgNCwgb3V0LCBvdXRfbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKnN0YXR1cylcXG4re1xcbitcXHR1OCBidWZbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfU1RBVFVTLCBidWYsIDQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuXFxuKyAqIFRoZSBkZWFkbGluZSBpcyBvbiB3YWxsIHRpbWUsIHNvIHRoZSBJMkMgdHJhbnNhY3Rpb25zIGNvdW50IGFnYWluc3QgaXQsXFxuKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHJlYWQgb25jZSBtb3JlIGFmdGVyIGl0IGV4cGlyZXMgYmVmb3JlIGdpdmluZyB1cC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoc3RydWN0IHB0cF9vY3AgKmJwLCB1bnNpZ25lZCBpbnQgbWF4X21zKVxcbit7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHRpbnQgZXJyLCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVycixcXG4rXFx0XFx0XFx0XFx0ZXJyIHx8IFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpIHx8XFxuK1xcdFxcdFxcdFxcdChzdGF0dXMgXFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpIHx8XFxuK1xcdFxcdFxcdFxcdCEoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSksXFxuK1xcdFxcdFxcdFxcdENQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdGJwLCBcXHUwMDI2c3RhdHVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpKVxcbitcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4rXFx0aWYgKGVyciB8fCAoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQSBzdGVwIGFib3J0ZWQgYnkgY2FuY2VsKCkgbXVzdCBiZSByZXBvcnRlZCBhcyBzdWNoLCBub3QgYXMgYSBIVyBlcnJvci4gKi9cXG4rc3RhdGljIGVudW0gZndfdXBsb2FkX2VyciBhZHZhX2NwbGRfZXJyKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCkgPyBGV19VUExPQURfRVJSX0NBTkNFTEVEXFxuK1xcdFxcdFxcdFxcdFxcdCAgOiBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWFkIHRoZSBMYXR0aWNlIGRldmljZSBJRCBvZiB0aGUgVEFQIENQTEQuICBJdCBpcyBhIGZpeGVkIHByb3BlcnR5IG9mXFxuKyAqIHRoZSBwYXJ0LCBzbyBjYWNoZSBpdCBhbmQgcGF5IHRoZSBidXMgYXJiaXRyYXRpb24gb25seSBvbmNlLiAgVGhlXFxuKyAqIExDTVhPM0xGLTIxMDAgSURDT0RFIGlzIDB4ZTEyYmMwNDMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKVxcbit7XFxuK1xcdHU4IGRhdGFbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoYnAtXFx1MDAzZWNwbGRfaWQpIHtcXG4rXFx0XFx0KmlkID0gYnAtXFx1MDAzZWNwbGRfaWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cXG4rXFx0cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcmVsZWFzZTtcXG4rXFx0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX0lELCBkYXRhLCA0KTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdGJwLVxcdTAwM2VjcGxkX2lkID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xcbitcXHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcXG4rcmVsZWFzZTpcXG4rXFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK291dDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdCppZCA9IGJwLVxcdTAwM2VjcGxkX2lkO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELlxcbisgKlxcbisgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiBcXFwiZG9uZT1cXHUwMDNjMHwxXFx1MDAzZSBidXN5PVxcdTAwM2MwfDFcXHUwMDNlIGZhaWxlZD1cXHUwMDNjMHwxXFx1MDAzZVxcXFxuXFxcIlxcbisgKi9cXG4rc3RhdGljIHNzaXplX3RcXG4rY3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHQgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHR1MzIgc3QgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovXFxuK1xcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlbGVhc2U7XFxuK1xcdHJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KTtcXG4rXFx0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XFxuK3JlbGVhc2U6XFxuK1xcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdHJldHVybiByZXQgPyByZXQgOiBzeXNmc19lbWl0KGJ1ZiwgXFxcImRvbmU9JXUgYnVzeT0ldSBmYWlsZWQ9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICEhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICEhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICEhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSk7XFxuK31cXG4rc3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTtcXG4rXFxuKy8qXFxuKyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLlxcbisgKlxcbisgKiBUaGUga2VybmVsIGZpcm13YXJlLXVwbG9hZCBzdWJzeXN0ZW0gKENPTkZJR19GV19VUExPQUQpIGV4cG9zZXM6XFxuKyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59XFxuKyAqIHdoZXJlIE4gaXMgdGhlIGluZGV4IG9mIHRoZSBvd25pbmcgb2NwTiBkZXZpY2UuXFxuKyAqIFVzZXJzcGFjZSB3cml0ZXMgdGhlIHJhdyBiaW5hcnkgcGFnZSBkYXRhIGRpcmVjdGx5IOKAlCBubyAvbGliL2Zpcm13YXJlL1xcbisgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLlxcbisgKlxcbisgKiBDYWxsYmFjayBzZXF1ZW5jZSBkcml2ZW4gYnkgdGhlIGZyYW1ld29yazpcXG4rICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaFxcbisgKiAgIHdyaXRlKCkgICAgICAgIC0gcHJvZ3JhbSBvbmUgMTYtYnl0ZSBwYWdlIHBlciBjYWxsXFxuKyAqICAgcG9sbF9jb21wbGV0ZSgpLSBzZXQgRE9ORSwgUkVGUkVTSCwgd2FpdCBmb3IgQ1BMRCB0byByZWJvb3RcXG4rICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrXFxuKyAqICAgY2xlYW51cCgpICAgICAgLSByZWxlYXNlIGJ1cyByZXNvdXJjZXMgKGNhbGxlZCBvbiBzdWNjZXNzIG9yIGZhaWx1cmUpXFxuKyAqL1xcbitzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXFxuK2FkdmFfY3BsZF9wcmVwYXJlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsIHUzMiBzaXplKVxcbit7XFxuK1xcdGVudW0gZndfdXBsb2FkX2VyciByZXQgPSBGV19VUExPQURfRVJSX05PTkU7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cXHUwMDNlZGRfaGFuZGxlO1xcbitcXG4rXFx0LyogRG8gbm90IGNsZWFyIGNwbGRfY2FuY2VsIGhlcmU6IGZ3X3VwbG9hZF9zdGFydCgpIHF1ZXVlcyB0aGUgd29ya1xcbitcXHQgKiBiZWZvcmUgdGhpcyBydW5zLCBzbyBhIGNhbmNlbCBtYXkgYWxyZWFkeSBoYXZlIGFycml2ZWQuICBJdCBpc1xcbitcXHQgKiBjbGVhcmVkIG9uY2UgdGhlIHVwbG9hZCBpcyBvdmVyLCBvbiBldmVyeSBleGl0IGJlbG93IGFuZCBpblxcbitcXHQgKiBjbGVhbnVwKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNpemUgfHwgc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7XFxuK1xcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfYnVzX2NsYWltKGJwKSkge1xcbitcXHRcXHRyZXQgPSBGV19VUExPQURfRVJSX1RJTUVPVVQ7XFxuK1xcdFxcdGdvdG8gZXJyX3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCkpIHtcXG4rXFx0XFx0cmV0ID0gRldfVVBMT0FEX0VSUl9IV19FUlJPUjtcXG4rXFx0XFx0Z290byBlcnJfcmVsZWFzZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBpc3N1aW5nIEVOX0NGR19UUCwgbm90IGFmdGVyIGl0IGNvbXBsZXRlczogdGhlIENQTEQgbWF5XFxuK1xcdCAqIGhhdmUgZW50ZXJlZCBjb25maWd1cmF0aW9uIG1vZGUgZXZlbiBpZiB0aGUgd3JpdGUgcmVwb3J0cyBhbiBlcnJvclxcbitcXHQgKiBvciB0aGUgd2FpdCBiZWxvdyB0aW1lcyBvdXQsIGFuZCBlcnJfZGVzZWxlY3Qgb25seSBzZW5kcyBESVNfQ0ZHXFxuK1xcdCAqIHdoZW4gdGhpcyBpcyBzZXQuICBBIERJU19DRkcgdG8gYSBkZXZpY2UgdGhhdCBuZXZlciBlbnRlcmVkIHRoZVxcbitcXHQgKiBtb2RlIGlzIGhhcm1sZXNzOyBsZWF2aW5nIGl0IGVuYWJsZWQgaXMgbm90LlxcbitcXHQgKi9cXG4rXFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSB0cnVlO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRU5fQ0ZHX1RQKSB8fFxcbitcXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApKSB7XFxuK1xcdFxcdHJldCA9IGFkdmFfY3BsZF9lcnIoYnApO1xcbitcXHRcXHRnb3RvIGVycl9kZXNlbGVjdDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpKSB7XFxuK1xcdFxcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XFxuK1xcdFxcdGdvdG8gZXJyX2Rlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FUkFTRSkgfHxcXG4rXFx0ICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxNTAwMCkpIHtcXG4rXFx0XFx0cmV0ID0gYWR2YV9jcGxkX2VycihicCk7XFxuK1xcdFxcdGdvdG8gZXJyX2Rlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCkpIHtcXG4rXFx0XFx0cmV0ID0gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDtcXG4rXFx0XFx0Z290byBlcnJfZGVzZWxlY3Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpKSB7XFxuK1xcdFxcdHJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XFxuK1xcdFxcdGdvdG8gZXJyX2Rlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBjbGVhbnVwKCkgdW5sb2NrcyBldmVyeXRoaW5nLiAgZndfdXBsb2FkX21haW4oKSBvbmx5IHBhaXJzIGl0IHdpdGhcXG4rXFx0ICogYSBwcmVwYXJlKCkgdGhhdCBzdWNjZWVkZWQsIHNvIHRoZSBlcnJvciBwYXRocyBiZWxvdyB1bmxvY2sgaGVyZVxcbitcXHQgKiBpbnN0ZWFkOyBoYW5kIHRoZSBjb250ZXh0IHRvIGNsZWFudXAoKSBmb3Igc3BhcnNlJ3MgYmVuZWZpdC5cXG4rXFx0ICovXFxuK1xcdF9fcmVsZWFzZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XFxuK1xcbitlcnJfZGVzZWxlY3Q6XFxuK1xcdGlmIChicC1cXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSkge1xcbitcXHRcXHRhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0RJU19DRkcpO1xcbitcXHRcXHRicC1cXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xcbitcXHR9XFxuK1xcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xcbitlcnJfcmVsZWFzZTpcXG4rXFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK2Vycl91bmxvY2s6XFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnJcXG4rYWR2YV9jcGxkX3dyaXRlKHN0cnVjdCBmd191cGxvYWQgKmZ3bCwgY29uc3QgdTggKmRhdGEsXFxuK1xcdFxcdHUzMiBvZmZzZXQsIHUzMiBzaXplLCB1MzIgKndyaXR0ZW4pXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVxcdTAwM2VkZF9oYW5kbGU7XFxuK1xcdHU4IGFyZ3NbMyArIENQTERfUEFHRV9TSVpFXSA9IHsgMHgwMCwgMHgwMCwgMHgwMSB9O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCkpXFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0NBTkNFTEVEO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzYyBDUExEX1BBR0VfU0laRSlcXG4rXFx0XFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSU5WQUxJRF9TSVpFO1xcbitcXG4rXFx0bWVtY3B5KFxcdTAwMjZhcmdzWzNdLCBkYXRhICsgb2Zmc2V0LCBDUExEX1BBR0VfU0laRSk7XFxuK1xcbitcXHRpZiAoYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXFxuK1xcdFxcdFxcdCAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKSB8fFxcbitcXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCkpXFxuK1xcdFxcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcXG4rXFxuK1xcdCp3cml0dGVuID0gQ1BMRF9QQUdFX1NJWkU7XFxuK1xcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnJcXG4rYWR2YV9jcGxkX3BvbGxfY29tcGxldGUoc3RydWN0IGZ3X3VwbG9hZCAqZndsKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cXHUwMDNlZGRfaGFuZGxlO1xcbitcXHRpbnQgZXJyO1xcbitcXHR1MzIgc3Q7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsKSlcXG4rXFx0XFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XFxuK1xcbitcXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSkgfHxcXG4rXFx0ICAgIGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKSlcXG4rXFx0XFx0cmV0dXJuIGFkdmFfY3BsZF9lcnIoYnApO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KSB8fCAhKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkpXFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVGUkVTSCkpXFxuK1xcdFxcdHJldHVybiBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xcbitcXG4rXFx0LyogUkVGUkVTSCByZWJvb3RzIHRoZSBDUExEIG91dCBvZiBjb25maWd1cmF0aW9uIG1vZGUsIHNvIGNsZWFudXAoKVxcbitcXHQgKiBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZmFpbC5cXG4rXFx0ICovXFxuK1xcdGJwLVxcdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XFxuK1xcbitcXHQvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZyBhdCB0aGlzIHBvaW50LCBzbyBhIHNlZ21lbnQgdGhhdFxcbitcXHQgKiBpcyBub3QgYmFjayB5ZXQgbXVzdCBub3QgYmUgcmVwb3J0ZWQgYXMgYSBmYWlsZWQgdXBkYXRlOiByZXRyeSB0aGVcXG4rXFx0ICogcmVzZWxlY3QgaW5zdGVhZCBvZiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcCgxNTAwKTtcXG4rXFx0aWYgKHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXFxuK1xcdFxcdFxcdCAgICAgIDMwMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcXG4rXFx0XFx0XFx0ICAgICAgYnAsIEFEVkFfTVVYX0NIQU5ORUwpKVxcbitcXHRcXHRyZXR1cm4gRldfVVBMT0FEX0VSUl9USU1FT1VUO1xcbitcXG4rXFx0aWYgKGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAzMDAwKSlcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIDogRldfVVBMT0FEX0VSUl9USU1FT1VUO1xcbitcXG4rXFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfTk9ORTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rYWR2YV9jcGxkX2NhbmNlbChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVxcdTAwM2VkZF9oYW5kbGU7XFxuK1xcbitcXHRXUklURV9PTkNFKGJwLVxcdTAwM2VjcGxkX2NhbmNlbCwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK2FkdmFfY3BsZF9jbGVhbnVwKHN0cnVjdCBmd191cGxvYWQgKmZ3bClcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBmd2wtXFx1MDAzZWRkX2hhbmRsZTtcXG4rXFxuK1xcdF9fYWNxdWlyZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFx0LyogaGVsZCBzaW5jZSBwcmVwYXJlKCkgcmV0dXJuZWQgb2sgKi9cXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcbitcXHRpZiAoYnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUpIHtcXG4rXFx0XFx0YWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9ESVNfQ0ZHKTtcXG4rXFx0XFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcXG4rXFx0fVxcbitcXHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcXG4rXFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZndfdXBsb2FkX29wcyBhZHZhX2NwbGRfdXBsb2FkX29wcyA9IHtcXG4rXFx0LnByZXBhcmVcXHQgPSBhZHZhX2NwbGRfcHJlcGFyZSxcXG4rXFx0LndyaXRlXFx0XFx0ID0gYWR2YV9jcGxkX3dyaXRlLFxcbitcXHQucG9sbF9jb21wbGV0ZVxcdCA9IGFkdmFfY3BsZF9wb2xsX2NvbXBsZXRlLFxcbitcXHQuY2FuY2VsXFx0XFx0ID0gYWR2YV9jcGxkX2NhbmNlbCxcXG4rXFx0LmNsZWFudXBcXHQgPSBhZHZhX2NwbGRfY2xlYW51cCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcXG4gXFx0XFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxcbkBAIC00Mjc0LDYgKzQ5MzIsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0cixcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsXFxuK1xcdFxcdTAwMjZkZXZfYXR0cl9jcGxkX3N0YXR1cy5hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbiBcXG5AQCAtNDg2Nyw2ICs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdC8qIE11c3QgY29tZSBmaXJzdDogY2FuY2VscyBhbmQgZmx1c2hlcyBhbiBpbi1mbGlnaHQgdXBsb2FkIHdoaWxlIHRoZVxcbitcXHQgKiBJMkMgY29udHJvbGxlciBpcyBzdGlsbCB1cCwgYW5kIGRyb3BzIGNwbGRfbG9jayBzbyBhIGNwbGRfc3RhdHVzXFxuK1xcdCAqIHJlYWRlciBjYW5ub3Qgc3RhbGwgcHRwX29jcF9hdHRyX2dyb3VwX2RlbCgpIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKGJwLVxcdTAwM2VjcGxkX2Z3X3VwbG9hZCkge1xcbitcXHRcXHRmaXJtd2FyZV91cGxvYWRfdW5yZWdpc3RlcihicC1cXHUwMDNlY3BsZF9md191cGxvYWQpO1xcbitcXHRcXHRicC1cXHUwMDNlY3BsZF9md191cGxvYWQgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRwdHBfb2NwX2RlYnVnZnNfcmVtb3ZlX2RldmljZShicCk7XFxuIFxcdHB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTtcXG4gXFx0cHRwX29jcF9hdHRyX2dyb3VwX2RlbChicCk7XFxuQEAgLTQ5MDQsNiArNTU3Miw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcXG4gXFx0XFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cXHUwMDNlaTJjX2Nsayk7XFxuIFxcdGlmIChicC1cXHUwMDNlbl9pcnFzKVxcbiBcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhicC1cXHUwMDNlcGRldik7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbiBcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2YnAtXFx1MDAzZWRldik7XFxuIH1cXG4gXFxuQEAgLTUwODAsNiArNTc0OSwxNyBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0X2Rpc2FibGU7XFxuIFxcbitcXHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXFxuK1xcdCAqIHNvIG11dGV4X2Rlc3Ryb3koKSBhbHdheXMgcnVucyBvbiBhbiBpbml0aWFsaXNlZCBtdXRleC5cXG4rXFx0ICogTXVzdCBhbHNvIGJlIGJlZm9yZSBwdHBfb2NwX3JlZ2lzdGVyX3Jlc291cmNlcygpOiB0aGUgSTJDIGJ1c1xcbitcXHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxcbitcXHQgKiByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgYWRhcHRlciBudW1iZXIgaW4gY3BsZF9pMmNfYWRhcF9ucjsgdGhlXFxuK1xcdCAqIC0xIHNlbnRpbmVsIGJlbG93IG11c3QgYWxyZWFkeSBiZSB3cml0dGVuIHNvIHRoYXQgYSBub3RpZmllclxcbitcXHQgKiBmaXJpbmcgZHVyaW5nIHJlZ2lzdHJhdGlvbiBpcyBuZXZlciBvdmVyd3JpdHRlbiBieSB0aGlzIGluaXQuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIgPSAtMTtcXG4rXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XFxuIFxcbiBcXHQvKiBjb21wYXQgbW9kZS5cXG5AQCAtNTIxOSwxMSArNTg5OSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIFxcbiBmb3VuZDpcXG4gXFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4tXFx0aWYgKGFkZClcXG4rXFx0aWYgKGFkZCkge1xcbiBcXHRcXHRwdHBfb2NwX3N5bWxpbmsoYnAsIGNoaWxkLCBcXFwiaTJjXFxcIik7XFxuLVxcdGVsc2VcXG4rXFx0XFx0LyogQ2FjaGUgYWRhcHRlciBucjsgdXNlZCBieSB0aGUgQ1BMRCBzdGF0dXMvaWQvdXBsb2FkIHBhdGhzXFxuK1xcdFxcdCAqIGZvciByZWZlcmVuY2UtY291bnRlZCB1bmJpbmQtc2FmZSBhZGFwdGVyIGFjY2Vzcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXFx1MDAzZW5yKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgLTEpOyAvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlICovXFxuIFxcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZicC1cXHUwMDNlZGV2LmtvYmosIFxcXCJpMmNcXFwiKTtcXG4tXFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM2OjUwLjAyODY5OTU3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY3NjA1NjAwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGIyNWU0ZWYyODQzZGMzZWFmMjc4ZDZmNTlmZWM3NzA0YmY1MzJiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTY6MzY6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNDFlZWFkZDQ2MzMwMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbkBAIC0xMSw2ICsxMSwzMCBAQCBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG4gRGVzY3JpcHRpb246XHRUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgTnRoIHRpbWVjYXJkXG4gXHRcdHJlZ2lzdGVyZWQuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXG4rRGF0ZTpcdFx0SnVseSAyMDI2XG4rQ29udGFjdDpcdFNhZ2kgTWFpbW9uIFx1MDAzY21haW1vbi5zYWdpQGdtYWlsLmNvbVx1MDAzZVxuK0Rlc2NyaXB0aW9uOlx0KFJPLCByb290IG9ubHkpIFRoZSBzdGF0dXMgcmVnaXN0ZXIgb2YgdGhlIFRBUCBDUExELCBpblxuK1x0XHRodW1hbi1yZWFkYWJsZSBmb3JtOlxuK1xuK1x0XHQgIGRvbmU9XHUwMDNjMHwxXHUwMDNlIGJ1c3k9XHUwMDNjMHwxXHUwMDNlIGZhaWxlZD1cdTAwM2MwfDFcdTAwM2VcbitcbitcdFx0T25seSBwcmVzZW50IG9uIEFEVkEgeDEgVEFQIGJvYXJkcyAoUENJIElEIDB4YWQ1YToweDA0MTApLlxuK1xuK1x0XHRkb25lPTEgaW5kaWNhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBzdWNjZXNzZnVsbHlcbitcdFx0cHJvZ3JhbW1lZCBhbmQgaXMgYWN0aXZlLiAgYnVzeT0xIG1lYW5zIGFuIGludGVybmFsIG9wZXJhdGlvblxuK1x0XHRpcyBpbiBwcm9ncmVzcy4gIGZhaWxlZD0xIG1lYW5zIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkLlxuK1xuK1x0XHRBIHJlYWQgYXJiaXRyYXRlcyBmb3IgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZCByZXByb2dyYW1zIHRoZVxuK1x0XHRvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlXG4rXHRcdElEIG9mIHRoZSBDUExEIGlzIHJlcG9ydGVkIGFzIHRoZSBmaXhlZCBcImNwbGQuaWRcIiB2ZXJzaW9uIGJ5XG4rXHRcdGRldmxpbmsgZGV2IGluZm8uXG4rXG4rXHRcdFRvIHByb2dyYW0gbmV3IENQTEQgZmlybXdhcmUgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWxcbitcdFx0ZmlybXdhcmUtdXBsb2FkIGludGVyZmFjZSwgcmVnaXN0ZXJlZCBwZXIgY2FyZCBhdDpcbitcdFx0L3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi9cbitcdFx0d2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhpcyBvY3BOIGRldmljZS5cbitcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vYXZhaWxhYmxlX2Nsb2NrX3NvdXJjZXNcbiBEYXRlOlx0XHRTZXB0ZW1iZXIgMjAyMVxuIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9LY29uZmlnIGIvZHJpdmVycy9wdHAvS2NvbmZpZ1xuaW5kZXggZmViNTBmOGNjNDA2YS4uMjRmMDQ3YzM3ZTRjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL0tjb25maWdcbisrKyBiL2RyaXZlcnMvcHRwL0tjb25maWdcbkBAIC0yMTksNiArMjE5LDggQEAgY29uZmlnIFBUUF8xNTg4X0NMT0NLX09DUFxuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gXHRzZWxlY3QgQ1JDMTZcbiBcdHNlbGVjdCBEUExMXG4rXHRzZWxlY3QgRldfTE9BREVSXG4rXHRzZWxlY3QgRldfVVBMT0FEXG4gXHRoZWxwXG4gXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuaW5kZXggM2QyNmVjMWY3YjllYy4uODZkMWMxYTMxMWNjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXG5AQCAtMjAsMTAgKzIwLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpL2FsdGVyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICs4OSw3IEBAIHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XG4gXHR1OFx0XHRcdFx0c2lnbmFsc19ucjtcbiBcdHU4XHRcdFx0XHRmcmVxX2luX25yO1xuIFx0Y29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwXHQqYXR0cl9ncm91cHM7XG4rXHRib29sXHRcdFx0XHRoYXNfY3BsZDsgLyogeDE6IHN1cHBvcnRzIENQTEQgZmlybXdhcmUgdXBsb2FkICovXG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVx0XHRCSVQoMClcbkBAIC0xNjMsNyArMTY4LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcbiBcdHUzMlx0Z3BpbzE7XG4gXHR1MzJcdF9fcGFkMDtcbiBcdHUzMlx0Z3BpbzI7XG4tXHR1MzJcdF9fcGFkMTtcbitcdC8qIGFkdmFfeDE6IEkyQyBidXMgb3duZXJzaGlwIHJlZ2lzdGVyOyByZXNlcnZlZCBvbiBvdGhlciB2YXJpYW50cyAqL1xuK1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiArNDIyLDE2IEBAIHN0cnVjdCBwdHBfb2NwIHtcbiBcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuIFx0aW50IHNpZ25hbHNfbnI7XG4gXHRpbnQgZnJlcV9pbl9ucjtcbitcdC8qIGFkdmFfeDEgQ1BMRCBJMkMgKGludGVybmFsIHVzZSBvbmx5KSAqL1xuK1x0c3RydWN0IG11dGV4XHRcdGNwbGRfbG9jazsgICAgICAgICAgICAvKiBzZXJpYWxpc2VzIENQTEQgb3BlcmF0aW9ucyAqL1xuK1x0aW50XHRcdFx0Y3BsZF9pMmNfYWRhcF9ucjsgICAgIC8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi9cbitcdHN0cnVjdCBpMmNfYWRhcHRlclx0KmNwbGRfYWRhcDsgICAgICAgICAgIC8qIGNsYWltZWQgYWRhcHRlcjsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovXG4rXHR1OFx0XHRcdCpjcGxkX2J1ZjsgICAgICAgICAgICAvKiBETUEtc2FmZSBzY3JhdGNoOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cbitcdHUzMlx0XHRcdGNwbGRfaWQ7ICAgICAgICAgICAgICAvKiBjYWNoZWQgTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovXG4rXHRib29sXHRcdFx0aGFzX2NwbGQ7ICAgICAgICAgICAgIC8qIHgxIFRBUCBDUExEIHByZXNlbnQgKi9cbitcdHN0cnVjdCBmd191cGxvYWRcdCpjcGxkX2Z3X3VwbG9hZDsgICAgICAvKiBmaXJtd2FyZSB1cGxvYWQgaGFuZGxlOyBOVUxMIGlmIGFic2VudCAqL1xuK1x0Ym9vbFx0XHRcdGNwbGRfY2FuY2VsOyAgICAgICAgICAvKiBjYW5jZWxsYXRpb24gcmVxdWVzdGVkICovXG4rXHRib29sXHRcdFx0Y3BsZF9pbl9jb25maWdfbW9kZTsgIC8qIEVOX0NGR19UUCBpc3N1ZWQgYnV0IG5vdCB5ZXQgUkVGUkVTSCdkICovXG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXHRCSVQoMClcbkBAIC00NDksOCArNDY1LDExIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hcnRfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuIFxuIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X3VwbG9hZF9vcHMgYWR2YV9jcGxkX3VwbG9hZF9vcHM7XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3NtYV9vcDtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wO1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2RldmljZV9pZChzdHJ1Y3QgcHRwX29jcCAqYnAsIHUzMiAqaWQpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG5AQCAtMTI3Myw2ICsxMjkyLDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcbiBcdFx0XHQuc2lnbmFsc19uciAgID0gNCxcbiBcdFx0XHQuZnJlcV9pbl9uciAgID0gNCxcbiBcdFx0XHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXG4rXHRcdFx0Lmhhc19jcGxkICAgICA9IHRydWUsXG4gXHRcdH0sXG4gXHR9LFxuIFx0eyB9XG5AQCAtMjE4NSw2ICsyMjA1LDE5IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRpZiAoYnAtXHUwMDNlaGFzX2NwbGQpIHtcbitcdFx0dTMyIGlkO1xuK1xuK1x0XHRlcnIgPSBhZHZhX3gxX2NwbGRfZGV2aWNlX2lkKGJwLCBcdTAwMjZpZCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0c3ByaW50ZihidWYsIFwiMHglMDh4XCIsIGlkKTtcbitcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgXCJjcGxkLmlkXCIsIGJ1Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMTk5LDYgKzMyMzIsMzAgQEAgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0cHRwX29jcF9zbWFfaW5pdChicCk7XG4gXG4rXHRicC1cdTAwM2VoYXNfY3BsZCA9IGluZm8tXHUwMDNlaGFzX2NwbGQ7XG4rXHRpZiAoYnAtXHUwMDNlaGFzX2NwbGQpIHtcbitcdFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xuK1x0XHRjb25zdCBjaGFyICpuYW1lO1xuK1xuK1x0XHQvKiBPbmUgaW5zdGFuY2UgcGVyIGNhcmQsIG51bWJlcmVkIGxpa2UgdGhlIG9jcE4gZGV2aWNlLlxuK1x0XHQgKiBmaXJtd2FyZV91cGxvYWRfcmVnaXN0ZXIoKSBrZWVwcyB0aGUgcG9pbnRlciByYXRoZXIgdGhhblxuK1x0XHQgKiBjb3B5aW5nIHRoZSBzdHJpbmcsIHNvIGl0IGhhcyB0byBvdXRsaXZlIHRoZSByZWdpc3RyYXRpb24uXG4rXHRcdCAqL1xuK1x0XHRuYW1lID0gZGV2bV9rYXNwcmludGYoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYsIEdGUF9LRVJORUwsXG4rXHRcdFx0XHQgICAgICBcImFkdmEtY3BsZC4lZFwiLCBicC1cdTAwM2VpZCk7XG4rXHRcdGlmICghbmFtZSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdFx0ZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0ICAgICAgIG5hbWUsIFx1MDAyNmFkdmFfY3BsZF91cGxvYWRfb3BzLCBicCk7XG4rXHRcdGlmIChJU19FUlIoZndsKSlcbitcdFx0XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkNQTEQgZmlybXdhcmUgdXBsb2FkIHVuYXZhaWxhYmxlOiAlcGVcXG5cIixcbitcdFx0XHRcdCBmd2wpO1xuK1x0XHRlbHNlXG4rXHRcdFx0YnAtXHUwMDNlY3BsZF9md191cGxvYWQgPSBmd2w7XG4rXHR9XG4rXG4gXHRyZXR1cm4gcHRwX29jcF9pbml0X2Nsb2NrKGJwLCBcdTAwMjZpbmZvLVx1MDAzZXNlcnZvKTtcbiB9XG4gXG5AQCAtNDIyNiw2ICs0MjgzLDYwNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHtcbiBcdHsgfSxcbiB9O1xuIFxuKy8qXG4rICogSW50ZXJuYWwgaGVscGVycyBmb3IgdGhlIGFkdmFfeDEgVEFQIENQTEQgKExhdHRpY2UgTENNWE8zTEYtMjEwMCkuXG4rICpcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cbisgKiBUaGUgaTJjX2J1c19jdHJsIGhhbmRzaGFrZSByZS1yb3V0ZXMgd2hhdCBlYWNoIG9uZSBpcyB3aXJlZCB0bzpcbisgKlxuKyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVx1MDAzZSBUTUMgb3IgTS4yLCBNQidzIGNob2ljZVxuKyAqICAgZ3JhbnQgMTogIDB4MTUwMDAwIC1cdTAwM2UgVE1DIGJ1cyAgICAgMHgxMjAwMDAgLVx1MDAzZSBNLjJcbisgKlxuKyAqIFRoZSBQQ0E5NTQ4IGF0IDB4NzQgYW5kIHRoZSBDUExEIGF0IDB4NDAgYmVoaW5kIGl0cyBjaGFubmVsIDAgc2l0IG9uXG4rICogdGhlIFRNQyBidXMsIHNvIHRoZXkgYXJlIHJlYWNoYWJsZSBvbmx5IHdoaWxlIHRoZSBncmFudCBpcyBoZWxkLiAgRm9yXG4rICogdGhhdCBzYW1lIHdpbmRvdyB0aGUgRUVQUk9NcyBhcmUgbm90IGJlaGluZCB0aGUgYWRhcHRlciBhdCBhbGwsIHNvIGFcbisgKiBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2sgYW5kIHRoZSBpMmMgYWRhcHRlciBsb2NrIGFjcm9zcyBpdCB0b1xuKyAqIGtlZXAgdGhlIEVFUFJPTSBhbmQgbnZtZW0gcGF0aHMgb2ZmIHRoZSBjb250cm9sbGVyLlxuKyAqXG4rICogTm8gcmF3IEkyQyBhY2Nlc3MgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG9ubHkgdGhlIGF0dHJpYnV0ZXMgYmVsb3cuXG4rICovXG4rXG4rI2RlZmluZSBBRFZBX01VWF9BRERSICAgICAweDc0XG4rI2RlZmluZSBBRFZBX0NQTERfQUREUiAgICAweDQwXG4rI2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXG4rXG4rLyogTG9uZ2VzdCBjb21tYW5kIG9yIHJlcGx5OyBib3VuZHMgZWFjaCBoYWxmIG9mIHRoZSBwZXItY2xhaW0gc2NyYXRjaC4gKi9cbisjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxuK1xuKyNkZWZpbmUgTUJMQVpFX1JFUVVFU1QgICAgMHgwMDAwYWFhYVVcbisjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXG4rI2RlZmluZSBNQkxBWkVfUkVMRUFTRSAgICAweDU1NTUwMDAwVVxuKyNkZWZpbmUgTUJMQVpFX1JFVFJJRVMgICAgMjAwXG4rI2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxuK1xuKy8qIExhdHRpY2UgTENNWE8zTEYgSVNDIGNvbW1hbmQgY29kZXMgKi9cbisjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqL1xuKyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcbisjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFXG4rI2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NlxuKyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcbisjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFXG4rI2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OVxuKyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XG4rI2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi9cbitcbisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucyAoTGF0dGljZSBMQ01YTzNMRiBkYXRhc2hlZXQpICovXG4rI2RlZmluZSBDUExEX1NUQVRVU19ET05FICAgQklUKDgpXG4rI2RlZmluZSBDUExEX1NUQVRVU19CVVNZICAgQklUKDEyKVxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRkFJTEVEIEJJVCgxMylcbitcbisvKlxuKyAqIGFkdmFfeDFfaTJjX3hmZXIoKSAtIGlzc3VlIGEgc2luZ2xlIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1cy5cbisgKlxuKyAqIFdyaXRlcyBAY21kIHdoZW4gaXQgaXMgbm90IG5lZ2F0aXZlLCBmb2xsb3dlZCBieSBAd2xlbiBieXRlcyBvZiBAd2RhdGEsXG4rICogdGhlbiByZWFkcyBAcmxlbiBieXRlcyBpZiBhc2tlZC4gIEEgTlVMTCBAd2RhdGEgc2VuZHMgemVyb3MuXG4rICpcbisgKiBUaGUgbWVzc2FnZSBpcyBhc3NlbWJsZWQgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIHRha2VuIGJ5XG4rICogYWR2YV94MV9idXNfY2xhaW0oKSwgd2hpY2ggdGhlIFhpbGlueCBjb250cm9sbGVyIG5lZWRzIGZvciBETUEgc2FmZXR5OlxuKyAqIGFuIG9wY29kZSBhbmQgaXRzIGFyZ3VtZW50cyBhcmUgY29waWVkIGV4YWN0bHkgb25jZSwgYW5kIGEgZmlybXdhcmVcbisgKiB1cGxvYWQgY29zdHMgb25lIGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gb25lIHBlciBwYWdlLlxuKyAqXG4rICogQ2FsbGVyIG11c3QgaG9sZCB0aGF0IGNsYWltLCBoZW5jZSBfX2kyY190cmFuc2ZlcigpIG92ZXIgaTJjX3RyYW5zZmVyKCkuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbitcdFx0XHQgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sXG4rXHRcdFx0ICAgIHZvaWQgKnJkYXRhLCB1OCBybGVuKVxuK3tcbitcdHU4ICp3YnVmLCAqcmJ1ZjtcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbitcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4rXHRpbnQgbm1zZ3MgPSAwLCByZXQ7XG4rXHR1MTYgaGRyID0gY21kIFx1MDAzZT0gMDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4rXHRpZiAoIWFkYXAgfHwgIWJwLVx1MDAzZWNwbGRfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGlmIChoZHIgKyB3bGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiBcdTAwM2UgQURWQV9DUExEX1hGRVJfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHdidWYgPSBicC1cdTAwM2VjcGxkX2J1ZjtcbitcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiArIEFEVkFfQ1BMRF9YRkVSX01BWDtcbitcbitcdGlmIChoZHIgKyB3bGVuKSB7XG4rXHRcdGlmIChoZHIpXG4rXHRcdFx0d2J1ZlswXSA9IGNtZDtcbitcdFx0aWYgKHdkYXRhKVxuK1x0XHRcdG1lbWNweSh3YnVmICsgaGRyLCB3ZGF0YSwgd2xlbik7XG4rXHRcdGVsc2VcbitcdFx0XHRtZW1zZXQod2J1ZiArIGhkciwgMCwgd2xlbik7XG4rXHRcdG1zZ3Nbbm1zZ3MrK10gPSAoc3RydWN0IGkyY19tc2cpe1xuK1x0XHRcdC5hZGRyICA9IGFkZHIsXG4rXHRcdFx0LmZsYWdzID0gSTJDX01fRE1BX1NBRkUsXG4rXHRcdFx0LmxlbiAgID0gaGRyICsgd2xlbixcbitcdFx0XHQuYnVmICAgPSB3YnVmLFxuK1x0XHR9O1xuK1x0fVxuK1x0aWYgKHJsZW4pIHtcbitcdFx0bXNnc1tubXNncysrXSA9IChzdHJ1Y3QgaTJjX21zZyl7XG4rXHRcdFx0LmFkZHIgID0gYWRkcixcbitcdFx0XHQuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX0RNQV9TQUZFLFxuK1x0XHRcdC5sZW4gICA9IHJsZW4sXG4rXHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbitcdFx0fTtcbitcdH1cbitcbitcdHJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcbitcdGlmIChyZXQgIT0gbm1zZ3MpXG4rXHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4rXG4rXHRpZiAocmRhdGEgXHUwMDI2XHUwMDI2IHJsZW4pXG4rXHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0aWYgKGJwLVx1MDAzZXBwc19zZWxlY3QpXG4rXHRcdGlvd3JpdGUzMihNQkxBWkVfUkVMRUFTRSwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK31cbitcbisvKiBBY3F1aXJlIHRoZSBzaGFyZWQgSTJDIGJ1cyBmcm9tIHRoZSBNaWNyb0JsYXplIGZpcm13YXJlLiAgUmV0dXJucyB3aXRoIG5vXG4rICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhXG4rICogc2VnbWVudCB0byBhIGhvc3QgdGhhdCBoYXMgZ2l2ZW4gdXAgd2FpdGluZyBmb3IgaXQuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWJwLVx1MDAzZXBwc19zZWxlY3QpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0LyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2tcbitcdCAqIGtlZXBzIGxpdmUgb25lcyBvdXQuICBUaGUgcmVhZCBiYWNrIG9ubHkgZmx1c2hlcyB0aGUgcG9zdGVkIHdyaXRlLlxuK1x0ICovXG4rXHRpb3dyaXRlMzIoMCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0aW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1xuK1x0aW93cml0ZTMyKE1CTEFaRV9SRVFVRVNULCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQkxBWkVfUkVUUklFUzsgaSsrKSB7XG4rXHRcdHVzbGVlcF9yYW5nZShNQkxBWkVfUkVUUllfVVMsIE1CTEFaRV9SRVRSWV9VUyArIDEwMDApO1xuK1x0XHR2YWwgPSBpb3JlYWQzMihcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4rXHRcdGlmICh2YWwgPT0gTUJMQVpFX0dSQU5URUQpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTtcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbisvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuXG4rICogU2FmZSBhZnRlciBhIGZhaWxlZCBjbGFpbTogaXQgYWxzbyBjbGVhcnMgYSByZXF1ZXN0IHRoYXQgd2FzIG5ldmVyIGdyYW50ZWQuXG4rICovXG4rc3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gYnAtXHUwMDNlY3BsZF9hZGFwO1xuK1xuK1x0aWYgKCFhZGFwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKGJwKTtcbitcdGJwLVx1MDAzZWNwbGRfYWRhcCA9IE5VTEw7XG4rXHRrZnJlZShicC1cdTAwM2VjcGxkX2J1Zik7XG4rXHRicC1cdTAwM2VjcGxkX2J1ZiA9IE5VTEw7XG4rXHRpMmNfdW5sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xuK1x0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuK31cbitcbisvKlxuKyAqIENsYWltIHRoZSBUTUMgYnVzIGZvciBhIENQTEQgb3BlcmF0aW9uLiAgSG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIG92ZXJcbisgKiB0aGUgaGFuZHNoYWtlIGtlZXBzIHB0cF9vY3BfcmVhZF9lZXByb20oKSwgdGhlIG52bWVtIGF0dHJpYnV0ZXMgYW5kIHRoZVxuKyAqIGF0MjQgc3lzZnMgZmlsZXMgb2ZmIHRoZSBjb250cm9sbGVyIHdoaWxlIGl0IGlzIHJvdXRlZCBhd2F5IGZyb20gdGhlXG4rICogRUVQUk9Ncy4gIEEgZmlybXdhcmUgdXBsb2FkIGhvbGRzIGl0IGFjcm9zcyB0aGUgd2hvbGUgcHJlcGFyZS93cml0ZS9wb2xsXG4rICogc2VxdWVuY2UsIHNvIGFuIEVFUFJPTSByZWFkIGJsb2NrcyBmb3IgYXMgbG9uZyBhcyBwcm9ncmFtbWluZyB0YWtlcy5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1xuK1x0YWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikpO1xuK1x0aWYgKCFhZGFwKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdC8qIE9uZSBzY3JhdGNoIGJ1ZmZlciBwZXIgY2xhaW0gcmF0aGVyIHRoYW4gcGVyIHRyYW5zZmVyOiBhIGZpcm13YXJlXG4rXHQgKiB1cGxvYWQgaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UsIHNvIHRoaXMgaXMgYSBzaW5nbGVcbitcdCAqIGFsbG9jYXRpb24gaW5zdGVhZCBvZiBvbmUgZm9yIGVhY2ggMTYtYnl0ZSBwYWdlLlxuK1x0ICovXG4rXHRicC1cdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJwLVx1MDAzZWNwbGRfYnVmKSB7XG4rXHRcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbitcdGJwLVx1MDAzZWNwbGRfYWRhcCA9IGFkYXA7XG4rXG4rXHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcbitcdGlmIChyZXQpXG4rXHRcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogU2VsZWN0IGEgbXV4IGNoYW5uZWwsIG9yIGRlc2VsZWN0IGFsbCB3aXRoIGNoIFx1MDAzYyAwIC0gdGhlIHBvd2VyLW9uIHN0YXRlLlxuKyAqIFRoZSBtdXggaXMgb24gdGhlIFRNQyBidXMsIHNvIHdoYXQgaXQgaXMgbGVmdCBzZXQgdG8gbmV2ZXIgYWZmZWN0cyB0aGVcbisgKiBFRVBST00gcGF0aHMuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX211eF9zZWxlY3Qoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgY2gpXG4re1xuK1x0dTggdmFsID0gKGNoIFx1MDAzZT0gMCkgPyBCSVQoY2gpIDogMDtcbitcbitcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX01VWF9BRERSLCB2YWwsIE5VTEwsIDAsIE5VTEwsIDApO1xuK31cbitcbisvKlxuKyAqIEFyZ3VtZW50IGJ5dGVzIHRoYXQgZm9sbG93IGFuIElTQyBvcGNvZGUuICBSZXR1cm5zIE5VTEwgd2l0aCBAbmFyZ3Mgc2V0XG4rICogd2hlbiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgemVybzogYWR2YV94MV9pMmNfeGZlcigpIHplcm9lcyB0aGUgYnVmZmVyLlxuKyAqL1xuK3N0YXRpYyBjb25zdCB1OCAqYWR2YV94MV9jcGxkX2FyZ3ModTggY21kLCB1OCAqbmFyZ3MpXG4re1xuK1x0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XG4rXHRzdGF0aWMgY29uc3QgdTggZXJhc2VfY2ZnW10gPSB7IDB4MDQsIDB4MDAsIDB4MDAgfTsgLyogY2ZnIHNlY3RvciBvbmx5ICovXG4rXG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XG4rXHRcdCpuYXJncyA9IHNpemVvZihlbl9jZmdfdHApO1xuK1x0XHRyZXR1cm4gZW5fY2ZnX3RwO1xuK1x0Y2FzZSBDUExEX0NNRF9FUkFTRTpcbitcdFx0Km5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7XG4rXHRcdHJldHVybiBlcmFzZV9jZmc7XG4rXHRjYXNlIENQTERfQ01EX1JFU0VUX0FERFI6XG4rXHRjYXNlIENQTERfQ01EX1NFVF9ET05FOlxuK1x0XHQqbmFyZ3MgPSAzO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGNhc2UgQ1BMRF9DTURfRElTX0NGRzpcbitcdGNhc2UgQ1BMRF9DTURfUkVGUkVTSDpcbitcdFx0Km5hcmdzID0gMjtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRkZWZhdWx0OlxuK1x0XHQqbmFyZ3MgPSAwO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4rLyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXG4re1xuK1x0Y29uc3QgdTggKmFyZ3M7XG4rXHR1OCBuYXJncztcbitcbitcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFx1MDAyNm5hcmdzKTtcbitcbitcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgY21kLCBhcmdzLCBuYXJncywgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogU2VuZCBhIDQtYnl0ZSBjb21tYW5kIHRoZW4gcmVhZCBkYXRhIGJhY2sgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgU1RPUFxuKyAqIChMYXR0aWNlIGNvbWJpbmVkIHdyaXRlLVx1MDAzZXJlcGVhdGVkLVNUQVJULVx1MDAzZXJlYWQpLiAgVHdvIG1lc3NhZ2VzIGluIG9uZVxuKyAqIHRyYW5zZmVyIGlzIGV4YWN0bHkgdGhhdCwgc28gbm8gcHJvdG9jb2wtbWFuZ2xpbmcgZmxhZyBpcyBuZWVkZWQuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfY21kX3JlYWQoc3RydWN0IHB0cF9vY3AgKmJwLFxuK1x0XHRcdFx0IHUzMiBjbWRfYmUsIHU4ICpvdXQsIHU4IG91dF9sZW4pXG4re1xuK1x0X19iZTMyIGNtZCA9IGNwdV90b19iZTMyKGNtZF9iZSk7XG4rXG4rXHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIC0xLCBcdTAwMjZjbWQsIDQsIG91dCwgb3V0X2xlbik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpXG4re1xuK1x0dTggYnVmWzRdO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9TVEFUVVMsIGJ1ZiwgNCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0KnN0YXR1cyA9IGdldF91bmFsaWduZWRfYmUzMihidWYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgQ1BMRCBnb2VzIGlkbGUsIG9yIEBtYXhfbXMgZWxhcHNlcy5cbisgKiBUaGUgZGVhZGxpbmUgaXMgb24gd2FsbCB0aW1lLCBzbyB0aGUgSTJDIHRyYW5zYWN0aW9ucyBjb3VudCBhZ2FpbnN0IGl0LFxuKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHJlYWQgb25jZSBtb3JlIGFmdGVyIGl0IGV4cGlyZXMgYmVmb3JlIGdpdmluZyB1cC5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KHN0cnVjdCBwdHBfb2NwICpicCwgdW5zaWduZWQgaW50IG1heF9tcylcbit7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdGludCBlcnIsIHJldDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cywgZXJyLFxuK1x0XHRcdFx0ZXJyIHx8IFJFQURfT05DRShicC1cdTAwM2VjcGxkX2NhbmNlbCkgfHxcbitcdFx0XHRcdChzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0ZBSUxFRCkgfHxcbitcdFx0XHRcdCEoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbitcdFx0XHRcdENQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4rXHRcdFx0XHRicCwgXHUwMDI2c3RhdHVzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSlcbitcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4rXHRpZiAoZXJyIHx8IChzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0ZBSUxFRCkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEEgc3RlcCBhYm9ydGVkIGJ5IGNhbmNlbCgpIG11c3QgYmUgcmVwb3J0ZWQgYXMgc3VjaCwgbm90IGFzIGEgSFcgZXJyb3IuICovXG4rc3RhdGljIGVudW0gZndfdXBsb2FkX2VyciBhZHZhX2NwbGRfZXJyKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSA/IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRURcbitcdFx0XHRcdFx0ICA6IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rfVxuK1xuKy8qXG4rICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgb2YgdGhlIFRBUCBDUExELiAgSXQgaXMgYSBmaXhlZCBwcm9wZXJ0eSBvZlxuKyAqIHRoZSBwYXJ0LCBzbyBjYWNoZSBpdCBhbmQgcGF5IHRoZSBidXMgYXJiaXRyYXRpb24gb25seSBvbmNlLiAgVGhlXG4rICogTENNWE8zTEYtMjEwMCBJRENPREUgaXMgMHhlMTJiYzA0My5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9kZXZpY2VfaWQoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKmlkKVxuK3tcbitcdHU4IGRhdGFbNF07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGJwLVx1MDAzZWNwbGRfaWQpIHtcbitcdFx0KmlkID0gYnAtXHUwMDNlY3BsZF9pZDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbitcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZTtcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9JRCwgZGF0YSwgNCk7XG4rXHRpZiAoIXJldClcbitcdFx0YnAtXHUwMDNlY3BsZF9pZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK3JlbGVhc2U6XG4rXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbitvdXQ6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcdGlmICghcmV0KVxuK1x0XHQqaWQgPSBicC1cdTAwM2VjcGxkX2lkO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLypcbisgKiBjcGxkX3N0YXR1cyAtIHNob3cgdGhlIHN0YXR1cyByZWdpc3RlciBvZiB0aGUgVEFQIENQTEQuXG4rICpcbisgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nOiBcImRvbmU9XHUwMDNjMHwxXHUwMDNlIGJ1c3k9XHUwMDNjMHwxXHUwMDNlIGZhaWxlZD1cdTAwM2MwfDFcdTAwM2VcXG5cIlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90XG4rY3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHQgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0dTMyIHN0ID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbitcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVsZWFzZTtcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXHUwMDI2c3QpO1xuK1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4rcmVsZWFzZTpcbitcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0cmV0dXJuIHJldCA/IHJldCA6IHN5c2ZzX2VtaXQoYnVmLCBcImRvbmU9JXUgYnVzeT0ldSBmYWlsZWQ9JXVcXG5cIixcbitcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19ET05FKSxcbitcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbitcdFx0XHRcdCAgICAgICEhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpKTtcbit9XG4rc3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTtcbitcbisvKlxuKyAqIGFkdmFfeDEgQ1BMRCBmaXJtd2FyZS11cGxvYWQgY2FsbGJhY2tzLlxuKyAqXG4rICogVGhlIGtlcm5lbCBmaXJtd2FyZS11cGxvYWQgc3Vic3lzdGVtIChDT05GSUdfRldfVVBMT0FEKSBleHBvc2VzOlxuKyAqICAgL3N5cy9jbGFzcy9maXJtd2FyZS9hZHZhLWNwbGQuTi97ZGF0YSxsb2FkaW5nLHN0YXR1cyxlcnJvciwuLi59XG4rICogd2hlcmUgTiBpcyB0aGUgaW5kZXggb2YgdGhlIG93bmluZyBvY3BOIGRldmljZS5cbisgKiBVc2Vyc3BhY2Ugd3JpdGVzIHRoZSByYXcgYmluYXJ5IHBhZ2UgZGF0YSBkaXJlY3RseSDigJQgbm8gL2xpYi9maXJtd2FyZS9cbisgKiBzdGFnaW5nIGZpbGUgaXMgbmVlZGVkLlxuKyAqXG4rICogQ2FsbGJhY2sgc2VxdWVuY2UgZHJpdmVuIGJ5IHRoZSBmcmFtZXdvcms6XG4rICogICBwcmVwYXJlKCkgICAgICAtIHZhbGlkYXRlIHNpemUsIGFjcXVpcmUgYnVzLCBlbmFibGUgY29uZmlnLCBlcmFzZSBmbGFzaFxuKyAqICAgd3JpdGUoKSAgICAgICAgLSBwcm9ncmFtIG9uZSAxNi1ieXRlIHBhZ2UgcGVyIGNhbGxcbisgKiAgIHBvbGxfY29tcGxldGUoKS0gc2V0IERPTkUsIFJFRlJFU0gsIHdhaXQgZm9yIENQTEQgdG8gcmVib290XG4rICogICBjYW5jZWwoKSAgICAgICAtIHNldCBmbGFnOyBjaGVja2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNhbGxiYWNrXG4rICogICBjbGVhbnVwKCkgICAgICAtIHJlbGVhc2UgYnVzIHJlc291cmNlcyAoY2FsbGVkIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbisgKi9cbitzdGF0aWMgZW51bSBmd191cGxvYWRfZXJyXG4rYWR2YV9jcGxkX3ByZXBhcmUoc3RydWN0IGZ3X3VwbG9hZCAqZndsLCBjb25zdCB1OCAqZGF0YSwgdTMyIHNpemUpXG4re1xuK1x0ZW51bSBmd191cGxvYWRfZXJyIHJldCA9IEZXX1VQTE9BRF9FUlJfTk9ORTtcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4rXG4rXHQvKiBEbyBub3QgY2xlYXIgY3BsZF9jYW5jZWwgaGVyZTogZndfdXBsb2FkX3N0YXJ0KCkgcXVldWVzIHRoZSB3b3JrXG4rXHQgKiBiZWZvcmUgdGhpcyBydW5zLCBzbyBhIGNhbmNlbCBtYXkgYWxyZWFkeSBoYXZlIGFycml2ZWQuICBJdCBpc1xuK1x0ICogY2xlYXJlZCBvbmNlIHRoZSB1cGxvYWQgaXMgb3Zlciwgb24gZXZlcnkgZXhpdCBiZWxvdyBhbmQgaW5cbitcdCAqIGNsZWFudXAoKS5cbitcdCAqL1xuK1x0aWYgKCFzaXplIHx8IHNpemUgJSBDUExEX1BBR0VfU0laRSkge1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4rXHRcdHJldHVybiBGV19VUExPQURfRVJSX0lOVkFMSURfU0laRTtcbitcdH1cbitcbitcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGlmIChhZHZhX3gxX2J1c19jbGFpbShicCkpIHtcbitcdFx0cmV0ID0gRldfVVBMT0FEX0VSUl9USU1FT1VUO1xuK1x0XHRnb3RvIGVycl91bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKSkge1xuK1x0XHRyZXQgPSBGV19VUExPQURfRVJSX0hXX0VSUk9SO1xuK1x0XHRnb3RvIGVycl9yZWxlYXNlO1xuK1x0fVxuK1xuK1x0LyogU2V0IGJlZm9yZSBpc3N1aW5nIEVOX0NGR19UUCwgbm90IGFmdGVyIGl0IGNvbXBsZXRlczogdGhlIENQTEQgbWF5XG4rXHQgKiBoYXZlIGVudGVyZWQgY29uZmlndXJhdGlvbiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIHJlcG9ydHMgYW4gZXJyb3JcbitcdCAqIG9yIHRoZSB3YWl0IGJlbG93IHRpbWVzIG91dCwgYW5kIGVycl9kZXNlbGVjdCBvbmx5IHNlbmRzIERJU19DRkdcbitcdCAqIHdoZW4gdGhpcyBpcyBzZXQuICBBIERJU19DRkcgdG8gYSBkZXZpY2UgdGhhdCBuZXZlciBlbnRlcmVkIHRoZVxuK1x0ICogbW9kZSBpcyBoYXJtbGVzczsgbGVhdmluZyBpdCBlbmFibGVkIGlzIG5vdC5cbitcdCAqL1xuK1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7XG4rXG4rXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FTl9DRkdfVFApIHx8XG4rXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApKSB7XG4rXHRcdHJldCA9IGFkdmFfY3BsZF9lcnIoYnApO1xuK1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbitcdH1cbitcbitcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpKSB7XG4rXHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4rXHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuK1x0fVxuK1xuK1x0aWYgKGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRVJBU0UpIHx8XG4rXHQgICAgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDE1MDAwKSkge1xuK1x0XHRyZXQgPSBhZHZhX2NwbGRfZXJyKGJwKTtcbitcdFx0Z290byBlcnJfZGVzZWxlY3Q7XG4rXHR9XG4rXG4rXHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSkge1xuK1x0XHRyZXQgPSBGV19VUExPQURfRVJSX0NBTkNFTEVEO1xuK1x0XHRnb3RvIGVycl9kZXNlbGVjdDtcbitcdH1cbitcbitcdGlmIChhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpKSB7XG4rXHRcdHJldCA9IEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rXHRcdGdvdG8gZXJyX2Rlc2VsZWN0O1xuK1x0fVxuK1xuK1x0LyogY2xlYW51cCgpIHVubG9ja3MgZXZlcnl0aGluZy4gIGZ3X3VwbG9hZF9tYWluKCkgb25seSBwYWlycyBpdCB3aXRoXG4rXHQgKiBhIHByZXBhcmUoKSB0aGF0IHN1Y2NlZWRlZCwgc28gdGhlIGVycm9yIHBhdGhzIGJlbG93IHVubG9jayBoZXJlXG4rXHQgKiBpbnN0ZWFkOyBoYW5kIHRoZSBjb250ZXh0IHRvIGNsZWFudXAoKSBmb3Igc3BhcnNlJ3MgYmVuZWZpdC5cbitcdCAqL1xuK1x0X19yZWxlYXNlKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuK1xuK2Vycl9kZXNlbGVjdDpcbitcdGlmIChicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKSB7XG4rXHRcdGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4rXHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbitcdH1cbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK2Vycl9yZWxlYXNlOlxuK1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rZXJyX3VubG9jazpcbitcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwsIGZhbHNlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGVudW0gZndfdXBsb2FkX2VyclxuK2FkdmFfY3BsZF93cml0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd2wsIGNvbnN0IHU4ICpkYXRhLFxuK1x0XHR1MzIgb2Zmc2V0LCB1MzIgc2l6ZSwgdTMyICp3cml0dGVuKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4rXHR1OCBhcmdzWzMgKyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpKVxuK1x0XHRyZXR1cm4gRldfVVBMT0FEX0VSUl9DQU5DRUxFRDtcbitcbitcdGlmIChzaXplIFx1MDAzYyBDUExEX1BBR0VfU0laRSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSU5WQUxJRF9TSVpFO1xuK1xuK1x0bWVtY3B5KFx1MDAyNmFyZ3NbM10sIGRhdGEgKyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTtcbitcbitcdGlmIChhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgQ1BMRF9DTURfV1JJVEVfUEFHRSxcbitcdFx0XHQgICAgIGFyZ3MsIHNpemVvZihhcmdzKSwgTlVMTCwgMCkgfHxcbitcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTAwKSlcbitcdFx0cmV0dXJuIGFkdmFfY3BsZF9lcnIoYnApO1xuK1xuK1x0KndyaXR0ZW4gPSBDUExEX1BBR0VfU0laRTtcbitcdHJldHVybiBGV19VUExPQURfRVJSX05PTkU7XG4rfVxuK1xuK3N0YXRpYyBlbnVtIGZ3X3VwbG9hZF9lcnJcbithZHZhX2NwbGRfcG9sbF9jb21wbGV0ZShzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXG4re1xuK1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVx1MDAzZWRkX2hhbmRsZTtcbitcdGludCBlcnI7XG4rXHR1MzIgc3Q7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXG4rXHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfQ0FOQ0VMRUQ7XG4rXG4rXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSkgfHxcbitcdCAgICBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMTAwMCkpXG4rXHRcdHJldHVybiBhZHZhX2NwbGRfZXJyKGJwKTtcbitcbitcdGlmIChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KSB8fCAhKHN0IFx1MDAyNiBDUExEX1NUQVRVU19ET05FKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rXG4rXHRpZiAoYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfSFdfRVJST1I7XG4rXG4rXHQvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gY2xlYW51cCgpXG4rXHQgKiBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZmFpbC5cbitcdCAqL1xuK1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xuK1xuK1x0LyogVGhlIG5ldyBpbWFnZSBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgdGhpcyBwb2ludCwgc28gYSBzZWdtZW50IHRoYXRcbitcdCAqIGlzIG5vdCBiYWNrIHlldCBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyBhIGZhaWxlZCB1cGRhdGU6IHJldHJ5IHRoZVxuK1x0ICogcmVzZWxlY3QgaW5zdGVhZCBvZiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cbitcdCAqL1xuK1x0bXNsZWVwKDE1MDApO1xuK1x0aWYgKHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXG4rXHRcdFx0ICAgICAgMzAwMCAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuK1x0XHRcdCAgICAgIGJwLCBBRFZBX01VWF9DSEFOTkVMKSlcbitcdFx0cmV0dXJuIEZXX1VQTE9BRF9FUlJfVElNRU9VVDtcbitcbitcdGlmIChhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMzAwMCkpXG4rXHRcdHJldHVybiBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9jYW5jZWwpID8gRldfVVBMT0FEX0VSUl9DQU5DRUxFRFxuK1x0XHRcdFx0XHRcdCAgOiBGV19VUExPQURfRVJSX1RJTUVPVVQ7XG4rXG4rXHRyZXR1cm4gRldfVVBMT0FEX0VSUl9OT05FO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2FkdmFfY3BsZF9jYW5jZWwoc3RydWN0IGZ3X3VwbG9hZCAqZndsKVxuK3tcbitcdHN0cnVjdCBwdHBfb2NwICpicCA9IGZ3bC1cdTAwM2VkZF9oYW5kbGU7XG4rXG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbithZHZhX2NwbGRfY2xlYW51cChzdHJ1Y3QgZndfdXBsb2FkICpmd2wpXG4re1xuK1x0c3RydWN0IHB0cF9vY3AgKmJwID0gZndsLVx1MDAzZWRkX2hhbmRsZTtcbitcbitcdF9fYWNxdWlyZShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1x0LyogaGVsZCBzaW5jZSBwcmVwYXJlKCkgcmV0dXJuZWQgb2sgKi9cbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGlmIChicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKSB7XG4rXHRcdGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4rXHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbitcdH1cbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfY2FuY2VsLCBmYWxzZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmd191cGxvYWRfb3BzIGFkdmFfY3BsZF91cGxvYWRfb3BzID0ge1xuK1x0LnByZXBhcmVcdCA9IGFkdmFfY3BsZF9wcmVwYXJlLFxuK1x0LndyaXRlXHRcdCA9IGFkdmFfY3BsZF93cml0ZSxcbitcdC5wb2xsX2NvbXBsZXRlXHQgPSBhZHZhX2NwbGRfcG9sbF9jb21wbGV0ZSxcbitcdC5jYW5jZWxcdFx0ID0gYWR2YV9jcGxkX2NhbmNlbCxcbitcdC5jbGVhbnVwXHQgPSBhZHZhX2NwbGRfY2xlYW51cCxcbit9O1xuK1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiArNDkzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0cixcbitcdFx1MDAyNmRldl9hdHRyX2NwbGRfc3RhdHVzLmF0dHIsXG4gXHROVUxMLFxuIH07XG4gXG5AQCAtNDg2Nyw2ICs1NTI2LDE1IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiB7XG4gXHRpbnQgaTtcbiBcbitcdC8qIE11c3QgY29tZSBmaXJzdDogY2FuY2VscyBhbmQgZmx1c2hlcyBhbiBpbi1mbGlnaHQgdXBsb2FkIHdoaWxlIHRoZVxuK1x0ICogSTJDIGNvbnRyb2xsZXIgaXMgc3RpbGwgdXAsIGFuZCBkcm9wcyBjcGxkX2xvY2sgc28gYSBjcGxkX3N0YXR1c1xuK1x0ICogcmVhZGVyIGNhbm5vdCBzdGFsbCBwdHBfb2NwX2F0dHJfZ3JvdXBfZGVsKCkgYmVsb3cuXG4rXHQgKi9cbitcdGlmIChicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCkge1xuK1x0XHRmaXJtd2FyZV91cGxvYWRfdW5yZWdpc3RlcihicC1cdTAwM2VjcGxkX2Z3X3VwbG9hZCk7XG4rXHRcdGJwLVx1MDAzZWNwbGRfZndfdXBsb2FkID0gTlVMTDtcbitcdH1cbitcbiBcdHB0cF9vY3BfZGVidWdmc19yZW1vdmVfZGV2aWNlKGJwKTtcbiBcdHB0cF9vY3BfZGV0YWNoX3N5c2ZzKGJwKTtcbiBcdHB0cF9vY3BfYXR0cl9ncm91cF9kZWwoYnApO1xuQEAgLTQ5MDQsNiArNTU3Miw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicClcbiBcdFx0Y2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC1cdTAwM2VpMmNfY2xrKTtcbiBcdGlmIChicC1cdTAwM2VuX2lycXMpXG4gXHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLVx1MDAzZXBkZXYpO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuIFx0ZGV2aWNlX3VucmVnaXN0ZXIoXHUwMDI2YnAtXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtNTA4MCw2ICs1NzQ5LDE3IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4rXHQvKiBNdXN0IGJlIGJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksXG4rXHQgKiBzbyBtdXRleF9kZXN0cm95KCkgYWx3YXlzIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXguXG4rXHQgKiBNdXN0IGFsc28gYmUgYmVmb3JlIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCk6IHRoZSBJMkMgYnVzXG4rXHQgKiBub3RpZmllciAocHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCkgZmlyZXMgd2hlbiB0aGUgYWRhcHRlclxuK1x0ICogcmVnaXN0ZXJzIGFuZCBzdG9yZXMgdGhlIGFkYXB0ZXIgbnVtYmVyIGluIGNwbGRfaTJjX2FkYXBfbnI7IHRoZVxuK1x0ICogLTEgc2VudGluZWwgYmVsb3cgbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gc28gdGhhdCBhIG5vdGlmaWVyXG4rXHQgKiBmaXJpbmcgZHVyaW5nIHJlZ2lzdHJhdGlvbiBpcyBuZXZlciBvdmVyd3JpdHRlbiBieSB0aGlzIGluaXQuXG4rXHQgKi9cbitcdG11dGV4X2luaXQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcdGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIgPSAtMTtcbitcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmJwLVx1MDAzZXN5bmNfd29yaywgcHRwX29jcF9zeW5jX3dvcmspO1xuIFxuIFx0LyogY29tcGF0IG1vZGUuXG5AQCAtNTIxOSwxMSArNTg5OSwxNiBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbitcdGlmIChhZGQpIHtcbiBcdFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXCJpMmNcIik7XG4tXHRlbHNlXG4rXHRcdC8qIENhY2hlIGFkYXB0ZXIgbnI7IHVzZWQgYnkgdGhlIENQTEQgc3RhdHVzL2lkL3VwbG9hZCBwYXRoc1xuK1x0XHQgKiBmb3IgcmVmZXJlbmNlLWNvdW50ZWQgdW5iaW5kLXNhZmUgYWRhcHRlciBhY2Nlc3MuXG4rXHRcdCAqL1xuK1x0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXHUwMDNlbnIpO1xuK1x0fSBlbHNlIHtcbitcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCAtMSk7IC8qIGludmFsaWRhdGUgYmVmb3JlIGZyZWUgKi9cbiBcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwiaTJjXCIpO1xuLVxuK1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MzY6NTAuMDI4NzAxMTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQzMTE3NjAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgXCJXb3J0aEZ1enppbmcsXCIgYW5kIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBcIkZvY3VzU3ltYm9sc1wiIGFuZCBcIkVuYWJsZUNvbmZpZ3NcIiBpZiBmdXp6aW5nIGlzIHdhcnJhbnRlZCwgYWxvbmcgd2l0aCB0aGUgXCJSZWFzb25pbmdcIiBiZWhpbmQgbXkgY29uY2x1c2lvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCwgYGRyaXZlcnMvcHRwL0tjb25maWdgLCBhbmQgYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRgLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBwdHBfb2NwYCwgd2hpY2gsIGJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGlzIGFzc29jaWF0ZWQgd2l0aCBgUFRQXzE1ODhfQ0xPQ0tfT0NQYC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCB3aGF0IGtpbmQgb2YgaGFyZHdhcmUgYXJlIHdlIGRlYWxpbmcgd2l0aD9cblxuTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBkaXJlY3RseS4gTXkgc3VzcGljaW9uIGlzIHRoYXQgYHB0cF9vY3BgIG1pZ2h0IGJlIGEgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBzb21ldGhpbmcgbGlrZSB0aGUgT3BlbkNvbXB1dGUgVGltZUNhcmQgb3IgcG90ZW50aWFsbHkgQURWQSBvciBBUlQgdGltZWNhcmRzLlxuXG5UaGlzIGxlYWRzIG1lIHRvIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGRyaXZlciByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHM/IElmIGl0IGRvZXMsIGFuZCBpdCdzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCB0aGVuIGZ1enppbmcgaXMgbGlrZWx5IG91dC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcnVsZSBoZXJlOiBJZiB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgb3IgaWYgaXQgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIG9yIHRlYXJkb3duIGNhbGxiYWNrcywgdGhlbiBpdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgaWYgYHB0cF9vY3BgIGlzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGxpa2UgT3BlbkNvbXB1dGUgVGltZUNhcmQgb3IgQURWQSB4MSBUQVAgY2FyZHMuIEEgcXVpY2sgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZSBmb3IgYHB0cF9vY3BgIHdpbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgbm90IGEgZHJpdmVyIHdoZXJlIEkgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM2OjU1LjQ1OTg3OTY3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNT0RVTEVfREVWSUNFX1RBQkxFXFxcXChwY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvcHRwX29jcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xMzAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfb2NwX3BjaWRldl9pZFtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDgtfTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTMwOTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcHRwX29jcF9wY2lkZXZfaWQpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjozNjo1NS41MDkxNzU4MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzcyOTQ5NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQQ0kgRGV2aWNlIElEIEhhbmRsaW5nIGluIHRoZSBQVFAgT0NQIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBwdHBfb2NwX3BjaWRldl9pZGAgdmFyaWFibGUgYW5kIHdoZXJlIGl0J3MgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUFRQIE9DUCBkcml2ZXIgaXMgaWRlbnRpZnlpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHNwZWNpZmljIFBDSSBkZXZpY2VzIGl0J3MgZGVzaWduZWQgdG8gd29yayB3aXRoLiBJIHN1c3BlY3QgdGhpcyBJRCBpcyBjcnVjaWFsIGZvciBkZXZpY2UgcHJvYmluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGVuc3VyaW5nIHRoYXQgdGhlIGRyaXZlciBjb3JyZWN0bHkgYmluZHMgdG8gdGhlIGludGVuZGVkIGhhcmR3YXJlLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgaG93IGl0J3MgaW5pdGlhbGl6ZWQsIHdoZXJlIGl0J3MgY29tcGFyZWQgYWdhaW5zdCBQQ0kgZGV2aWNlIElEcywgYW5kIGhvdyBhbnkgZGlzY3JlcGFuY2llcyBhcmUgaGFuZGxlZC4gQXJlIHRoZXJlIHNwZWNpZmljIHZlbmRvci9kZXZpY2UgSURzIGhhcmRjb2RlZCwgb3IgaXMgaXQgbW9yZSBnZW5lcmljPyBBcmUgd2UgZGVhbGluZyB3aXRoIGEgc2luZ2xlIElEIG9yIGEgcmFuZ2Ugb2YgYWNjZXB0YWJsZSBJRHM/IFRoaXMgSUQgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJ3MgY29tcGF0aWJpbGl0eSB3aXRoaW4gdGhpcyBQVFAgaW1wbGVtZW50YXRpb24uIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBvbiBzeXN0ZW0gYm9vdCwgaG90cGx1ZyBldmVudHMsIG9yIGRldmljZSBlbnVtZXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnZXQgY29kaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY1MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM2OjU4LjI4MjEyODIyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5NTpcXHRcXHRcXHRcXHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcXG4xMjk2OlxcdFxcdFxcdH0sXFxuMTI5NzpcXHRcXHR9LFxcbjEyOTg6XFx0XFx0eyB9XFxuMTI5OTpcXHR9O1xcbjEzMDA6XFx0XFxuMTMwMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcXG4xMzAyOlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxcbjEzMDM6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQ0VMRVNUSUNBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9mYl9yZXNvdXJjZSkgfSxcXG4xMzA0OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE9ST0xJQSwgQVJUQ0FSRCwgXFx1MDAyNm9jcF9hcnRfcmVzb3VyY2UpIH0sXFxuMTMwNTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxcbjEzMDY6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFxcdTAwMjZvY3BfYWR2YV94MV9yZXNvdXJjZSkgfSxcXG4xMzA3OlxcdFxcdHsgfVxcbjEzMDg6XFx0fTtcXG4xMzA5OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XFxuMTMxMDpcXHRcXG4xMzExOlxcdHN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcXG4xMzEyOlxcdHN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcXG4xMzEzOlxcdFxcbjEzMTQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9jbG9ja1tdID0ge1xcbjEzMTU6XFx0XFx0eyAubmFtZSA9IFxcXCJOT05FXFxcIixcXHQudmFsdWUgPSAwIH0sXFxuMTMxNjpcXHRcXHR7IC5uYW1lID0gXFxcIlRPRFxcXCIsXFx0LnZhbHVlID0gMSB9LFxcbjEzMTc6XFx0XFx0eyAubmFtZSA9IFxcXCJJUklHXFxcIixcXHQudmFsdWUgPSAyIH0sXFxuMTMxODpcXHRcXHR7IC5uYW1lID0gXFxcIlBQU1xcXCIsXFx0LnZhbHVlID0gMyB9LFxcbjEzMTk6XFx0XFx0eyAubmFtZSA9IFxcXCJQVFBcXFwiLFxcdC52YWx1ZSA9IDQgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6MzY6NTguMjgyMzY0ODU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2OTI4NjExMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgcHRwX29jcCBEcml2ZXIgYW5kIFdvcnRoRnV6emluZyoqXG5cbk9rYXksIHNvIGBwdHBfb2NwYCBpcyBjbGVhcmx5IGEgZHJpdmVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgUENJIGRldmljZXMuIEknbSBzZWVpbmcgaXQgc3VwcG9ydHMgYSBoYW5kZnVsIG9mIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzOiBNZXRhIFRpbWVDYXJkLCBDZWxlc3RpY2EgVGltZUNhcmQsIE9yb2xpYSBBcnRDYXJkLCBhbmQgQURWQSBUaW1lQ2FyZHMsIGluY2x1ZGluZyB0aGUgWDEgdmFyaWFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCB0aGVyZSdzIG5vIG1lbnRpb24gb2Ygc29mdHdhcmUgZW11bGF0aW9uIG9yIHZpcnR1YWwgZGV2aWNlcyBmb3IgYHB0cF9vY3BgIHdpdGhpbiBRRU1VIG9yIGFueXdoZXJlIGVsc2UuIFRoZSB0ZXh0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgUUVNVSAqZG9lc24ndCogZW11bGF0ZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkLiBUaGlzIGRyaXZlciBhcHBlYXJzIHRvIGJlIHNvbGVseSBmb3IgcmVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gVGhlIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBhZGRlZCBpbiB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCB0aGUgQURWQSBUaW1lQ2FyZCBYMSwgZGVhbGluZyB3aXRoIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMsIHZpYSBJMkMsIHN5c2ZzLCBhbmQgYGRldmxpbmtgLlxuXG5HaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHNheSB0aGF0IHBhdGNoZXMgYXJlICpub3QqIHdvcnRoIGZ1enppbmcgaWYgdGhleSBpbnZvbHZlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSB0aGF0ICpyZXF1aXJlcyogcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIHJlZCBmbGFnLiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyBkcml2ZXIgZml0cyB0aGF0IGRlc2NyaXB0aW9uIHBlcmZlY3RseS5cblxuSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9uIG9mIG1vY2sgZHJpdmVycyBvciBzb2Z0d2FyZSBlbXVsYXRpb24gd2l0aGluIHRoZSBgcHRwYCBkaXJlY3Rvcnkgb3IgZWxzZXdoZXJlLiBCdXQgcmlnaHQgbm93LCBiYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggcHJvYmFibHkgZmFsbHMgaW50byB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjYXRlZ29yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDU3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6Mzc6MDguOTc1MjI3NzQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA3MDU0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRQXzE1ODhfQ0xPQ0tfT0NQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWc9MTk5PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTVdcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMjEwLVxcbmRyaXZlcnMvcHRwL0tjb25maWc6MjExOmNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1BcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxMi1cXHR0cmlzdGF0ZSBcXFwiT3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXFxcIlxcbi0tXFxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX1ZNVylcXHQrPSBwdHBfdm13Lm9cXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfT0NQKVxcdCs9IHB0cF9vY3Aub1xcbmRyaXZlcnMvcHRwL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QVFBfREZMX1RPRClcXHRcXHQrPSBwdHBfZGZsX3RvZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM3OjEwLjU0NTkzNzAzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTE1Mjg5NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQVFAgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL3B0cC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjExLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IHNlY3Rpb24gd2hlcmUgSSBjYW4gcmV2aWV3IHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBtZSBmb3IgY29uZmlndXJpbmcgdGhlIFBUUCBkcml2ZXJzLiBUaGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UsIGEgZmVhdHVyZSBJJ20gaW50ZXJlc3RlZCBpbiBlbmFibGluZy9kaXNhYmxpbmcsIG9yIHBlcmhhcHMgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIFBUUCBpbXBsZW1lbnRhdGlvbiBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNjozNzoyMi4wNjEyMjk3MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFxuIDIxMTpcXHRjb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXFxuIDIxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlbkNvbXB1dGUgVGltZUNhcmQgYXMgUFRQIGNsb2NrXFxcIlxcbiAyMTM6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgUENJXFxuIDIxNTpcXHRcXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBNVERcXG4gMjE2OlxcdFxcdGRlcGVuZHMgb24gU0VSSUFMXzgyNTBcXG4gMjE3OlxcdFxcdGRlcGVuZHMgb24gIVMzOTBcXG4gMjE4OlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiAyMTk6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIDIyMDpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gMjIxOlxcdFxcdHNlbGVjdCBEUExMXFxuIDIyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuIDIyMzpcXHRcXHRzZWxlY3QgRldfVVBMT0FEXFxuIDIyNDpcXHRcXHRoZWxwXFxuIDIyNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYW4gT3BlbkNvbXB1dGUgdGltZSBjYXJkLlxcbiAyMjY6XFx0XFxuIDIyNzpcXHRcXHQgIFRoZSBPcGVuQ29tcHV0ZSB0aW1lIGNhcmQgaXMgYW4gYXRvbWljIGNsb2NrIGFsb25nIHdpdGhcXG4gMjI4OlxcdFxcdCAgYSBHUFMgcmVjZWl2ZXIgdGhhdCBwcm92aWRlcyBhIEdyYW5kbWFzdGVyIGNsb2NrIHNvdXJjZVxcbiAyMjk6XFx0XFx0ICBmb3IgYSBQVFAgZW5hYmxlZCBuZXR3b3JrLlxcbiAyMzA6XFx0XFxuIDIzMTpcXHRcXHQgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cudGltaW5nY2FyZC5jb20vXFxuIDIzMjpcXHRcXG4gMjMzOlxcdGNvbmZpZyBQVFBfREZMX1RPRFxcbiAyMzQ6XFx0XFx0dHJpc3RhdGUgXFxcIkZQR0EgREZMIFRvRCBEcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM3OjIyLjA2MTMwMzM2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzI3NzQ0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBwdHBfb2NwYCBEcml2ZXIncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGJhc2VkIG9uIHRoZSBhbmFseXNpcywgaXQncyBwcmV0dHkgY2xlYXI6IGBXb3J0aEZ1enppbmdgIGlzIGdvaW5nIHRvIGJlIGZhbHNlIGluIHRoaXMgY2FzZS4gVGhlIGBwdHBfb2NwYCBkcml2ZXIgaXMgZXhwbGljaXRseSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgT3BlbkNvbXB1dGUgVGltZUNhcmQgZGV2aWNlc+KAlHRoaW5rIEFEVkEgeDEsIE1ldGEgVGltZWNhcmQsIGFuZCB0aGUgbGlrZS4gVGhlc2UgYXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEl0J3Mgbm90IHRhcmdldGluZyBzb21lIGdlbmVyaWMgUENJIGRldmljZTsgaXQncyBzcGVjaWZpYyBoYXJkd2FyZS4gQW5kIGNydWNpYWxseSwgaXQncyAqbm90KiBzb21ldGhpbmcgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIGZlYXR1cmVzIGZvciBDUExEIGZpcm13YXJlIHVwbG9hZHMgYW5kIHN0YXR1cyByZXBvcnRpbmcgdGhyb3VnaCBzeXNmcywgYWxsIHRpZWQgdG8gdGhhdCBwYXJ0aWN1bGFyIGhhcmR3YXJlIChpZGVudGlmaWVkIGJ5IFBDSSBJRCAweGFkNWE6MHgwNDEwKS4gU28sIHRvIGV2ZW4gKmludGVyYWN0KiB3aXRoIHRoaXMgZHJpdmVyIHByb3Blcmx5LCB5b3UnZCBuZWVkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgcnVsZXMgb3V0IG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCByZXN1bHRzIGFyZSBzaW1wbGU6XG5cbiogICBgV29ydGhGdXp6aW5nYDogZmFsc2VcbiogICBgRm9jdXNTeW1ib2xzYDogXFxbIF1cbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdXG5cblRoZXJlIGlzIG5vIHJlYXNvbiB0byBwdXJzdWUgZnV6emluZyBoZXJlLiBJdCdzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTY3LCJPdXRwdXRUb2tlbnMiOjEwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE2OjM3OjI2Ljc4OTA1MDc5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFkZCBDUExEIGZpcm13YXJlIHVwbG9hZCBhbmQgc3RhdHVzIHJlcG9ydGluZyBzdXBwb3J0IHRvIHRoZSBPcGVuQ29tcHV0ZSBUaW1lQ2FyZCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYykgZm9yIEFEVkEgeDEgVEFQIGNhcmRzLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBpbiBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYWRkIENQTEQgZmlybXdhcmUgdXBsb2FkIGFuZCBzdGF0dXMgcmVwb3J0aW5nIHN1cHBvcnQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWVDYXJkIGRyaXZlciAoZHJpdmVycy9wdHAvcHRwX29jcC5jKSBmb3IgQURWQSB4MSBUQVAgY2FyZHMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTY6Mzc6MjYuNzg5MjYyMDgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5szj[1] Phase: Running StartedAt: 2026-09-02 16:37:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5szj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-02 16:37:37 +0000 UTC FinishedAt: 2026-09-02 16:37:49 +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,}