Name: series-workflowl7j6c Phase: Failed StartedAt: 2026-08-10 11:36:55 +0000 UTC FinishedAt: 2026-08-10 11:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7j6c[0] Phase: Succeeded StartedAt: 2026-08-10 11:36:55 +0000 UTC FinishedAt: 2026-08-10 11:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7j6c[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 11:36:55 +0000 UTC FinishedAt: 2026-08-10 11:53:36 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2M2NTYyNThmYzk3MDNlZGZmMjQwYmYwNzMyODY2YWUyZGFjNmQ5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDExOjUyOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYuLjQwNmU0YzQ5YmFjMWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICYjNDM7NTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLlxuIFxuIFlBTUwtYmFzZWQgSW50ZXJmYWNlXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0xMTEsMyAmIzQzOzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7e1wmIzM0O25vZGUtaWRcJiMzNDs6MCwgXCYjMzQ7ZXJyb3ItaWRcJiMzNDs6MX0mIzM5O1xuICAgICBOb25lXG4mIzQzO1xuJiM0MztFeGFtcGxlOiBTdWJzY3JpYmUgdG8gYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXBcbiYjNDM7XG4mIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4mIzQzO1xuJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGpzb25cbiYjNDM7XG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7ZXJyb3ItZXZlbnRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bXNnXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2RldmljZS1uYW1lXCYjMzQ7OiBcJiMzNDswMDAwOjAzOjAwLjBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtaWRcJiMzNDs6IDEsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtbmFtZVwmIzM0OzogXCYjMzQ7dW5jb3JyZWN0YWJsZS1lcnJvcnNcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OiAxLFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtlcnJvci1uYW1lXCYjMzQ7OiBcJiMzNDtlcnJvcl9uYW1lMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZXJyb3ItdmFsdWVcJiMzNDs6IDFcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICB9XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbmluZGV4IGUxMTMwNTZmOGMwMTYuLjhhZWQzZDQ1MTVlNWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5AQCAtNjksNiAmIzQzOzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBlcnJvci1ldmVudC1hdHRyc1xuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGRldmljZS1uYW1lXG4mIzQzOyAgICAgICAgdHlwZTogc3RyaW5nXG4mIzQzOyAgICAgICAgZG9jOiBEZXZpY2UgKFBDSSBCREYsIFVVSUQpIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbm9kZS1pZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGRvYzogSUQgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBub2RlLW5hbWVcbiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmdcbiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1pZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGRvYzogSUQgb2YgdGhlIGVycm9yIGNvdW50ZXIuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1uYW1lXG4mIzQzOyAgICAgICAgdHlwZTogc3RyaW5nXG4mIzQzOyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLXZhbHVlXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuIFxuIG9wZXJhdGlvbnM6XG4gICBsaXN0OlxuQEAgLTEyNCwzICYjNDM7MTUxLDI0IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWQtYXR0cnNcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZXJyb3ItZXZlbnRcbiYjNDM7ICAgICAgZG9jOiBcdTAwM2UtXG4mIzQzOyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cbiYjNDM7ICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cbiYjNDM7ICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xuJiM0MzsgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XG4mIzQzOyAgICAgIGV2ZW50OlxuJiM0MzsgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAtIGRldmljZS1uYW1lXG4mIzQzOyAgICAgICAgICAtIG5vZGUtaWRcbiYjNDM7ICAgICAgICAgIC0gbm9kZS1uYW1lXG4mIzQzOyAgICAgICAgICAtIGVycm9yLWlkXG4mIzQzOyAgICAgICAgICAtIGVycm9yLW5hbWVcbiYjNDM7ICAgICAgICAgIC0gZXJyb3ItdmFsdWVcbiYjNDM7XG4mIzQzO21jYXN0LWdyb3VwczpcbiYjNDM7ICBsaXN0OlxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBlcnJvci1yZXBvcnRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuaW5kZXggZDZlYWIyOWExMzk0Yy4uMzkxNTVmYjUxNGRlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbkBAIC00MSw2ICYjNDM7NDEsMTEgQEBcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXG4gICpcbiYjNDM7ICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcbiYjNDM7ICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbiYjNDM7ICpcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcbiAgKlxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXG5AQCAtMTg2LDYgJiM0MzsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cdTAwM2VkZXZpY2VfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXHUwMDNlaWQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXHUwMDNlbm9kZV9uYW1lKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMjIsNiAmIzQzOzI1NSw3NCBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuJiM0MzsgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcbiYjNDM7ICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXG4mIzQzOyAqIEB2YWx1ZTogVmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0IG9ubHkuIFVzZXMgJUdGUF9LRVJORUwgYW5kIG11bHRpY2FzdHMgdG8gYWxsXG4mIzQzOyAqICAgICAgICAgIG5ldG5zLCB3aGljaCBpcyB1bmJvdW5kZWQgd29yazsgY2FsbGVycyBpbiBpbnRlcnJ1cHQgaGFuZGxlcnNcbiYjNDM7ICogICAgICAgICAgb3Igb3RoZXIgYXRvbWljIGNvbnRleHQgbXVzdCBkZWZlciBldmVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5sX2luZm8gaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmhkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUgfHwgIWVycm9yX25hbWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGhlIG5vZGUgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi9cbiYjNDM7XHRpZiAoeGFfbG9hZChcdTAwMjZkcm1fcmFzX3hhLCBub2RlLVx1MDAzZWlkKSAhPSBub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdC8qIEN1cnJlbnRseSBvbmx5IEVycm9yIENvdW50ZXIgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgKi9cbiYjNDM7XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IERSTV9SQVNfTk9ERV9UWVBFX0VSUk9SX0NPVU5URVIpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHRoZSBlcnJvciBJRCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICovXG4mIzQzO1x0aWYgKGVycm9yX2lkIFx1MDAzYyBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHxcbiYjNDM7XHQgICAgZXJyb3JfaWQgXHUwMDNlIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGdlbmxfaW5mb19pbml0X250ZihcdTAwMjZpbmZvLCBcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgRFJNX1JBU19DTURfRVJST1JfRVZFTlQpO1xuJiM0MztcbiYjNDM7XHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtc2cpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aGRyID0gZ2VubG1zZ19pcHV0KG1zZywgXHUwMDI2aW5mbyk7XG4mIzQzO1x0aWYgKCFoZHIpIHtcbiYjNDM7XHRcdHJldCA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9tc2c7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjYW5jZWxfbXNnO1xuJiM0MztcbiYjNDM7XHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4mIzQzO1x0Z2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NhbmNlbF9tc2c6XG4mIzQzO1x0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuJiM0MztmcmVlX21zZzpcbiYjNDM7XHRubG1zZ19mcmVlKG1zZyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xuJiM0MztcbiAvKipcbiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnNcbiAgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcbmluZGV4IGRlYTFjMWIyNDk0ZTguLjlkMzEyM2NjOWY5Y2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiAmIzQzOzU4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0ge1xuJiM0MztcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwmIzM0O2Vycm9yLXJlcG9ydFwmIzM0OywgfSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5uYW1lXHRcdD0gRFJNX1JBU19GQU1JTFlfTkFNRSxcbiBcdC52ZXJzaW9uXHQ9IERSTV9SQVNfRkFNSUxZX1ZFUlNJT04sXG5AQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5tb2R1bGVcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5zcGxpdF9vcHNcdD0gZHJtX3Jhc19ubF9vcHMsXG4gXHQubl9zcGxpdF9vcHNcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX29wcyksXG4mIzQzO1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuJiM0MztcdC5uX21jZ3Jwc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfbWNncnBzKSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5pbmRleCBhMzk4NjQzNTcyYTVhLi4wM2VjMjc1YWNhOTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljLi5iZjFiOTIxZjQxODNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuQEAgLTE4NSw2ICYjNDM7MTg1LDM3IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfbm9kZXMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm0tcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxuJiM0MzsgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbiYjNDM7ICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbiYjNDM7ICogQHZhbHVlOiB2YWx1ZSBvZiBlcnJvciBjb3VudGVyXG4mIzQzOyAqXG4mIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvID0gcmFzLVx1MDAzZWluZm9bc2V2ZXJpdHldO1xuJiM0MztcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRXZlbnQgaXMgc3VwcG9ydGVkIG9ubHkgaWYgZHJtLXJhcyBpcyBlbmFibGVkICovXG4mIzQzO1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19kcm1fcmFzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwmIzM0O2RybS1yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcXG5cJiMzNDssIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeGVfZHJtX3Jhc19pbml0KCkgLSBJbml0aWFsaXplIERSTSBSQVNcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5pbmRleCAzNjVjNzBlOTNlODJmLi43MjMyMjliMmNmZmI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuQEAgLTUsMTEgJiM0Mzs1LDE0IEBAXG4gI2lmbmRlZiBfWEVfRFJNX1JBU19IX1xuICNkZWZpbmUgX1hFX0RSTV9SQVNfSF9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xuIFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcdFxcXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpJiM0MzsmIzQzOylcbiBcbiBpbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5pbmRleCAzNTJmMDU2ZmQ5ZWY0Li40ODUzMjQ0N2UxZDhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbkBAIC05MCw2ICYjNDM7OTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7XG4gfTtcbiBzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoZ3B1X2hlYWx0aF9zdGF0ZXMpID09IFhFX1JBU19IRUFMVEhfTUFYKTtcbiBcbiYjNDM7c3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSk7XG4mIzQzO1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIHtcbiBcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbkBAIC0xMDIsNiAmIzQzOzEwNCwxOCBAQCBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzZXZlcml0eSkge1xuJiM0MztcdGNhc2UgWEVfUkFTX1NFVl9DT1JSRUNUQUJMRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfU0VWX1VOQ09SUkVDVEFCTEU6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX1VOQ09SUkVDVEFCTEU7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxuIHtcbiBcdHN3aXRjaCAoY29tcG9uZW50KSB7XG5AQCAtMTIwLDYgJiM0MzsxMzQsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0RFVklDRV9NRU1PUlk7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9QQ0lFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfUENJRTtcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX0ZBQlJJQzpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0ZBQlJJQztcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cykge1xuQEAgLTIzNiw2ICYjNDM7MjY4LDI2IEBAIHN0YXRpYyB2b2lkIHJhc191c3BfYWVyX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRkZXZfZGJnKFx1MDAyNnVzcC1cdTAwM2VkZXYsIFwmIzM0O1VuY29ycmVjdGFibGUgSW50ZXJuYWwgRXJyb3JzIGRvd25ncmFkZWQgYW5kIHVubWFza2VkXFxuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyID0gezB9O1xuJiM0MztcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcbiYjNDM7XHR1MzIgdmFsdWU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y291bnRlci5jb21tb24uc2V2ZXJpdHkgPSBzZXZlcml0eTtcbiYjNDM7XHRjb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdldF9jb3VudGVyKHhlLCBcdTAwMjZjb3VudGVyLCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XG4mIzQzO1x0ZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XG4mIzQzO1xuJiM0MztcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpXG4ge1xuIFx0c3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItXHUwMDNlZGV0YWlscztcbkBAIC0zMzAsOCAmIzQzOzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXHUwMDI2cmVzcG9uc2UtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctXHUwMDNlY291bnRlcnM7XG4gXHR1MzIgaWQsIG5jb3VudGVycyA9IHBlbmRpbmctXHUwMDNlbmNvdW50ZXJzO1xuJiM0MztcdHU4IHNlbnQgPSAwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cdTAwM2VkYXRhKSBcdTAwM2Mgc2l6ZW9mKCpwZW5kaW5nKSk7XG4mIzQzO1x0QlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgXHUwMDNjIFhFX1JBU19DT01QX01BWCk7XG4gXHR4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3MoeGUpO1xuIFxuIFx0aWYgKCFuY291bnRlcnMgfHwgbmNvdW50ZXJzIFx1MDAzZSBYRV9SQVNfTlVNX0NPVU5URVJTKVxuQEAgLTM1MCw2ICYjNDM7NDA0LDEzIEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXG4gXHRcdHhlX3dhcm4oeGUsIFwmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwmIzM0OyxcbiBcdFx0XHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cbiYjNDM7XHRcdGlmIChzZW50IFx1MDAyNiBCSVQoY29tcG9uZW50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuJiM0MztcbiYjNDM7XHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbiBcdH1cbiB9XG4gXG5AQCAtNDA2LDEyICYjNDM7NDY3LDE0IEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24gZmluYWxfYWN0aW9uO1xuIFx0dTMyIHJlbWFpbmluZyA9IFhFX1NZU0NUUkxfRkxPT0RfTElNSVQ7XG4gXHRzdHJ1Y3QgeGVfcmFzX2dldF9zb2NfZXJyb3IgcmVzcG9uc2U7XG4mIzQzO1x0dTggc2VudCA9IDA7XG4gXHRzaXplX3QgcmxlbjtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX3N5c2N0cmwpXG4gXHRcdHJldHVybiBYRV9SQVNfUkVDT1ZFUllfQUNUSU9OX1JFU0VUO1xuIFxuJiM0MztcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0LyogRGVmYXVsdCBhY3Rpb24gKi9cbiBcdGZpbmFsX2FjdGlvbiA9IFhFX1JBU19SRUNPVkVSWV9BQ1RJT05fUkVDT1ZFUkVEO1xuIFxuQEAgLTQ1Miw2ICYjNDM7NTE1LDEyIEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRcdFx0eGVfaW5mbyh4ZSwgXCYjMzQ7W1JBU106ICVzICVzIGRldGVjdGVkXFxuXCYjMzQ7LCBjb21wX3RvX3N0cihjb21wb25lbnQpLFxuIFx0XHRcdFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xuIFxuJiM0MztcdFx0XHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xuJiM0MztcdFx0XHRpZiAoIShzZW50IFx1MDAyNiBCSVQoY29tcG9uZW50KSkpIHtcbiYjNDM7XHRcdFx0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuJiM0MztcdFx0XHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuIFx0XHRcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuIFx0XHRcdFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTQuLmVlMmNhYTBlZGM2ZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuQEAgLTgwLDkgJiM0Mzs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4mIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbHVlKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyLi5lYWI4MjMxYWE4N2NiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzgsMTMgJiM0MzszOCwyOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsXG4mIzQzO1xuJiM0MztcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXG4gXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcbiBcdERSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsXG4mIzQzO1x0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXG4gXG4gXHRfX0RSTV9SQVNfQ01EX01BWCxcbiBcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVFx0XCYjMzQ7ZXJyb3ItcmVwb3J0XCYjMzQ7XG4mIzQzO1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2M2NTYyNThmYzk3MDNlZGZmMjQwYmYwNzMyODY2YWUyZGFjNmQ5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDExOjUyOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAppbmRleCA4M2MyMTg1M2I3NGI2Li40MDZlNGM0OWJhYzFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdApAQCAtNTYsNiAmIzQzOzU2LDcgQEAgVXNlciBzcGFjZSB0b29scyBjYW46CiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy4KICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aAogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLgogCiBZQU1MLWJhc2VkIEludGVyZmFjZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMSwzICYjNDM7MTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZQogCiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxfSYjMzk7CiAgICAgTm9uZQomIzQzOwomIzQzO0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cAomIzQzOwomIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoCiYjNDM7CiYjNDM7ICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnQKJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjoganNvbgomIzQzOwomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtlcnJvci1ldmVudCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttc2cmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7ZGV2aWNlLW5hbWUmIzM0OzogJiMzNDswMDAwOjAzOjAwLjAmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtaWQmIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtbmFtZSYjMzQ7OiAmIzM0O3VuY29ycmVjdGFibGUtZXJyb3JzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci1pZCYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItbmFtZSYjMzQ7OiAmIzM0O2Vycm9yX25hbWUxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci12YWx1ZSYjMzQ7OiAxCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCmluZGV4IGUxMTMwNTZmOGMwMTYuLjhhZWQzZDQ1MTVlNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbApAQCAtNjksNiAmIzQzOzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICBuYW1lOiBlcnJvci12YWx1ZQogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci4KJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnMKJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbm9kZS1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaWQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWUKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLgogCiBvcGVyYXRpb25zOgogICBsaXN0OgpAQCAtMTI0LDMgJiM0MzsxNTEsMjQgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZXJyb3ItZXZlbnQKJiM0MzsgICAgICBkb2M6ICZndDstCiYjNDM7ICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLgomIzQzOyAgICAgICAgICAgVGhlIGV2ZW50IGluY2x1ZGVzIHRoZSBkZXZpY2UsIG5vZGUgYW5kIGVycm9yIGluZm9ybWF0aW9uCiYjNDM7ICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzCiYjNDM7ICAgICAgbWNncnA6IGVycm9yLXJlcG9ydAomIzQzOyAgICAgIGV2ZW50OgomIzQzOyAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgLSBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgICAtIG5vZGUtaWQKJiM0MzsgICAgICAgICAgLSBub2RlLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci1pZAomIzQzOyAgICAgICAgICAtIGVycm9yLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci12YWx1ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBlcnJvci1yZXBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCmluZGV4IGQ2ZWFiMjlhMTM5NGMuLjM5MTU1ZmI1MTRkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYwpAQCAtNDEsNiAmIzQzOzQxLDExIEBACiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELgogICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC4KICAqCiYjNDM7ICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHMKJiM0MzsgKgomIzQzOyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlCiYjNDM7ICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC4KJiM0MzsgKgogICogTm9kZSByZWdpc3RyYXRpb246CiAgKgogICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnMKQEAgLTE4Niw2ICYjNDM7MTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCwKIAkJCSAgIHZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLAomIzQzOwkJCQkgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtJmd0O2RldmljZV9uYW1lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtJmd0O2lkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwgbm9kZS0mZ3Q7bm9kZV9uYW1lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwKIAkJCSAgICB1MzIgZXJyb3JfaWQpCiB7CkBAIC0yMjIsNiAmIzQzOzI1NSw3NCBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsCiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudAomIzQzOyAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZQomIzQzOyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yCiYjNDM7ICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yCiYjNDM7ICogQHZhbHVlOiBWYWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlcgomIzQzOyAqCiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5LiBVc2VzICVHRlBfS0VSTkVMIGFuZCBtdWx0aWNhc3RzIHRvIGFsbAomIzQzOyAqICAgICAgICAgIG5ldG5zLCB3aGljaCBpcyB1bmJvdW5kZWQgd29yazsgY2FsbGVycyBpbiBpbnRlcnJ1cHQgaGFuZGxlcnMKJiM0MzsgKiAgICAgICAgICBvciBvdGhlciBhdG9taWMgY29udGV4dCBtdXN0IGRlZmVyIGV2ZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLAomIzQzOwkJCSAgIHUzMiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5sX2luZm8gaW5mbzsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKm1zZzsKJiM0MzsJc3RydWN0IG5sYXR0ciAqaGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW5vZGUgfHwgIWVycm9yX25hbWUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgdGhlIG5vZGUgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi8KJiM0MzsJaWYgKHhhX2xvYWQoJmFtcDtkcm1fcmFzX3hhLCBub2RlLSZndDtpZCkgIT0gbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwkvKiBDdXJyZW50bHkgb25seSBFcnJvciBDb3VudGVyIGV2ZW50cyBhcmUgc3VwcG9ydGVkICovCiYjNDM7CWlmIChub2RlLSZndDt0eXBlICE9IERSTV9SQVNfTk9ERV9UWVBFX0VSUk9SX0NPVU5URVIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRoZSBlcnJvciBJRCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICovCiYjNDM7CWlmIChlcnJvcl9pZCAmbHQ7IG5vZGUtJmd0O2Vycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwKJiM0MzsJICAgIGVycm9yX2lkICZndDsgbm9kZS0mZ3Q7ZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWdlbmxfaW5mb19pbml0X250ZigmYW1wO2luZm8sICZhbXA7ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTsKJiM0MzsKJiM0MzsJbXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW1zZykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwloZHIgPSBnZW5sbXNnX2lwdXQobXNnLCAmYW1wO2luZm8pOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBmcmVlX21zZzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2FuY2VsX21zZzsKJiM0MzsKJiM0MzsJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwomIzQzOwlnZW5sbXNnX211bHRpY2FzdF9hbGxucygmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2FuY2VsX21zZzoKJiM0MzsJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwomIzQzO2ZyZWVfbXNnOgomIzQzOwlubG1zZ19mcmVlKG1zZyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7CiYjNDM7CiAvKioKICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVycwogICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMKaW5kZXggZGVhMWMxYjI0OTRlOC4uOWQzMTIzY2M5ZjljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCkBAIC01OCw2ICYjNDM7NTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCX0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0gewomIzQzOwlbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyAmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7LCB9LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCS5uYW1lCQk9IERSTV9SQVNfRkFNSUxZX05BTUUsCiAJLnZlcnNpb24JPSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLApAQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5zcGxpdF9vcHMJPSBkcm1fcmFzX25sX29wcywKIAkubl9zcGxpdF9vcHMJPSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSwKJiM0MzsJLm1jZ3JwcwkJPSBkcm1fcmFzX25sX21jZ3JwcywKJiM0MzsJLm5fbWNncnBzCT0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKaW5kZXggYTM5ODY0MzU3MmE1YS4uMDNlYzI3NWFjYTkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCkBAIC0yMSw2ICYjNDM7MjEsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsCiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAKJiM0MztlbnVtIHsKJiM0MzsJRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsCiYjNDM7fTsKJiM0MzsKIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7CiAKICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKaW5kZXggNzkzN2Q4YmEwZWQ5Yy4uYmYxYjkyMWY0MTgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jCkBAIC0xODUsNiAmIzQzOzE4NSwzNyBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtLXJhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UKJiM0MzsgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSAmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpCiYjNDM7ICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlICZhbXA7ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KQomIzQzOyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlcgomIzQzOyAqCiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tzZXZlcml0eV07CiYjNDM7CXN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybS1yYXMgaXMgZW5hYmxlZCAqLwomIzQzOwlpZiAoIXhlLSZndDtpbmZvLmhhc19kcm1fcmFzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlub2RlID0gJmFtcDtyYXMtJmd0O25vZGVbc2V2ZXJpdHldOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRybV9lcnJfcmF0ZWxpbWl0ZWQoJmFtcDt4ZS0mZ3Q7ZHJtLCAmIzM0O2RybS1yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcbiYjMzQ7LCByZXQsCiYjNDM7CQkJCSAgICBpbmZvW2NvbXBvbmVudF0ubmFtZSwgZXJyb3Jfc2V2ZXJpdHlbc2V2ZXJpdHldKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTCiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmgKaW5kZXggMzY1YzcwZTkzZTgyZi4uNzIzMjI5YjJjZmZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCkBAIC01LDExICYjNDM7NSwxNCBAQAogI2lmbmRlZiBfWEVfRFJNX1JBU19IXwogI2RlZmluZSBfWEVfRFJNX1JBU19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiBzdHJ1Y3QgeGVfZGV2aWNlOwogCiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpCVwKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspCiAKIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYwppbmRleCAzNTJmMDU2ZmQ5ZWY0Li40ODUzMjQ0N2UxZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC05MCw2ICYjNDM7OTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7CiB9Owogc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7CiAKJiM0MztzdGF0aWMgaW50IGdldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyLCB1MzIgKnZhbHVlKTsKJiM0MzsKIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogewogCXN3aXRjaCAoc2V2ZXJpdHkpIHsKQEAgLTEwMiw2ICYjNDM7MTA0LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogCX0KIH0KIAomIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQomIzQzO3sKJiM0MzsJc3dpdGNoIChzZXZlcml0eSkgewomIzQzOwljYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFOwomIzQzOwljYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfVU5DT1JSRUNUQUJMRTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIHsKIAlzd2l0Y2ggKGNvbXBvbmVudCkgewpAQCAtMTIwLDYgJiM0MzsxMzQsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KQomIzQzO3sKJiM0MzsJc3dpdGNoIChjb21wb25lbnQpIHsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfUENJRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDOwomIzQzOwljYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcmFzX3N0YXR1c190b19lcnJubyh1MzIgc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0yMzYsNiAmIzQzOzI2OCwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKQogCWRldl9kYmcoJmFtcDt1c3AtJmd0O2RldiwgJiMzNDtVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxuJiMzNDspOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXIgPSB7MH07CiYjNDM7CXU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDsKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyLmNvbW1vbi5zZXZlcml0eSA9IHNldmVyaXR5OwomIzQzOwljb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF9jb3VudGVyKHhlLCAmYW1wO2NvdW50ZXIsICZhbXA7dmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTsKJiM0MzsJZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7CiYjNDM7CiYjNDM7CXhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpCiB7CiAJc3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItJmd0O2RldGFpbHM7CkBAIC0zMzAsOCAmIzQzOzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCXN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKSZhbXA7cmVzcG9uc2UtJmd0O2RhdGE7CiAJc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqZXJyb3JzID0gcGVuZGluZy0mZ3Q7Y291bnRlcnM7CiAJdTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLSZndDtuY291bnRlcnM7CiYjNDM7CXU4IHNlbnQgPSAwOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS0mZ3Q7ZGF0YSkgJmx0OyBzaXplb2YoKnBlbmRpbmcpKTsKJiM0MzsJQlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgJmx0OyBYRV9SQVNfQ09NUF9NQVgpOwogCXhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7CiAKIAlpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgJmd0OyBYRV9SQVNfTlVNX0NPVU5URVJTKQpAQCAtMzUwLDYgJiM0Mzs0MDQsMTMgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKIAogCQl4ZV93YXJuKHhlLCAmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxuJiMzNDssCiAJCQljb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiYjNDM7CiYjNDM7CQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJaWYgKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzZW50IHw9IEJJVChjb21wb25lbnQpOwomIzQzOwomIzQzOwkJcmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpOwogCX0KIH0KIApAQCAtNDA2LDEyICYjNDM7NDY3LDE0IEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpCiAJZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIGZpbmFsX2FjdGlvbjsKIAl1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDsKIAlzdHJ1Y3QgeGVfcmFzX2dldF9zb2NfZXJyb3IgcmVzcG9uc2U7CiYjNDM7CXU4IHNlbnQgPSAwOwogCXNpemVfdCBybGVuOwogCWludCByZXQ7CiAKIAlpZiAoIXhlLSZndDtpbmZvLmhhc19zeXNjdHJsKQogCQlyZXR1cm4gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRVNFVDsKIAomIzQzOwlCVUlMRF9CVUdfT04oQklUU19QRVJfVFlQRShzZW50KSAmbHQ7IFhFX1JBU19DT01QX01BWCk7CiAJLyogRGVmYXVsdCBhY3Rpb24gKi8KIAlmaW5hbF9hY3Rpb24gPSBYRV9SQVNfUkVDT1ZFUllfQUNUSU9OX1JFQ09WRVJFRDsKIApAQCAtNDUyLDYgJiM0Mzs1MTUsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAkJCXhlX2luZm8oeGUsICYjMzQ7W1JBU106ICVzICVzIGRldGVjdGVkXG4mIzM0OywgY29tcF90b19zdHIoY29tcG9uZW50KSwKIAkJCQlzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiAKJiM0MzsJCQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJCWlmICghKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpKSB7CiYjNDM7CQkJCXNlbnQgfD0gQklUKGNvbXBvbmVudCk7CiYjNDM7CQkJCXJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlzd2l0Y2ggKGNvbXBvbmVudCkgewogCQkJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiAJCQkJYWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaAppbmRleCAwYmVlZGUzZGRjNGU0Li5lZTJjYWEwZWRjNmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCkBAIC04MCw5ICYjNDM7ODAsMTQgQEAgc3RydWN0IGRybV9kZXZpY2U7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUykKIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7CiB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpOwomIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwKJiM0MzsJCQkgICB1MzIgdmFsdWUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKQomIzQzO3sgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKaW5kZXggMjE4YTNlZTg2ODA1Mi4uZWFiODIzMWFhODdjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKQEAgLTM4LDEzICYjNDM7MzgsMjggQEAgZW51bSB7CiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSkKIH07CiAKJiM0MztlbnVtIHsKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwKJiM0MzsKJiM0MzsJX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCURSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLAogCURSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLAogCURSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsCiYjNDM7CURSTV9SQVNfQ01EX0VSUk9SX0VWRU5ULAogCiAJX19EUk1fUkFTX0NNRF9NQVgsCiAJRFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSkKIH07CiAKJiM0MzsjZGVmaW5lIERSTV9SQVNfTUNHUlBfRVJST1JfUkVQT1JUCSYjMzQ7ZXJyb3ItcmVwb3J0JiMzNDsKJiM0MzsKICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERSTSBSQVMgTmV0bGluayBFdmVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gaW50cm9kdWNlIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgc3BlY2lmaWNhbGx5IGZvciBEUk0gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5LCBTZXJ2aWNlYWJpbGl0eSkuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHF1aXRlIGEgZmV3IGZpbGVzOiBkb2N1bWVudGF0aW9uLCB0aGUgY29yZSBEUk0gUkFTIGNvZGUsIGFuZCwgbm90YWJseSwgd2l0aGluIHRoZSBJbnRlbCBYZSBncmFwaGljcyBkcml2ZXIgKGB4ZWApLiBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBhcHBlYXJzIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpYCB3aGljaCBzZW5kcyB0aGUgTmV0bGluayBtdWx0aWNhc3QgbWVzc2FnZS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgYHhlX2RybV9yYXNfZXZlbnQoKWAgd2hpY2ggY2FsbHMgYHJhc19zZW5kX2Vycm9yX2V2ZW50KClgIGluIGB4ZV9yYXMuY2AuCgpBIGtleSBxdWVzdGlvbiBwb3BzIHVwIGltbWVkaWF0ZWx5IOKAkyBpcyB0aGUgSW50ZWwgWGUgZHJpdmVyIGEgdmVuZG9yLXNwZWNpZmljIEdQVSBkcml2ZXI/IFllcywgaXQgaXMsIGdpdmVuIGl0cyBsb2NhdGlvbiBpbiBgZHJpdmVycy9ncHUvZHJtL3hlYC4gQW5kLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhLi4uIEFoLCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSwgd2hpY2ggaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyBmb3IgRnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSAqZW50aXJlKiBwYXRjaCBtaWdodCBmYWxsIGludG8gdGhpcyBjYXRlZ29yeSBiZWNhdXNlIHRoZSBYZSBkcml2ZXIgaXMgaW52b2tpbmcgdGhlIE5ldGxpbmsgZXZlbnQuIEhvd2V2ZXIsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBhbGwgcGFydHMgYXJlIGNvbnNpZGVyZWQuIExldCYjMzk7cyBzZWUuLi4gSXMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGNhbGxhYmxlIGZyb20gb3RoZXIgbG9jYXRpb25zPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLgoKT2theSwgY2hlY2tpbmcgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0woKWAuIFNvLCBvdGhlciBtb2R1bGVzICpjb3VsZCogY2FsbCBpdCwgd2hpY2ggaXMgdGhlIGNvbmNlcm4uIEhvd2V2ZXIsIGN1cnJlbnRseSBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIHRoZSBgeGVfZHJtX3Jhc19ldmVudGAgZnVuY3Rpb24gd2l0aGluIHRoZSBYZSBkcml2ZXIuIE5vdywgdGhlIG1haW4gcXVlc3Rpb24gaXM6IGNhbiB1c2Vyc3BhY2UgZGlyZWN0bHkgdHJpZ2dlciB0aGlzIGV2ZW50PyBMb29raW5nIGF0IHRoZSBOZXRsaW5rIHNwZWMsIHRoZSBgZXJyb3ItZXZlbnRgIGlzIGRlZmluZWQgYXMgYW4gZXZlbnQsIG5vdCBhIGNvbW1hbmQuIFRoZXJlIGFyZSBgZXZlbnQ6YCBlbnRyaWVzLCBidXQgbm8gYGRvOmAgb3IgYGR1bXA6YCBlbnRyaWVzLgoKVGhpcyBtZWFucyBpdCBpcyBhIGtlcm5lbC10by11c2Vyc3BhY2Ugbm90aWZpY2F0aW9uLiBVc2Vyc3BhY2Ugd291bGQgKnN1YnNjcmliZSogdG8gdGhlIG11bHRpY2FzdCBncm91cCBhbmQgcmVjZWl2ZSB0aGUgZXZlbnQsIGJ1dCBpdCBjYW4mIzM5O3QgZGlyZWN0bHkgKmNhdXNlKiB0aGUgZXZlbnQuIEl0IGNhbiAqb25seSogYmUgdHJpZ2dlcmVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSBpZiB0aGlzIGNhbiBiZSBleHBsb2l0ZWQuIAoKU28sIHVzZXJzcGFjZSBjYW4gKnJlY2VpdmUqIHRoZSBldmVudCwgYnV0IGl0IGNhbm5vdCBzZW5kIGl0LiBUaGUgb25seSBkaXJlY3QgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiBpcyBpbmRlZWQgYHhlX2RybV9yYXNfZXZlbnRgLiBPaywgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4sIGxldCYjMzk7cyB2ZXJpZnkgdGhlcmUgYXJlICpubyogb3RoZXIgY2FsbGVycyBvZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBtZWFucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fcmFzX25sX2Vycm9yX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM9MjIyPXN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI1OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6MjU5OiAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNjAtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzItICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI3MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI3NC1cdFx0XHQgICB1MzIgdmFsdWUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0zMjMtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzozMjQ6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzI1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM9MTk3PXZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxMzpcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTQtXHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Mj12b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjgzOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC04NC1cdFx0XHQgICB1MzIgdmFsdWUpO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODktXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uOiBYZSBEcml2ZXIgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGB4ZV9kcm1fcmFzX2V2ZW50YCwgYW5kIEkmIzM5O3ZlIHRyYWNlZCBpdCBkb3duIOKAkyBpdCYjMzk7cyB0aGUgKm9ubHkqIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uLiBOb3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYHhlYCBkcml2ZXIgaXMgSW50ZWwmIzM5O3MgWGUgR1BVIGRyaXZlciwgYW5kIGEgdmVuZG9yLXNwZWNpZmljIG9uZSBhdCB0aGF0LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBmbGFncyB0aGVzZSBkcml2ZXJzIGFzIHByb2JsZW1hdGljIGZvciBmdXp6aW5nOiB0aGV5IG5lZWQgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkgYW5kIGFyZSBub3QgZ29pbmcgdG8gcnVuIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgYSBjb21tb24gaXNzdWUgd2l0aCB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzLgoKU2luY2UgYHhlX2RybV9yYXNfZXZlbnRgIGlzICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLCBhbmQgdGhlIGB4ZWAgZHJpdmVyIG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCYjMzk7cyBjbGVhcjogdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgbmV3IGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSBzdGFuZGFyZCwgdmlydHVhbGl6ZWQgUUVNVSBzZXR1cC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgbXkgYXNzdW1wdGlvbnMsIHRoZXJlJiMzOTtzIG5vIG90aGVyIHBhdGggdG8gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGUgYHhlYCBkcml2ZXIgcmVpbmZvcmNlcyBteSBjb25jbHVzaW9uLiBUaGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGVfZHJtX3Jhc19ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jPTE1Nz1zdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxODk6ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybS1yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5MC0gKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5Ni0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTk3OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5OC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaD0xNT1pbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmg6MTY6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oLTE3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0yNzE9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTI4Ny1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyODg6XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0yODktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDk2CgkJCQkJCQlvdXRwdXQ6IDkzCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFRoaXMgQ29kZSBpcyBVbnN1aXRhYmxlIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFllcCwgdGhlIGNyaXRpY2FsIGNvZGUgY2hhbmdlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiBgeGVfcmFzLmNgLiBHaXZlbiB0aGF0IHRoaXMgc3BlY2lmaWNhbGx5IHRhcmdldHMgYSB2ZW5kb3Itc3BlY2lmaWMgR1BVIGRyaXZlciDigJMgaW4gdGhpcyBjYXNlLCBJbnRlbCYjMzk7cyBYZSDigJMgaXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgZXhjbHVzaW9uIGNyaXRlcmlhLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGw6IGlzIHRoaXMgc29tZXRoaW5nIEkgY2FuIGVmZmVjdGl2ZWx5IGZ1eno/CgpNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IHJlbGF0ZWQgdG8gRFJNIFJBUywgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUga2lja2VyIGlzIHRoYXQgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyAqb25seSogYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgeGVgIGRyaXZlci4gTm93LCBJIGtub3cgdGhlIGxpbWl0YXRpb25zIG9mIG15IGN1cnJlbnQgc2V0dXAuIFRoZSB4ZSBkcml2ZXIgcmVxdWlyZXMgYWN0dWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBzb21ldGhpbmcgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgSSBjYW4mIzM5O3QgZWZmZWN0aXZlbHkgcmVhY2ggYW5kIGV4ZXJjaXNlIHRoaXMgbmV3IGNvZGUuIENvbnNlcXVlbnRseSwgSSB3aWxsIGNvbmZpZGVudGx5IHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0JiMzOTtzIHNpbXBseSBub3QgZmVhc2libGUgdG8gdGVzdCB0aGlzIGNvZGUgdGhvcm91Z2hseSB3aXRoIG15IGN1cnJlbnQgcmVzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgZm9yIERSTSBSQVMgYW5kIGltcGxlbWVudHMgaXQgaW4gdGhlIEludGVsIFhlIEdQVSBkcml2ZXIuIFRoZSBuZXcgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGB4ZWAgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUyOjU3Ljg5NzY1NDAzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTU1MDk1ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMTo1Mjo1Ny44OTc2NTk4NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDg5OTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNjNjU2MjU4ZmM5NzAzZWRmZjI0MGJmMDczMjg2NmFlMmRhYzZkOThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTE6NTI6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxcbmluZGV4IDgzYzIxODUzYjc0YjYuLjQwNmU0YzQ5YmFjMWYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4gKiBDbGVhciBzcGVjaWZpYyBlcnJvciBjb3VudGVycyB3aXRoIHRoZSBgYGNsZWFyLWVycm9yLWNvdW50ZXJgYCBjb21tYW5kLCB1c2luZyBib3RoXFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxcbisqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXFxuIFxcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0xMTEsMyArMTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxcbiBcXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjF9J1xcbiAgICAgTm9uZVxcbitcXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogYmFzaFxcbitcXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnRcXG4rXFxuKy4uIGNvZGUtYmxvY2s6OiBqc29uXFxuK1xcbisgICAge1xcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcImVycm9yLWV2ZW50XFxcIixcXG4rICAgICAgICBcXFwibXNnXFxcIjoge1xcbisgICAgICAgICAgICBcXFwiZGV2aWNlLW5hbWVcXFwiOiBcXFwiMDAwMDowMzowMC4wXFxcIixcXG4rICAgICAgICAgICAgXFxcIm5vZGUtaWRcXFwiOiAxLFxcbisgICAgICAgICAgICBcXFwibm9kZS1uYW1lXFxcIjogXFxcInVuY29ycmVjdGFibGUtZXJyb3JzXFxcIixcXG4rICAgICAgICAgICAgXFxcImVycm9yLWlkXFxcIjogMSxcXG4rICAgICAgICAgICAgXFxcImVycm9yLW5hbWVcXFwiOiBcXFwiZXJyb3JfbmFtZTFcXFwiLFxcbisgICAgICAgICAgICBcXFwiZXJyb3ItdmFsdWVcXFwiOiAxXFxuKyAgICAgICAgfVxcbisgICAgfVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbmluZGV4IGUxMTMwNTZmOGMwMTYuLjhhZWQzZDQ1MTVlNWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcXG5AQCAtNjksNiArNjksMzMgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxcbisgIC1cXG4rICAgIG5hbWU6IGVycm9yLWV2ZW50LWF0dHJzXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZGV2aWNlLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBub2RlLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGxpc3Q6XFxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1ldmVudFxcbisgICAgICBkb2M6IFxcdTAwM2UtXFxuKyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cXG4rICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XFxuKyAgICAgIGV2ZW50OlxcbisgICAgICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXFxuKyAgICAgICAgICAtIG5vZGUtaWRcXG4rICAgICAgICAgIC0gbm9kZS1uYW1lXFxuKyAgICAgICAgICAtIGVycm9yLWlkXFxuKyAgICAgICAgICAtIGVycm9yLW5hbWVcXG4rICAgICAgICAgIC0gZXJyb3ItdmFsdWVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1yZXBvcnRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5pbmRleCBkNmVhYjI5YTEzOTRjLi4zOTE1NWZiNTE0ZGUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXFxuQEAgLTQxLDYgKzQxLDExIEBAXFxuICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuXFxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXFxuICAqXFxuKyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzXFxuKyAqXFxuKyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlXFxuKyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXFxuKyAqXFxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxcbiAgKlxcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xcbkBAIC0xODYsNiArMTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcXG4gXFx0XFx0XFx0ICAgdmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtXFx1MDAzZWRldmljZV9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwgbm9kZS1cXHUwMDNlbm9kZV9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXFxuIFxcdFxcdFxcdCAgICB1MzIgZXJyb3JfaWQpXFxuIHtcXG5AQCAtMjIyLDYgKzI1NSw3NCBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXFxuIFxcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcXG4rICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXFxuKyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yXFxuKyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvclxcbisgKiBAdmFsdWU6IFZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyXFxuKyAqXFxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuXFxuKyAqXFxuKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5LiBVc2VzICVHRlBfS0VSTkVMIGFuZCBtdWx0aWNhc3RzIHRvIGFsbFxcbisgKiAgICAgICAgICBuZXRucywgd2hpY2ggaXMgdW5ib3VuZGVkIHdvcms7IGNhbGxlcnMgaW4gaW50ZXJydXB0IGhhbmRsZXJzXFxuKyAqICAgICAgICAgIG9yIG90aGVyIGF0b21pYyBjb250ZXh0IG11c3QgZGVmZXIgZXZlbnQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxcbitcXHRcXHRcXHQgICB1MzIgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbitcXHRzdHJ1Y3QgbmxhdHRyICpoZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW5vZGUgfHwgIWVycm9yX25hbWUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogQ2hlY2sgdGhlIG5vZGUgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi9cXG4rXFx0aWYgKHhhX2xvYWQoXFx1MDAyNmRybV9yYXNfeGEsIG5vZGUtXFx1MDAzZWlkKSAhPSBub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdC8qIEN1cnJlbnRseSBvbmx5IEVycm9yIENvdW50ZXIgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgKi9cXG4rXFx0aWYgKG5vZGUtXFx1MDAzZXR5cGUgIT0gRFJNX1JBU19OT0RFX1RZUEVfRVJST1JfQ09VTlRFUilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogQ2hlY2sgdGhlIGVycm9yIElEIGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKi9cXG4rXFx0aWYgKGVycm9yX2lkIFxcdTAwM2Mgbm9kZS1cXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdCB8fFxcbitcXHQgICAgZXJyb3JfaWQgXFx1MDAzZSBub2RlLVxcdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3QpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Z2VubF9pbmZvX2luaXRfbnRmKFxcdTAwMjZpbmZvLCBcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcXG4rXFxuK1xcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtc2cpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aGRyID0gZ2VubG1zZ19pcHV0KG1zZywgXFx1MDAyNmluZm8pO1xcbitcXHRpZiAoIWhkcikge1xcbitcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuK1xcdFxcdGdvdG8gZnJlZV9tc2c7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGNhbmNlbF9tc2c7XFxuK1xcbitcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuK1xcdGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKFxcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NhbmNlbF9tc2c6XFxuK1xcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcXG4rZnJlZV9tc2c6XFxuK1xcdG5sbXNnX2ZyZWUobXNnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xcbitcXG4gLyoqXFxuICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVyc1xcbiAgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuaW5kZXggZGVhMWMxYjI0OTRlOC4uOWQzMTIzY2M5ZjljYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbkBAIC01OCw2ICs1OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGRybV9yYXNfbmxfbWNncnBzW10gPSB7XFxuK1xcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFxcXCJlcnJvci1yZXBvcnRcXFwiLCB9LFxcbit9O1xcbitcXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IERSTV9SQVNfRkFNSUxZX05BTUUsXFxuIFxcdC52ZXJzaW9uXFx0PSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLFxcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5tb2R1bGVcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiBcXHQuc3BsaXRfb3BzXFx0PSBkcm1fcmFzX25sX29wcyxcXG4gXFx0Lm5fc3BsaXRfb3BzXFx0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSxcXG4rXFx0Lm1jZ3Jwc1xcdFxcdD0gZHJtX3Jhc19ubF9tY2dycHMsXFxuK1xcdC5uX21jZ3Jwc1xcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuaW5kZXggYTM5ODY0MzU3MmE1YS4uMDNlYzI3NWFjYTkyOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbkBAIC0yMSw2ICsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBcXG4rZW51bSB7XFxuK1xcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxcbit9O1xcbitcXG4gZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTtcXG4gXFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbmluZGV4IDc5MzdkOGJhMGVkOWMuLmJmMWI5MjFmNDE4M2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG5AQCAtMTg1LDYgKzE4NSwzNyBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybS1yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXFxuKyAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSBcXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcXG4rICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlIFxcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXFxuKyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlclxcbisgKlxcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxcbisgKi9cXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXFx1MDAyNnhlLVxcdTAwM2VyYXM7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXFx1MDAzZWluZm9bc2V2ZXJpdHldO1xcbitcXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogRXZlbnQgaXMgc3VwcG9ydGVkIG9ubHkgaWYgZHJtLXJhcyBpcyBlbmFibGVkICovXFxuK1xcdGlmICgheGUtXFx1MDAzZWluZm8uaGFzX2RybV9yYXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5vZGUgPSBcXHUwMDI2cmFzLVxcdTAwM2Vub2RlW3NldmVyaXR5XTtcXG4rXFxuK1xcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkcm1fZXJyX3JhdGVsaW1pdGVkKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwiZHJtLXJhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcXFxuXFxcIiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbmluZGV4IDM2NWM3MGU5M2U4MmYuLjcyMzIyOWIyY2ZmYjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcXG5AQCAtNSwxMSArNSwxNCBAQFxcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXFxuICNkZWZpbmUgX1hFX0RSTV9SQVNfSF9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4gc3RydWN0IHhlX2RldmljZTtcXG4gXFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcXHRcXFxcXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpKyspXFxuIFxcbiBpbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuaW5kZXggMzUyZjA1NmZkOWVmNC4uNDg1MzI0NDdlMWQ4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG5AQCAtOTAsNiArOTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7XFxuIH07XFxuIHN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShncHVfaGVhbHRoX3N0YXRlcykgPT0gWEVfUkFTX0hFQUxUSF9NQVgpO1xcbiBcXG4rc3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSk7XFxuK1xcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHNldmVyaXR5KSB7XFxuQEAgLTEwMiw2ICsxMDQsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHU4IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXFxuK3tcXG4rXFx0c3dpdGNoIChzZXZlcml0eSkge1xcbitcXHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XFxuK1xcdGNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX1VOQ09SUkVDVEFCTEU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXFxuIHtcXG4gXFx0c3dpdGNoIChjb21wb25lbnQpIHtcXG5AQCAtMTIwLDYgKzEzNCwyNCBAQCBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXFxuK3tcXG4rXFx0c3dpdGNoIChjb21wb25lbnQpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX1BDSUU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfU09DX0lOVEVSTkFMOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcXG4ge1xcbiBcXHRzd2l0Y2ggKHN0YXR1cykge1xcbkBAIC0yMzYsNiArMjY4LDI2IEBAIHN0YXRpYyB2b2lkIHJhc191c3BfYWVyX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdGRldl9kYmcoXFx1MDAyNnVzcC1cXHUwMDNlZGV2LCBcXFwiVW5jb3JyZWN0YWJsZSBJbnRlcm5hbCBFcnJvcnMgZG93bmdyYWRlZCBhbmQgdW5tYXNrZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByYXNfc2VuZF9lcnJvcl9ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudClcXG4re1xcbitcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXIgPSB7MH07XFxuK1xcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Y291bnRlci5jb21tb24uc2V2ZXJpdHkgPSBzZXZlcml0eTtcXG4rXFx0Y291bnRlci5jb21tb24uY29tcG9uZW50ID0gY29tcG9uZW50O1xcbitcXG4rXFx0cmV0ID0gZ2V0X2NvdW50ZXIoeGUsIFxcdTAwMjZjb3VudGVyLCBcXHUwMDI2dmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcXG4rXFx0ZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XFxuK1xcbitcXHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcXG4rfVxcbitcXG4gc3RhdGljIHU4IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKHN0cnVjdCB4ZV9yYXNfZXJyb3JfYXJyYXkgKmFycilcXG4ge1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2NvbXB1dGVfZXJyb3IgKmVycm9yX2luZm8gPSAodm9pZCAqKWFyci1cXHUwMDNlZGV0YWlscztcXG5AQCAtMzMwLDggKzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbiBcXHRzdHJ1Y3QgeGVfcmFzX3RocmVzaG9sZF9jcm9zc2VkICpwZW5kaW5nID0gKHZvaWQgKilcXHUwMDI2cmVzcG9uc2UtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctXFx1MDAzZWNvdW50ZXJzO1xcbiBcXHR1MzIgaWQsIG5jb3VudGVycyA9IHBlbmRpbmctXFx1MDAzZW5jb3VudGVycztcXG4rXFx0dTggc2VudCA9IDA7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJlc3BvbnNlLVxcdTAwM2VkYXRhKSBcXHUwMDNjIHNpemVvZigqcGVuZGluZykpO1xcbitcXHRCVUlMRF9CVUdfT04oQklUU19QRVJfVFlQRShzZW50KSBcXHUwMDNjIFhFX1JBU19DT01QX01BWCk7XFxuIFxcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XFxuIFxcbiBcXHRpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgXFx1MDAzZSBYRV9SQVNfTlVNX0NPVU5URVJTKVxcbkBAIC0zNTAsNiArNDA0LDEzIEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuIFxcbiBcXHRcXHR4ZV93YXJuKHhlLCBcXFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XFxuK1xcbitcXHRcXHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xcbitcXHRcXHRpZiAoc2VudCBcXHUwMDI2IEJJVChjb21wb25lbnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcXG4rXFxuK1xcdFxcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC00MDYsMTIgKzQ2NywxNCBAQCBlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24geGVfcmFzX3Byb2Nlc3NfZXJyb3JzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxcbiBcXHRlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24gZmluYWxfYWN0aW9uO1xcbiBcXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcXG4gXFx0c3RydWN0IHhlX3Jhc19nZXRfc29jX2Vycm9yIHJlc3BvbnNlO1xcbitcXHR1OCBzZW50ID0gMDtcXG4gXFx0c2l6ZV90IHJsZW47XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXhlLVxcdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxcbiBcXHRcXHRyZXR1cm4gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRVNFVDtcXG4gXFxuK1xcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFxcdTAwM2MgWEVfUkFTX0NPTVBfTUFYKTtcXG4gXFx0LyogRGVmYXVsdCBhY3Rpb24gKi9cXG4gXFx0ZmluYWxfYWN0aW9uID0gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRUNPVkVSRUQ7XFxuIFxcbkBAIC00NTIsNiArNTE1LDEyIEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdFxcdFxcdHhlX2luZm8oeGUsIFxcXCJbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXFxcblxcXCIsIGNvbXBfdG9fc3RyKGNvbXBvbmVudCksXFxuIFxcdFxcdFxcdFxcdHNldl90b19zdHIoc2V2ZXJpdHkpKTtcXG4gXFxuK1xcdFxcdFxcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXFxuK1xcdFxcdFxcdGlmICghKHNlbnQgXFx1MDAyNiBCSVQoY29tcG9uZW50KSkpIHtcXG4rXFx0XFx0XFx0XFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcXG4rXFx0XFx0XFx0XFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xcbiBcXHRcXHRcXHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcXG4gXFx0XFx0XFx0XFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggMGJlZWRlM2RkYzRlNC4uZWUyY2FhMGVkYzZmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcXG5AQCAtODAsOSArODAsMTQgQEAgc3RydWN0IGRybV9kZXZpY2U7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbiB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbitpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuK1xcdFxcdFxcdCAgIHUzMiB2YWx1ZSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXFxuK3sgcmV0dXJuIDA7IH1cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbmluZGV4IDIxOGEzZWU4NjgwNTIuLmVhYjgyMzFhYTg3Y2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcXG4rXFxuK1xcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxcbiBcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcXG4gXFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcXG4rXFx0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQ01EX01BWCxcXG4gXFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcXG4gfTtcXG4gXFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcXHRcXFwiZXJyb3ItcmVwb3J0XFxcIlxcbitcXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMTo1Mjo1OC4zNDkyMDgzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2NTAzNTI0NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgZm9yIERSTSBSQVMgYW5kIGltcGxlbWVudHMgaXQgaW4gdGhlIEludGVsIFhlIEdQVSBkcml2ZXIuIFRoZSBuZXcgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGB4ZWAgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjNjU2MjU4ZmM5NzAzZWRmZjI0MGJmMDczMjg2NmFlMmRhYzZkOThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMTo1Mjo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYuLjQwNmU0YzQ5YmFjMWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuKyogU3Vic2NyaWJlIHRvIHRoZSBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGBgZXJyb3ItZXZlbnRgYC5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgKzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjF9J1xuICAgICBOb25lXG4rXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXG4rXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcbitcbisgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuK1xuKy4uIGNvZGUtYmxvY2s6OiBqc29uXG4rXG4rICAgIHtcbisgICAgICAgIFwibmFtZVwiOiBcImVycm9yLWV2ZW50XCIsXG4rICAgICAgICBcIm1zZ1wiOiB7XG4rICAgICAgICAgICAgXCJkZXZpY2UtbmFtZVwiOiBcIjAwMDA6MDM6MDAuMFwiLFxuKyAgICAgICAgICAgIFwibm9kZS1pZFwiOiAxLFxuKyAgICAgICAgICAgIFwibm9kZS1uYW1lXCI6IFwidW5jb3JyZWN0YWJsZS1lcnJvcnNcIixcbisgICAgICAgICAgICBcImVycm9yLWlkXCI6IDEsXG4rICAgICAgICAgICAgXCJlcnJvci1uYW1lXCI6IFwiZXJyb3JfbmFtZTFcIixcbisgICAgICAgICAgICBcImVycm9yLXZhbHVlXCI6IDFcbisgICAgICAgIH1cbisgICAgfVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5pbmRleCBlMTEzMDU2ZjhjMDE2Li44YWVkM2Q0NTE1ZTVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgKzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbisgIC1cbisgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogbm9kZS1pZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItaWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuIFxuIG9wZXJhdGlvbnM6XG4gICBsaXN0OlxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogZXJyb3ItZXZlbnRcbisgICAgICBkb2M6IFx1MDAzZS1cbisgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cbisgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4rICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XG4rICAgICAgZXZlbnQ6XG4rICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXG4rICAgICAgICAgIC0gbm9kZS1pZFxuKyAgICAgICAgICAtIG5vZGUtbmFtZVxuKyAgICAgICAgICAtIGVycm9yLWlkXG4rICAgICAgICAgIC0gZXJyb3ItbmFtZVxuKyAgICAgICAgICAtIGVycm9yLXZhbHVlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjLi4zOTE1NWZiNTE0ZGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuQEAgLTQxLDYgKzQxLDExIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4rICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcbisgKlxuKyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlXG4rICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbisgKlxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxuICAqXG4gICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcbkBAIC0xODYsNiArMTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcbiBcdFx0XHQgICB2YWx1ZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtXHUwMDNlZGV2aWNlX25hbWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXHUwMDNlaWQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwgbm9kZS1cdTAwM2Vub2RlX25hbWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLCB2YWx1ZSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMjIsNiArMjU1LDc0IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XG4gfVxuIFxuKy8qKlxuKyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuKyAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZVxuKyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yXG4rICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXG4rICogQHZhbHVlOiBWYWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlclxuKyAqXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC5cbisgKlxuKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5LiBVc2VzICVHRlBfS0VSTkVMIGFuZCBtdWx0aWNhc3RzIHRvIGFsbFxuKyAqICAgICAgICAgIG5ldG5zLCB3aGljaCBpcyB1bmJvdW5kZWQgd29yazsgY2FsbGVycyBpbiBpbnRlcnJ1cHQgaGFuZGxlcnNcbisgKiAgICAgICAgICBvciBvdGhlciBhdG9taWMgY29udGV4dCBtdXN0IGRlZmVyIGV2ZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuK1x0XHRcdCAgIHUzMiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgZ2VubF9pbmZvIGluZm87XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuK1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbm9kZSB8fCAhZXJyb3JfbmFtZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBDaGVjayB0aGUgbm9kZSBpcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCAqL1xuK1x0aWYgKHhhX2xvYWQoXHUwMDI2ZHJtX3Jhc194YSwgbm9kZS1cdTAwM2VpZCkgIT0gbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHQvKiBDdXJyZW50bHkgb25seSBFcnJvciBDb3VudGVyIGV2ZW50cyBhcmUgc3VwcG9ydGVkICovXG4rXHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IERSTV9SQVNfTk9ERV9UWVBFX0VSUk9SX0NPVU5URVIpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIENoZWNrIHRoZSBlcnJvciBJRCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICovXG4rXHRpZiAoZXJyb3JfaWQgXHUwMDNjIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdCB8fFxuK1x0ICAgIGVycm9yX2lkIFx1MDAzZSBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbitcbitcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXNnKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIFx1MDAyNmluZm8pO1xuK1x0aWYgKCFoZHIpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIGZyZWVfbXNnO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNhbmNlbF9tc2c7XG4rXG4rXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4rXHRnZW5sbXNnX211bHRpY2FzdF9hbGxucyhcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjYW5jZWxfbXNnOlxuK1x0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuK2ZyZWVfbXNnOlxuK1x0bmxtc2dfZnJlZShtc2cpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbitcbiAvKipcbiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnNcbiAgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcbmluZGV4IGRlYTFjMWIyNDk0ZTguLjlkMzEyM2NjOWY5Y2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiArNTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xuIFx0fSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZHJtX3Jhc19ubF9tY2dycHNbXSA9IHtcbitcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwiZXJyb3ItcmVwb3J0XCIsIH0sXG4rfTtcbitcbiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lm5hbWVcdFx0PSBEUk1fUkFTX0ZBTUlMWV9OQU1FLFxuIFx0LnZlcnNpb25cdD0gRFJNX1JBU19GQU1JTFlfVkVSU0lPTixcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubW9kdWxlXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuc3BsaXRfb3BzXHQ9IGRybV9yYXNfbmxfb3BzLFxuIFx0Lm5fc3BsaXRfb3BzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9vcHMpLFxuK1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuK1x0Lm5fbWNncnBzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9tY2dycHMpLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEuLjAzZWMyNzVhY2E5MjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5AQCAtMjEsNiArMjEsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuK2VudW0ge1xuK1x0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXG4rfTtcbitcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljLi5iZjFiOTIxZjQxODNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuQEAgLTE4NSw2ICsxODUsMzcgQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm0tcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxuKyAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxuKyAqIEBjb21wb25lbnQ6IGVycm9yIGNvbXBvbmVudCAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXG4rICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbisgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXJcbisgKlxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuXG4rICovXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuK1x0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy1cdTAwM2VpbmZvW3NldmVyaXR5XTtcbitcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogRXZlbnQgaXMgc3VwcG9ydGVkIG9ubHkgaWYgZHJtLXJhcyBpcyBlbmFibGVkICovXG4rXHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX2RybV9yYXMpXG4rXHRcdHJldHVybjtcbitcbitcdG5vZGUgPSBcdTAwMjZyYXMtXHUwMDNlbm9kZVtzZXZlcml0eV07XG4rXG4rXHRpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGRybV9lcnJfcmF0ZWxpbWl0ZWQoXHUwMDI2eGUtXHUwMDNlZHJtLCBcImRybS1yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcXG5cIiwgcmV0LFxuK1x0XHRcdFx0ICAgIGluZm9bY29tcG9uZW50XS5uYW1lLCBlcnJvcl9zZXZlcml0eVtzZXZlcml0eV0pO1xuK31cbitcbiAvKipcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbmluZGV4IDM2NWM3MGU5M2U4MmYuLjcyMzIyOWIyY2ZmYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5AQCAtNSwxMSArNSwxNCBAQFxuICNpZm5kZWYgX1hFX0RSTV9SQVNfSF9cbiAjZGVmaW5lIF9YRV9EUk1fUkFTX0hfXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuIHN0cnVjdCB4ZV9kZXZpY2U7XG4gXG4gI2RlZmluZSBmb3JfZWFjaF9lcnJvcl9zZXZlcml0eShpKVx0XFxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7IGkrKylcbiBcbiBpbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbit2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IDM1MmYwNTZmZDllZjQuLjQ4NTMyNDQ3ZTFkOGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuQEAgLTkwLDYgKzkwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncHVfaGVhbHRoX3N0YXRlc1tdID0ge1xuIH07XG4gc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7XG4gXG4rc3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSk7XG4rXG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4ge1xuIFx0c3dpdGNoIChzZXZlcml0eSkge1xuQEAgLTEwMiw2ICsxMDQsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuK3tcbitcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbitcdGNhc2UgWEVfUkFTX1NFVl9DT1JSRUNUQUJMRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRTtcbitcdGNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX1VOQ09SUkVDVEFCTEU7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcbitcdH1cbit9XG4rXG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiB7XG4gXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuQEAgLTEyMCw2ICsxMzQsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHU4IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbit7XG4rXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0NPUkVfQ09NUFVURTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfUENJRTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4rXHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfU09DX0lOVEVSTkFMO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cykge1xuQEAgLTIzNiw2ICsyNjgsMjYgQEAgc3RhdGljIHZvaWQgcmFzX3VzcF9hZXJfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGRldl9kYmcoXHUwMDI2dXNwLVx1MDAzZWRldiwgXCJVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxcblwiKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG4re1xuK1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyID0gezB9O1xuK1x0dTggZHJtX3NldmVyaXR5LCBkcm1fY29tcG9uZW50O1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdGNvdW50ZXIuY29tbW9uLnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4rXHRjb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4rXG4rXHRyZXQgPSBnZXRfY291bnRlcih4ZSwgXHUwMDI2Y291bnRlciwgXHUwMDI2dmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XG4rXHRkcm1fY29tcG9uZW50ID0geGVfdG9fZHJtX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTtcbitcbitcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpO1xuK31cbitcbiBzdGF0aWMgdTggaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoc3RydWN0IHhlX3Jhc19lcnJvcl9hcnJheSAqYXJyKVxuIHtcbiBcdHN0cnVjdCB4ZV9yYXNfY29tcHV0ZV9lcnJvciAqZXJyb3JfaW5mbyA9ICh2b2lkICopYXJyLVx1MDAzZWRldGFpbHM7XG5AQCAtMzMwLDggKzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXHUwMDI2cmVzcG9uc2UtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctXHUwMDNlY291bnRlcnM7XG4gXHR1MzIgaWQsIG5jb3VudGVycyA9IHBlbmRpbmctXHUwMDNlbmNvdW50ZXJzO1xuK1x0dTggc2VudCA9IDA7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJlc3BvbnNlLVx1MDAzZWRhdGEpIFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcbitcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0zNTAsNiArNDA0LDEzIEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXG4gXHRcdHhlX3dhcm4oeGUsIFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxuXCIsXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuK1xuK1x0XHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xuK1x0XHRpZiAoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XG4rXG4rXHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbiBcdH1cbiB9XG4gXG5AQCAtNDA2LDEyICs0NjcsMTQgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XG4gXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcbiBcdHN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTtcbitcdHU4IHNlbnQgPSAwO1xuIFx0c2l6ZV90IHJsZW47XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuIFx0XHRyZXR1cm4gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRVNFVDtcbiBcbitcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0LyogRGVmYXVsdCBhY3Rpb24gKi9cbiBcdGZpbmFsX2FjdGlvbiA9IFhFX1JBU19SRUNPVkVSWV9BQ1RJT05fUkVDT1ZFUkVEO1xuIFxuQEAgLTQ1Miw2ICs1MTUsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdFx0XHR4ZV9pbmZvKHhlLCBcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwiLCBjb21wX3RvX3N0cihjb21wb25lbnQpLFxuIFx0XHRcdFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xuIFxuK1x0XHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4rXHRcdFx0aWYgKCEoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpKSB7XG4rXHRcdFx0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuK1x0XHRcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuIFx0XHRcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuIFx0XHRcdFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTQuLmVlMmNhYTBlZGM2ZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbisrKyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuQEAgLTgwLDkgKzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxuIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4gdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbitpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4rXHRcdFx0ICAgdTMyIHZhbHVlKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuK3N0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLFxuK1x0XHRcdFx0XHQgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxuK3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyLi5lYWI4MjMxYWE4N2NiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzgsMTMgKzM4LDI4IEBAIGVudW0ge1xuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcbiB9O1xuIFxuK2VudW0ge1xuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLFxuK1xuK1x0X19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxuK307XG4rXG4gZW51bSB7XG4gXHREUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSxcbiBcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxuIFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcbitcdERSTV9SQVNfQ01EX0VSUk9SX0VWRU5ULFxuIFxuIFx0X19EUk1fUkFTX0NNRF9NQVgsXG4gXHREUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKVxuIH07XG4gXG4rI2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVFx0XCJlcnJvci1yZXBvcnRcIlxuK1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUyOjU4LjM0OTIwOTY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MDA4MjE4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUk0gUkFTIE5ldGxpbmsgRXZlbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBpbnRyb2R1Y2UgYSBOZXRsaW5rIG11bHRpY2FzdCBldmVudCBzcGVjaWZpY2FsbHkgZm9yIERSTSBSQVMgKFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIFNlcnZpY2VhYmlsaXR5KS4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgcXVpdGUgYSBmZXcgZmlsZXM6IGRvY3VtZW50YXRpb24sIHRoZSBjb3JlIERSTSBSQVMgY29kZSwgYW5kLCBub3RhYmx5LCB3aXRoaW4gdGhlIEludGVsIFhlIGdyYXBoaWNzIGRyaXZlciAoYHhlYCkuIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KClgIHdoaWNoIHNlbmRzIHRoZSBOZXRsaW5rIG11bHRpY2FzdCBtZXNzYWdlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBgeGVfZHJtX3Jhc19ldmVudCgpYCB3aGljaCBjYWxscyBgcmFzX3NlbmRfZXJyb3JfZXZlbnQoKWAgaW4gYHhlX3Jhcy5jYC5cblxuQSBrZXkgcXVlc3Rpb24gcG9wcyB1cCBpbW1lZGlhdGVseSDigJMgaXMgdGhlIEludGVsIFhlIGRyaXZlciBhIHZlbmRvci1zcGVjaWZpYyBHUFUgZHJpdmVyPyBZZXMsIGl0IGlzLCBnaXZlbiBpdHMgbG9jYXRpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS94ZWAuIEFuZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjcml0ZXJpYS4uLiBBaCwgdGhlIHByb21wdCBzYXlzIHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIHJlZCBmbGFnIGZvciBGdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgKmVudGlyZSogcGF0Y2ggbWlnaHQgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkgYmVjYXVzZSB0aGUgWGUgZHJpdmVyIGlzIGludm9raW5nIHRoZSBOZXRsaW5rIGV2ZW50LiBIb3dldmVyLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIHBhcnRzIGFyZSBjb25zaWRlcmVkLiBMZXQncyBzZWUuLi4gSXMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGNhbGxhYmxlIGZyb20gb3RoZXIgbG9jYXRpb25zPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuXG5cbk9rYXksIGNoZWNraW5nIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MKClgLiBTbywgb3RoZXIgbW9kdWxlcyAqY291bGQqIGNhbGwgaXQsIHdoaWNoIGlzIHRoZSBjb25jZXJuLiBIb3dldmVyLCBjdXJyZW50bHkgaXQncyBvbmx5IGNhbGxlZCBmcm9tIHRoZSBgeGVfZHJtX3Jhc19ldmVudGAgZnVuY3Rpb24gd2l0aGluIHRoZSBYZSBkcml2ZXIuIE5vdywgdGhlIG1haW4gcXVlc3Rpb24gaXM6IGNhbiB1c2Vyc3BhY2UgZGlyZWN0bHkgdHJpZ2dlciB0aGlzIGV2ZW50PyBMb29raW5nIGF0IHRoZSBOZXRsaW5rIHNwZWMsIHRoZSBgZXJyb3ItZXZlbnRgIGlzIGRlZmluZWQgYXMgYW4gZXZlbnQsIG5vdCBhIGNvbW1hbmQuIFRoZXJlIGFyZSBgZXZlbnQ6YCBlbnRyaWVzLCBidXQgbm8gYGRvOmAgb3IgYGR1bXA6YCBlbnRyaWVzLlxuXG5UaGlzIG1lYW5zIGl0IGlzIGEga2VybmVsLXRvLXVzZXJzcGFjZSBub3RpZmljYXRpb24uIFVzZXJzcGFjZSB3b3VsZCAqc3Vic2NyaWJlKiB0byB0aGUgbXVsdGljYXN0IGdyb3VwIGFuZCByZWNlaXZlIHRoZSBldmVudCwgYnV0IGl0IGNhbid0IGRpcmVjdGx5ICpjYXVzZSogdGhlIGV2ZW50LiBJdCBjYW4gKm9ubHkqIGJlIHRyaWdnZXJlZCBieSB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjYW4gYmUgZXhwbG9pdGVkLiBcblxuU28sIHVzZXJzcGFjZSBjYW4gKnJlY2VpdmUqIHRoZSBldmVudCwgYnV0IGl0IGNhbm5vdCBzZW5kIGl0LiBUaGUgb25seSBkaXJlY3QgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiBpcyBpbmRlZWQgYHhlX2RybV9yYXNfZXZlbnRgLiBPaywgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4sIGxldCdzIHZlcmlmeSB0aGVyZSBhcmUgKm5vKiBvdGhlciBjYWxsZXJzIG9mIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIG1lYW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTU3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6NTM6MDkuMDUwMDM0NDI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjE3OTg4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3Jhc19ubF9lcnJvcl9ldmVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jPTIyMj1zdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI1OC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI1OTogKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2MC0gKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjcyLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6MjczOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI3NC1cXHRcXHRcXHQgICB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTMyMy19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzozMjQ6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTMyNS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM9MTk3PXZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxMi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxMzpcXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxNC1cXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTgyPXZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjgzOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODQtXFx0XFx0XFx0ICAgdTMyIHZhbHVlKTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjg4OnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLFxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC04OS1cXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMTo1MzoxMi4wNzE4Mzg0OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTgzODE3Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbjogWGUgRHJpdmVyIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgeGVfZHJtX3Jhc19ldmVudGAsIGFuZCBJJ3ZlIHRyYWNlZCBpdCBkb3duIOKAkyBpdCdzIHRoZSAqb25seSogY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24uIE5vdywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgeGVgIGRyaXZlciBpcyBJbnRlbCdzIFhlIEdQVSBkcml2ZXIsIGFuZCBhIHZlbmRvci1zcGVjaWZpYyBvbmUgYXQgdGhhdC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZmxhZ3MgdGhlc2UgZHJpdmVycyBhcyBwcm9ibGVtYXRpYyBmb3IgZnV6emluZzogdGhleSBuZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5IGFuZCBhcmUgbm90IGdvaW5nIHRvIHJ1biB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIGEgY29tbW9uIGlzc3VlIHdpdGggdGhlc2UgdHlwZXMgb2YgZHJpdmVycy5cblxuU2luY2UgYHhlX2RybV9yYXNfZXZlbnRgIGlzICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLCBhbmQgdGhlIGB4ZWAgZHJpdmVyIG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCdzIGNsZWFyOiB0aGVyZSdzIG5vIHdheSB0aGlzIG5ldyBjb2RlIGNhbiBiZSByZWFjaGVkIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAuIEkndmUgZG91YmxlLWNoZWNrZWQgbXkgYXNzdW1wdGlvbnMsIHRoZXJlJ3Mgbm8gb3RoZXIgcGF0aCB0byBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAuIFRoZSBmYWN0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCB3aXRoaW4gdGhlIGB4ZWAgZHJpdmVyIHJlaW5mb3JjZXMgbXkgY29uY2x1c2lvbi4gVGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgcHVycG9zZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCdzIGNyaXRlcmlhLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUzOjE3LjY1NTY1OTgxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0ODM5MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX2RybV9yYXNfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xNTc9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTg5OiAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm0tcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTkwLSAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTYtICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxOTc6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5OC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oPTE1PWludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmg6MTY6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaC0xNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0yNzE9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjg3LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyODg6XFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTI4OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUzOjE5Ljg4MDUwNTIyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzIxODgzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogVGhpcyBDb2RlIGlzIFVuc3VpdGFibGUgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFllcCwgdGhlIGNyaXRpY2FsIGNvZGUgY2hhbmdlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiBgeGVfcmFzLmNgLiBHaXZlbiB0aGF0IHRoaXMgc3BlY2lmaWNhbGx5IHRhcmdldHMgYSB2ZW5kb3Itc3BlY2lmaWMgR1BVIGRyaXZlciDigJMgaW4gdGhpcyBjYXNlLCBJbnRlbCdzIFhlIOKAkyBpdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleGNsdXNpb24gY3JpdGVyaWEuIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbDogaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZWZmZWN0aXZlbHkgZnV6ej9cblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBOZXRsaW5rIG11bHRpY2FzdCBldmVudCByZWxhdGVkIHRvIERSTSBSQVMsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgSW50ZWwgWGUgR1BVIGRyaXZlci4gVGhlIGtpY2tlciBpcyB0aGF0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgKm9ubHkqIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYHhlYCBkcml2ZXIuIE5vdywgSSBrbm93IHRoZSBsaW1pdGF0aW9ucyBvZiBteSBjdXJyZW50IHNldHVwLiBUaGUgeGUgZHJpdmVyIHJlcXVpcmVzIGFjdHVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgSSBjYW4ndCBlZmZlY3RpdmVseSByZWFjaCBhbmQgZXhlcmNpc2UgdGhpcyBuZXcgY29kZS4gQ29uc2VxdWVudGx5LCBJIHdpbGwgY29uZmlkZW50bHkgc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS4gSXQncyBzaW1wbHkgbm90IGZlYXNpYmxlIHRvIHRlc3QgdGhpcyBjb2RlIHRob3JvdWdobHkgd2l0aCBteSBjdXJyZW50IHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTYsIk91dHB1dFRva2VucyI6OTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6NTM6MjQuODUyNjk3NTA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgZm9yIERSTSBSQVMgYW5kIGltcGxlbWVudHMgaXQgaW4gdGhlIEludGVsIFhlIEdQVSBkcml2ZXIuIFRoZSBuZXcgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGB4ZWAgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOZXRsaW5rIG11bHRpY2FzdCBldmVudCBmb3IgRFJNIFJBUyBhbmQgaW1wbGVtZW50cyBpdCBpbiB0aGUgSW50ZWwgWGUgR1BVIGRyaXZlci4gVGhlIG5ldyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHZpYSB0aGUgYHhlYCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6NTM6MjQuODUyNzM1MTk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl7j6c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 11:36:55 +0000 UTC FinishedAt: 2026-08-10 11:53:26 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2M2NTYyNThmYzk3MDNlZGZmMjQwYmYwNzMyODY2YWUyZGFjNmQ5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDExOjUyOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYuLjQwNmU0YzQ5YmFjMWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICYjNDM7NTYsNyBAQCBVc2VyIHNwYWNlIHRvb2xzIGNhbjpcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiAqIENsZWFyIHNwZWNpZmljIGVycm9yIGNvdW50ZXJzIHdpdGggdGhlIGBgY2xlYXItZXJyb3ItY291bnRlcmBgIGNvbW1hbmQsIHVzaW5nIGJvdGhcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cbiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLlxuIFxuIFlBTUwtYmFzZWQgSW50ZXJmYWNlXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0xMTEsMyAmIzQzOzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7e1wmIzM0O25vZGUtaWRcJiMzNDs6MCwgXCYjMzQ7ZXJyb3ItaWRcJiMzNDs6MX0mIzM5O1xuICAgICBOb25lXG4mIzQzO1xuJiM0MztFeGFtcGxlOiBTdWJzY3JpYmUgdG8gYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXBcbiYjNDM7XG4mIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoXG4mIzQzO1xuJiM0MzsgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGpzb25cbiYjNDM7XG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7ZXJyb3ItZXZlbnRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bXNnXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2RldmljZS1uYW1lXCYjMzQ7OiBcJiMzNDswMDAwOjAzOjAwLjBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtaWRcJiMzNDs6IDEsXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O25vZGUtbmFtZVwmIzM0OzogXCYjMzQ7dW5jb3JyZWN0YWJsZS1lcnJvcnNcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2Vycm9yLWlkXCYjMzQ7OiAxLFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtlcnJvci1uYW1lXCYjMzQ7OiBcJiMzNDtlcnJvcl9uYW1lMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7ZXJyb3ItdmFsdWVcJiMzNDs6IDFcbiYjNDM7ICAgICAgICB9XG4mIzQzOyAgICB9XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcbmluZGV4IGUxMTMwNTZmOGMwMTYuLjhhZWQzZDQ1MTVlNWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5AQCAtNjksNiAmIzQzOzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBlcnJvci1ldmVudC1hdHRyc1xuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGRldmljZS1uYW1lXG4mIzQzOyAgICAgICAgdHlwZTogc3RyaW5nXG4mIzQzOyAgICAgICAgZG9jOiBEZXZpY2UgKFBDSSBCREYsIFVVSUQpIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbm9kZS1pZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGRvYzogSUQgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBub2RlLW5hbWVcbiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmdcbiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1pZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGRvYzogSUQgb2YgdGhlIGVycm9yIGNvdW50ZXIuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1uYW1lXG4mIzQzOyAgICAgICAgdHlwZTogc3RyaW5nXG4mIzQzOyAgICAgICAgZG9jOiBOYW1lIG9mIHRoZSBlcnJvci5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLXZhbHVlXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuIFxuIG9wZXJhdGlvbnM6XG4gICBsaXN0OlxuQEAgLTEyNCwzICYjNDM7MTUxLDI0IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWQtYXR0cnNcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogZXJyb3ItZXZlbnRcbiYjNDM7ICAgICAgZG9jOiBcdTAwM2UtXG4mIzQzOyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cbiYjNDM7ICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cbiYjNDM7ICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xuJiM0MzsgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XG4mIzQzOyAgICAgIGV2ZW50OlxuJiM0MzsgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAtIGRldmljZS1uYW1lXG4mIzQzOyAgICAgICAgICAtIG5vZGUtaWRcbiYjNDM7ICAgICAgICAgIC0gbm9kZS1uYW1lXG4mIzQzOyAgICAgICAgICAtIGVycm9yLWlkXG4mIzQzOyAgICAgICAgICAtIGVycm9yLW5hbWVcbiYjNDM7ICAgICAgICAgIC0gZXJyb3ItdmFsdWVcbiYjNDM7XG4mIzQzO21jYXN0LWdyb3VwczpcbiYjNDM7ICBsaXN0OlxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBlcnJvci1yZXBvcnRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuaW5kZXggZDZlYWIyOWExMzk0Yy4uMzkxNTVmYjUxNGRlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcbkBAIC00MSw2ICYjNDM7NDEsMTEgQEBcbiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELlxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXG4gICpcbiYjNDM7ICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogNS4gRVJST1JfRVZFTlQ6IFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuIFRoZSBldmVudCBjb250YWlucyBkZXZpY2UsIG5vZGVcbiYjNDM7ICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbiYjNDM7ICpcbiAgKiBOb2RlIHJlZ2lzdHJhdGlvbjpcbiAgKlxuICAqIC0gZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKCk6IFJlZ2lzdGVycyBhIG5ldyBub2RlIGFuZCBhc3NpZ25zXG5AQCAtMTg2LDYgJiM0MzsxOTEsMzQgQEAgc3RhdGljIGludCBtc2dfcmVwbHlfdmFsdWUoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGVycm9yX2lkLFxuIFx0XHRcdCAgIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19ERVZJQ0VfTkFNRSwgbm9kZS1cdTAwM2VkZXZpY2VfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXHUwMDNlaWQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsIG5vZGUtXHUwMDNlbm9kZV9uYW1lKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF91MzIobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfSUQsIGVycm9yX2lkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMjIsNiAmIzQzOzI1NSw3NCBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuJiM0MzsgKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGVycm9yX2lkOiBJRCBvZiB0aGUgZXJyb3JcbiYjNDM7ICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXG4mIzQzOyAqIEB2YWx1ZTogVmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0IG9ubHkuIFVzZXMgJUdGUF9LRVJORUwgYW5kIG11bHRpY2FzdHMgdG8gYWxsXG4mIzQzOyAqICAgICAgICAgIG5ldG5zLCB3aGljaCBpcyB1bmJvdW5kZWQgd29yazsgY2FsbGVycyBpbiBpbnRlcnJ1cHQgaGFuZGxlcnNcbiYjNDM7ICogICAgICAgICAgb3Igb3RoZXIgYXRvbWljIGNvbnRleHQgbXVzdCBkZWZlciBldmVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5sX2luZm8gaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmhkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUgfHwgIWVycm9yX25hbWUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGhlIG5vZGUgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi9cbiYjNDM7XHRpZiAoeGFfbG9hZChcdTAwMjZkcm1fcmFzX3hhLCBub2RlLVx1MDAzZWlkKSAhPSBub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdC8qIEN1cnJlbnRseSBvbmx5IEVycm9yIENvdW50ZXIgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgKi9cbiYjNDM7XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IERSTV9SQVNfTk9ERV9UWVBFX0VSUk9SX0NPVU5URVIpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHRoZSBlcnJvciBJRCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICovXG4mIzQzO1x0aWYgKGVycm9yX2lkIFx1MDAzYyBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHxcbiYjNDM7XHQgICAgZXJyb3JfaWQgXHUwMDNlIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGdlbmxfaW5mb19pbml0X250ZihcdTAwMjZpbmZvLCBcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgRFJNX1JBU19DTURfRVJST1JfRVZFTlQpO1xuJiM0MztcbiYjNDM7XHRtc2cgPSBnZW5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtc2cpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aGRyID0gZ2VubG1zZ19pcHV0KG1zZywgXHUwMDI2aW5mbyk7XG4mIzQzO1x0aWYgKCFoZHIpIHtcbiYjNDM7XHRcdHJldCA9IC1FTVNHU0laRTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9tc2c7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjYW5jZWxfbXNnO1xuJiM0MztcbiYjNDM7XHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4mIzQzO1x0Z2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIG1zZywgMCwgRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NhbmNlbF9tc2c6XG4mIzQzO1x0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuJiM0MztmcmVlX21zZzpcbiYjNDM7XHRubG1zZ19mcmVlKG1zZyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xuJiM0MztcbiAvKipcbiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnNcbiAgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcbmluZGV4IGRlYTFjMWIyNDk0ZTguLjlkMzEyM2NjOWY5Y2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiAmIzQzOzU4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHJtX3Jhc19ubF9vcHNbXSA9IHtcbiBcdH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0ge1xuJiM0MztcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwmIzM0O2Vycm9yLXJlcG9ydFwmIzM0OywgfSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5uYW1lXHRcdD0gRFJNX1JBU19GQU1JTFlfTkFNRSxcbiBcdC52ZXJzaW9uXHQ9IERSTV9SQVNfRkFNSUxZX1ZFUlNJT04sXG5AQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdC5tb2R1bGVcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5zcGxpdF9vcHNcdD0gZHJtX3Jhc19ubF9vcHMsXG4gXHQubl9zcGxpdF9vcHNcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX29wcyksXG4mIzQzO1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuJiM0MztcdC5uX21jZ3Jwc1x0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfbWNncnBzKSxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5pbmRleCBhMzk4NjQzNTcyYTVhLi4wM2VjMjc1YWNhOTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxuQEAgLTIxLDYgJiM0MzsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljLi5iZjFiOTIxZjQxODNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuQEAgLTE4NSw2ICYjNDM7MTg1LDM3IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfbm9kZXMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm0tcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxuJiM0MzsgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNvbXBvbmVudDogZXJyb3IgY29tcG9uZW50IChzZWUgXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcbiYjNDM7ICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbiYjNDM7ICogQHZhbHVlOiB2YWx1ZSBvZiBlcnJvciBjb3VudGVyXG4mIzQzOyAqXG4mIzQzOyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhlX2RybV9yYXMgKnJhcyA9IFx1MDAyNnhlLVx1MDAzZXJhcztcbiYjNDM7XHRzdHJ1Y3QgeGVfZHJtX3Jhc19jb3VudGVyICppbmZvID0gcmFzLVx1MDAzZWluZm9bc2V2ZXJpdHldO1xuJiM0MztcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRXZlbnQgaXMgc3VwcG9ydGVkIG9ubHkgaWYgZHJtLXJhcyBpcyBlbmFibGVkICovXG4mIzQzO1x0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19kcm1fcmFzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRub2RlID0gXHUwMDI2cmFzLVx1MDAzZW5vZGVbc2V2ZXJpdHldO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZHJtX2Vycl9yYXRlbGltaXRlZChcdTAwMjZ4ZS1cdTAwM2Vkcm0sIFwmIzM0O2RybS1yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcXG5cJiMzNDssIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeGVfZHJtX3Jhc19pbml0KCkgLSBJbml0aWFsaXplIERSTSBSQVNcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5pbmRleCAzNjVjNzBlOTNlODJmLi43MjMyMjliMmNmZmI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxuQEAgLTUsMTEgJiM0Mzs1LDE0IEBAXG4gI2lmbmRlZiBfWEVfRFJNX1JBU19IX1xuICNkZWZpbmUgX1hFX0RSTV9SQVNfSF9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiBzdHJ1Y3QgeGVfZGV2aWNlO1xuIFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcdFxcXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpJiM0MzsmIzQzOylcbiBcbiBpbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbiYjNDM7dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG5pbmRleCAzNTJmMDU2ZmQ5ZWY0Li40ODUzMjQ0N2UxZDhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbkBAIC05MCw2ICYjNDM7OTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7XG4gfTtcbiBzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoZ3B1X2hlYWx0aF9zdGF0ZXMpID09IFhFX1JBU19IRUFMVEhfTUFYKTtcbiBcbiYjNDM7c3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSk7XG4mIzQzO1xuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuIHtcbiBcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbkBAIC0xMDIsNiAmIzQzOzEwNCwxOCBAQCBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzZXZlcml0eSkge1xuJiM0MztcdGNhc2UgWEVfUkFTX1NFVl9DT1JSRUNUQUJMRTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfU0VWX1VOQ09SUkVDVEFCTEU6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX1VOQ09SUkVDVEFCTEU7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxuIHtcbiBcdHN3aXRjaCAoY29tcG9uZW50KSB7XG5AQCAtMTIwLDYgJiM0MzsxMzQsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuJiM0MztcdGNhc2UgWEVfUkFTX0NPTVBfREVWSUNFX01FTU9SWTpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0RFVklDRV9NRU1PUlk7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XG4mIzQzO1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7XG4mIzQzO1x0Y2FzZSBYRV9SQVNfQ09NUF9QQ0lFOlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfUENJRTtcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX0ZBQlJJQzpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0ZBQlJJQztcbiYjNDM7XHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcbiYjNDM7XHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cykge1xuQEAgLTIzNiw2ICYjNDM7MjY4LDI2IEBAIHN0YXRpYyB2b2lkIHJhc191c3BfYWVyX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRkZXZfZGJnKFx1MDAyNnVzcC1cdTAwM2VkZXYsIFwmIzM0O1VuY29ycmVjdGFibGUgSW50ZXJuYWwgRXJyb3JzIGRvd25ncmFkZWQgYW5kIHVubWFza2VkXFxuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJhc19zZW5kX2Vycm9yX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1OCBzZXZlcml0eSwgdTggY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyID0gezB9O1xuJiM0MztcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcbiYjNDM7XHR1MzIgdmFsdWU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y291bnRlci5jb21tb24uc2V2ZXJpdHkgPSBzZXZlcml0eTtcbiYjNDM7XHRjb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdldF9jb3VudGVyKHhlLCBcdTAwMjZjb3VudGVyLCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XG4mIzQzO1x0ZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XG4mIzQzO1xuJiM0MztcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpXG4ge1xuIFx0c3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItXHUwMDNlZGV0YWlscztcbkBAIC0zMzAsOCAmIzQzOzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXHUwMDI2cmVzcG9uc2UtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctXHUwMDNlY291bnRlcnM7XG4gXHR1MzIgaWQsIG5jb3VudGVycyA9IHBlbmRpbmctXHUwMDNlbmNvdW50ZXJzO1xuJiM0MztcdHU4IHNlbnQgPSAwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS1cdTAwM2VkYXRhKSBcdTAwM2Mgc2l6ZW9mKCpwZW5kaW5nKSk7XG4mIzQzO1x0QlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgXHUwMDNjIFhFX1JBU19DT01QX01BWCk7XG4gXHR4ZV9kZXZpY2VfYXNzZXJ0X21lbV9hY2Nlc3MoeGUpO1xuIFxuIFx0aWYgKCFuY291bnRlcnMgfHwgbmNvdW50ZXJzIFx1MDAzZSBYRV9SQVNfTlVNX0NPVU5URVJTKVxuQEAgLTM1MCw2ICYjNDM7NDA0LDEzIEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXG4gXHRcdHhlX3dhcm4oeGUsIFwmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwmIzM0OyxcbiBcdFx0XHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VuZCBldmVudCBvbmNlIHBlciBjb21wb25lbnQgKi9cbiYjNDM7XHRcdGlmIChzZW50IFx1MDAyNiBCSVQoY29tcG9uZW50KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuJiM0MztcbiYjNDM7XHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbiBcdH1cbiB9XG4gXG5AQCAtNDA2LDEyICYjNDM7NDY3LDE0IEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24gZmluYWxfYWN0aW9uO1xuIFx0dTMyIHJlbWFpbmluZyA9IFhFX1NZU0NUUkxfRkxPT0RfTElNSVQ7XG4gXHRzdHJ1Y3QgeGVfcmFzX2dldF9zb2NfZXJyb3IgcmVzcG9uc2U7XG4mIzQzO1x0dTggc2VudCA9IDA7XG4gXHRzaXplX3QgcmxlbjtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX3N5c2N0cmwpXG4gXHRcdHJldHVybiBYRV9SQVNfUkVDT1ZFUllfQUNUSU9OX1JFU0VUO1xuIFxuJiM0MztcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0LyogRGVmYXVsdCBhY3Rpb24gKi9cbiBcdGZpbmFsX2FjdGlvbiA9IFhFX1JBU19SRUNPVkVSWV9BQ1RJT05fUkVDT1ZFUkVEO1xuIFxuQEAgLTQ1Miw2ICYjNDM7NTE1LDEyIEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4gXHRcdFx0eGVfaW5mbyh4ZSwgXCYjMzQ7W1JBU106ICVzICVzIGRldGVjdGVkXFxuXCYjMzQ7LCBjb21wX3RvX3N0cihjb21wb25lbnQpLFxuIFx0XHRcdFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xuIFxuJiM0MztcdFx0XHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xuJiM0MztcdFx0XHRpZiAoIShzZW50IFx1MDAyNiBCSVQoY29tcG9uZW50KSkpIHtcbiYjNDM7XHRcdFx0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuJiM0MztcdFx0XHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuIFx0XHRcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuIFx0XHRcdFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTQuLmVlMmNhYTBlZGM2ZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuQEAgLTgwLDkgJiM0Mzs4MCwxNCBAQCBzdHJ1Y3QgZHJtX2RldmljZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUylcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4mIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbHVlKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzQzO3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyLi5lYWI4MjMxYWE4N2NiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzgsMTMgJiM0MzszOCwyOCBAQCBlbnVtIHtcbiBcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTk9ERV9OQU1FLFxuJiM0MztcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfVkFMVUUsXG4mIzQzO1xuJiM0MztcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcbiYjNDM7XHREUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RFJNX1JBU19DTURfTElTVF9OT0RFUyA9IDEsXG4gXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcbiBcdERSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsXG4mIzQzO1x0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXG4gXG4gXHRfX0RSTV9SQVNfQ01EX01BWCxcbiBcdERSTV9SQVNfQ01EX01BWCA9IChfX0RSTV9SQVNfQ01EX01BWCAtIDEpXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVFx0XCYjMzQ7ZXJyb3ItcmVwb3J0XCYjMzQ7XG4mIzQzO1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2M2NTYyNThmYzk3MDNlZGZmMjQwYmYwNzMyODY2YWUyZGFjNmQ5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDExOjUyOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAppbmRleCA4M2MyMTg1M2I3NGI2Li40MDZlNGM0OWJhYzFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdApAQCAtNTYsNiAmIzQzOzU2LDcgQEAgVXNlciBzcGFjZSB0b29scyBjYW46CiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy4KICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aAogICBgYG5vZGUtaWRgYCBhbmQgYGBlcnJvci1pZGBgIGFzIHBhcmFtZXRlcnMuCiYjNDM7KiBTdWJzY3JpYmUgdG8gdGhlIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgYGBlcnJvci1ldmVudGBgLgogCiBZQU1MLWJhc2VkIEludGVyZmFjZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMSwzICYjNDM7MTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZQogCiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICYjMzk7eyYjMzQ7bm9kZS1pZCYjMzQ7OjAsICYjMzQ7ZXJyb3ItaWQmIzM0OzoxfSYjMzk7CiAgICAgTm9uZQomIzQzOwomIzQzO0V4YW1wbGU6IFN1YnNjcmliZSB0byBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cAomIzQzOwomIzQzOy4uIGNvZGUtYmxvY2s6OiBiYXNoCiYjNDM7CiYjNDM7ICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnQKJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjoganNvbgomIzQzOwomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtlcnJvci1ldmVudCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttc2cmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7ZGV2aWNlLW5hbWUmIzM0OzogJiMzNDswMDAwOjAzOjAwLjAmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtaWQmIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAmIzM0O25vZGUtbmFtZSYjMzQ7OiAmIzM0O3VuY29ycmVjdGFibGUtZXJyb3JzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci1pZCYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICYjMzQ7ZXJyb3ItbmFtZSYjMzQ7OiAmIzM0O2Vycm9yX25hbWUxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtlcnJvci12YWx1ZSYjMzQ7OiAxCiYjNDM7ICAgICAgICB9CiYjNDM7ICAgIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sCmluZGV4IGUxMTMwNTZmOGMwMTYuLjhhZWQzZDQ1MTVlNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbApAQCAtNjksNiAmIzQzOzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICBuYW1lOiBlcnJvci12YWx1ZQogICAgICAgICB0eXBlOiB1MzIKICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci4KJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnMKJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbm9kZS1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IG5vZGUtbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaWQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1uYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWUKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLgogCiBvcGVyYXRpb25zOgogICBsaXN0OgpAQCAtMTI0LDMgJiM0MzsxNTEsMjQgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogZXJyb3ItZXZlbnQKJiM0MzsgICAgICBkb2M6ICZndDstCiYjNDM7ICAgICAgICAgICBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLgomIzQzOyAgICAgICAgICAgVGhlIGV2ZW50IGluY2x1ZGVzIHRoZSBkZXZpY2UsIG5vZGUgYW5kIGVycm9yIGluZm9ybWF0aW9uCiYjNDM7ICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGVycm9yLWV2ZW50LWF0dHJzCiYjNDM7ICAgICAgbWNncnA6IGVycm9yLXJlcG9ydAomIzQzOyAgICAgIGV2ZW50OgomIzQzOyAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgLSBkZXZpY2UtbmFtZQomIzQzOyAgICAgICAgICAtIG5vZGUtaWQKJiM0MzsgICAgICAgICAgLSBub2RlLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci1pZAomIzQzOyAgICAgICAgICAtIGVycm9yLW5hbWUKJiM0MzsgICAgICAgICAgLSBlcnJvci12YWx1ZQomIzQzOwomIzQzO21jYXN0LWdyb3VwczoKJiM0MzsgIGxpc3Q6CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBlcnJvci1yZXBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jCmluZGV4IGQ2ZWFiMjlhMTM5NGMuLjM5MTU1ZmI1MTRkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYwpAQCAtNDEsNiAmIzQzOzQxLDExIEBACiAgKiAgICBVc2Vyc3BhY2UgbXVzdCBwcm92aWRlIE5vZGUgSUQsIEVycm9yIElELgogICogICAgQ2xlYXJzIHNwZWNpZmljIGVycm9yIGNvdW50ZXIgb2YgYSBub2RlIGlmIHN1cHBvcnRlZC4KICAqCiYjNDM7ICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHMKJiM0MzsgKgomIzQzOyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlCiYjNDM7ICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC4KJiM0MzsgKgogICogTm9kZSByZWdpc3RyYXRpb246CiAgKgogICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnMKQEAgLTE4Niw2ICYjNDM7MTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCwKIAkJCSAgIHZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLAomIzQzOwkJCQkgICAgIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtJmd0O2RldmljZV9uYW1lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtJmd0O2lkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwgbm9kZS0mZ3Q7bm9kZV9uYW1lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCwKIAkJCSAgICB1MzIgZXJyb3JfaWQpCiB7CkBAIC0yMjIsNiAmIzQzOzI1NSw3NCBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsCiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudAomIzQzOyAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZQomIzQzOyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yCiYjNDM7ICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yCiYjNDM7ICogQHZhbHVlOiBWYWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlcgomIzQzOyAqCiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5LiBVc2VzICVHRlBfS0VSTkVMIGFuZCBtdWx0aWNhc3RzIHRvIGFsbAomIzQzOyAqICAgICAgICAgIG5ldG5zLCB3aGljaCBpcyB1bmJvdW5kZWQgd29yazsgY2FsbGVycyBpbiBpbnRlcnJ1cHQgaGFuZGxlcnMKJiM0MzsgKiAgICAgICAgICBvciBvdGhlciBhdG9taWMgY29udGV4dCBtdXN0IGRlZmVyIGV2ZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLAomIzQzOwkJCSAgIHUzMiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5sX2luZm8gaW5mbzsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKm1zZzsKJiM0MzsJc3RydWN0IG5sYXR0ciAqaGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW5vZGUgfHwgIWVycm9yX25hbWUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgdGhlIG5vZGUgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi8KJiM0MzsJaWYgKHhhX2xvYWQoJmFtcDtkcm1fcmFzX3hhLCBub2RlLSZndDtpZCkgIT0gbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwkvKiBDdXJyZW50bHkgb25seSBFcnJvciBDb3VudGVyIGV2ZW50cyBhcmUgc3VwcG9ydGVkICovCiYjNDM7CWlmIChub2RlLSZndDt0eXBlICE9IERSTV9SQVNfTk9ERV9UWVBFX0VSUk9SX0NPVU5URVIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRoZSBlcnJvciBJRCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICovCiYjNDM7CWlmIChlcnJvcl9pZCAmbHQ7IG5vZGUtJmd0O2Vycm9yX2NvdW50ZXJfcmFuZ2UuZmlyc3QgfHwKJiM0MzsJICAgIGVycm9yX2lkICZndDsgbm9kZS0mZ3Q7ZXJyb3JfY291bnRlcl9yYW5nZS5sYXN0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWdlbmxfaW5mb19pbml0X250ZigmYW1wO2luZm8sICZhbXA7ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTsKJiM0MzsKJiM0MzsJbXNnID0gZ2VubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW1zZykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwloZHIgPSBnZW5sbXNnX2lwdXQobXNnLCAmYW1wO2luZm8pOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJcmV0ID0gLUVNU0dTSVpFOwomIzQzOwkJZ290byBmcmVlX21zZzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBtc2dfcHV0X2Vycm9yX2V2ZW50X2F0dHJzKG1zZywgbm9kZSwgZXJyb3JfaWQsIGVycm9yX25hbWUsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2FuY2VsX21zZzsKJiM0MzsKJiM0MzsJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwomIzQzOwlnZW5sbXNnX211bHRpY2FzdF9hbGxucygmYW1wO2RybV9yYXNfbmxfZmFtaWx5LCBtc2csIDAsIERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JUKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2FuY2VsX21zZzoKJiM0MzsJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwomIzQzO2ZyZWVfbXNnOgomIzQzOwlubG1zZ19mcmVlKG1zZyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZHJtX3Jhc19ubF9lcnJvcl9ldmVudCk7CiYjNDM7CiAvKioKICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVycwogICogQHNrYjogTmV0bGluayBtZXNzYWdlIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMKaW5kZXggZGVhMWMxYjI0OTRlOC4uOWQzMTIzY2M5ZjljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jCkBAIC01OCw2ICYjNDM7NTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0gewogCX0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBkcm1fcmFzX25sX21jZ3Jwc1tdID0gewomIzQzOwlbRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlRdID0geyAmIzM0O2Vycm9yLXJlcG9ydCYjMzQ7LCB9LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0gewogCS5uYW1lCQk9IERSTV9SQVNfRkFNSUxZX05BTUUsCiAJLnZlcnNpb24JPSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLApAQCAtNjYsNCAmIzQzOzcwLDYgQEAgc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCS5zcGxpdF9vcHMJPSBkcm1fcmFzX25sX29wcywKIAkubl9zcGxpdF9vcHMJPSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSwKJiM0MzsJLm1jZ3JwcwkJPSBkcm1fcmFzX25sX21jZ3JwcywKJiM0MzsJLm5fbWNncnBzCT0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmgKaW5kZXggYTM5ODY0MzU3MmE1YS4uMDNlYzI3NWFjYTkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oCkBAIC0yMSw2ICYjNDM7MjEsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsCiBpbnQgZHJtX3Jhc19ubF9jbGVhcl9lcnJvcl9jb3VudGVyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAKJiM0MztlbnVtIHsKJiM0MzsJRFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsCiYjNDM7fTsKJiM0MzsKIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHk7CiAKICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMKaW5kZXggNzkzN2Q4YmEwZWQ5Yy4uYmYxYjkyMWY0MTgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jCkBAIC0xODUsNiAmIzQzOzE4NSwzNyBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB4ZV9kcm1fcmFzX2V2ZW50KCkgLSBSZXBvcnQgZHJtLXJhcyBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UKJiM0MzsgKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSAmYW1wO2VudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpCiYjNDM7ICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlICZhbXA7ZW51bSBkcm1feGVfcmFzX2Vycm9yX3NldmVyaXR5KQomIzQzOyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlcgomIzQzOyAqCiYjNDM7ICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHhlX2RybV9yYXMgKnJhcyA9ICZhbXA7eGUtJmd0O3JhczsKJiM0MzsJc3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy0mZ3Q7aW5mb1tzZXZlcml0eV07CiYjNDM7CXN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEV2ZW50IGlzIHN1cHBvcnRlZCBvbmx5IGlmIGRybS1yYXMgaXMgZW5hYmxlZCAqLwomIzQzOwlpZiAoIXhlLSZndDtpbmZvLmhhc19kcm1fcmFzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlub2RlID0gJmFtcDtyYXMtJmd0O25vZGVbc2V2ZXJpdHldOwomIzQzOwomIzQzOwlpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRybV9lcnJfcmF0ZWxpbWl0ZWQoJmFtcDt4ZS0mZ3Q7ZHJtLCAmIzM0O2RybS1yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcbiYjMzQ7LCByZXQsCiYjNDM7CQkJCSAgICBpbmZvW2NvbXBvbmVudF0ubmFtZSwgZXJyb3Jfc2V2ZXJpdHlbc2V2ZXJpdHldKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHhlX2RybV9yYXNfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEUk0gUkFTCiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmgKaW5kZXggMzY1YzcwZTkzZTgyZi4uNzIzMjI5YjJjZmZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oCkBAIC01LDExICYjNDM7NSwxNCBAQAogI2lmbmRlZiBfWEVfRFJNX1JBU19IXwogI2RlZmluZSBfWEVfRFJNX1JBU19IXwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiBzdHJ1Y3QgeGVfZGV2aWNlOwogCiAjZGVmaW5lIGZvcl9lYWNoX2Vycm9yX3NldmVyaXR5KGkpCVwKIAlmb3IgKGkgPSAwOyBpICZsdDsgRFJNX1hFX1JBU19FUlJfU0VWX01BWDsgaSYjNDM7JiM0MzspCiAKIGludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpOwomIzQzO3ZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYwppbmRleCAzNTJmMDU2ZmQ5ZWY0Li40ODUzMjQ0N2UxZDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jCkBAIC05MCw2ICYjNDM7OTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7CiB9Owogc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7CiAKJiM0MztzdGF0aWMgaW50IGdldF9jb3VudGVyKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzICpjb3VudGVyLCB1MzIgKnZhbHVlKTsKJiM0MzsKIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogewogCXN3aXRjaCAoc2V2ZXJpdHkpIHsKQEAgLTEwMiw2ICYjNDM7MTA0LDE4IEBAIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQogCX0KIH0KIAomIzQzO3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KQomIzQzO3sKJiM0MzsJc3dpdGNoIChzZXZlcml0eSkgewomIzQzOwljYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX0NPUlJFQ1RBQkxFOwomIzQzOwljYXNlIFhFX1JBU19TRVZfVU5DT1JSRUNUQUJMRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfVU5DT1JSRUNUQUJMRTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIHsKIAlzd2l0Y2ggKGNvbXBvbmVudCkgewpAQCAtMTIwLDYgJiM0MzsxMzQsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdTggeGVfdG9fZHJtX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KQomIzQzO3sKJiM0MzsJc3dpdGNoIChjb21wb25lbnQpIHsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfREVWSUNFX01FTU9SWTsKJiM0MzsJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiYjNDM7CQlyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9DT1JFX0NPTVBVVEU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfUENJRToKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7CiYjNDM7CWNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOgomIzQzOwkJcmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfRkFCUklDOwomIzQzOwljYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1NPQ19JTlRFUk5BTDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcmFzX3N0YXR1c190b19lcnJubyh1MzIgc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0yMzYsNiAmIzQzOzI2OCwyNiBAQCBzdGF0aWMgdm9pZCByYXNfdXNwX2Flcl9pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKQogCWRldl9kYmcoJmFtcDt1c3AtJmd0O2RldiwgJiMzNDtVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxuJiMzNDspOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXIgPSB7MH07CiYjNDM7CXU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDsKJiM0MzsJdTMyIHZhbHVlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwljb3VudGVyLmNvbW1vbi5zZXZlcml0eSA9IHNldmVyaXR5OwomIzQzOwljb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7CiYjNDM7CiYjNDM7CXJldCA9IGdldF9jb3VudGVyKHhlLCAmYW1wO2NvdW50ZXIsICZhbXA7dmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTsKJiM0MzsJZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7CiYjNDM7CiYjNDM7CXhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1OCBoYW5kbGVfY29yZV9jb21wdXRlX2Vycm9ycyhzdHJ1Y3QgeGVfcmFzX2Vycm9yX2FycmF5ICphcnIpCiB7CiAJc3RydWN0IHhlX3Jhc19jb21wdXRlX2Vycm9yICplcnJvcl9pbmZvID0gKHZvaWQgKilhcnItJmd0O2RldGFpbHM7CkBAIC0zMzAsOCAmIzQzOzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAogCXN0cnVjdCB4ZV9yYXNfdGhyZXNob2xkX2Nyb3NzZWQgKnBlbmRpbmcgPSAodm9pZCAqKSZhbXA7cmVzcG9uc2UtJmd0O2RhdGE7CiAJc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqZXJyb3JzID0gcGVuZGluZy0mZ3Q7Y291bnRlcnM7CiAJdTMyIGlkLCBuY291bnRlcnMgPSBwZW5kaW5nLSZndDtuY291bnRlcnM7CiYjNDM7CXU4IHNlbnQgPSAwOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihyZXNwb25zZS0mZ3Q7ZGF0YSkgJmx0OyBzaXplb2YoKnBlbmRpbmcpKTsKJiM0MzsJQlVJTERfQlVHX09OKEJJVFNfUEVSX1RZUEUoc2VudCkgJmx0OyBYRV9SQVNfQ09NUF9NQVgpOwogCXhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7CiAKIAlpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgJmd0OyBYRV9SQVNfTlVNX0NPVU5URVJTKQpAQCAtMzUwLDYgJiM0Mzs0MDQsMTMgQEAgdm9pZCB4ZV9yYXNfY291bnRlcl90aHJlc2hvbGRfY3Jvc3NlZChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwKIAogCQl4ZV93YXJuKHhlLCAmIzM0O1tSQVNdOiAlcyAlcyBkZXRlY3RlZFxuJiMzNDssCiAJCQljb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiYjNDM7CiYjNDM7CQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJaWYgKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzZW50IHw9IEJJVChjb21wb25lbnQpOwomIzQzOwomIzQzOwkJcmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpOwogCX0KIH0KIApAQCAtNDA2LDEyICYjNDM7NDY3LDE0IEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpCiAJZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIGZpbmFsX2FjdGlvbjsKIAl1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDsKIAlzdHJ1Y3QgeGVfcmFzX2dldF9zb2NfZXJyb3IgcmVzcG9uc2U7CiYjNDM7CXU4IHNlbnQgPSAwOwogCXNpemVfdCBybGVuOwogCWludCByZXQ7CiAKIAlpZiAoIXhlLSZndDtpbmZvLmhhc19zeXNjdHJsKQogCQlyZXR1cm4gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRVNFVDsKIAomIzQzOwlCVUlMRF9CVUdfT04oQklUU19QRVJfVFlQRShzZW50KSAmbHQ7IFhFX1JBU19DT01QX01BWCk7CiAJLyogRGVmYXVsdCBhY3Rpb24gKi8KIAlmaW5hbF9hY3Rpb24gPSBYRV9SQVNfUkVDT1ZFUllfQUNUSU9OX1JFQ09WRVJFRDsKIApAQCAtNDUyLDYgJiM0Mzs1MTUsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSkKIAkJCXhlX2luZm8oeGUsICYjMzQ7W1JBU106ICVzICVzIGRldGVjdGVkXG4mIzM0OywgY29tcF90b19zdHIoY29tcG9uZW50KSwKIAkJCQlzZXZfdG9fc3RyKHNldmVyaXR5KSk7CiAKJiM0MzsJCQkvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqLwomIzQzOwkJCWlmICghKHNlbnQgJmFtcDsgQklUKGNvbXBvbmVudCkpKSB7CiYjNDM7CQkJCXNlbnQgfD0gQklUKGNvbXBvbmVudCk7CiYjNDM7CQkJCXJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlzd2l0Y2ggKGNvbXBvbmVudCkgewogCQkJY2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6CiAJCQkJYWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaAppbmRleCAwYmVlZGUzZGRjNGU0Li5lZTJjYWEwZWRjNmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oCkBAIC04MCw5ICYjNDM7ODAsMTQgQEAgc3RydWN0IGRybV9kZXZpY2U7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX1JBUykKIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7CiB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpOwomIzQzO2ludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwKJiM0MzsJCQkgICB1MzIgdmFsdWUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKQomIzQzO3sgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKaW5kZXggMjE4YTNlZTg2ODA1Mi4uZWFiODIzMWFhODdjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmgKQEAgLTM4LDEzICYjNDM7MzgsMjggQEAgZW51bSB7CiAJRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSkKIH07CiAKJiM0MztlbnVtIHsKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCwKJiM0MzsJRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsCiYjNDM7CURSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwKJiM0MzsKJiM0MzsJX19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYLAomIzQzOwlEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCAtIDEpCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCURSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLAogCURSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLAogCURSTV9SQVNfQ01EX0NMRUFSX0VSUk9SX0NPVU5URVIsCiYjNDM7CURSTV9SQVNfQ01EX0VSUk9SX0VWRU5ULAogCiAJX19EUk1fUkFTX0NNRF9NQVgsCiAJRFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSkKIH07CiAKJiM0MzsjZGVmaW5lIERSTV9SQVNfTUNHUlBfRVJST1JfUkVQT1JUCSYjMzQ7ZXJyb3ItcmVwb3J0JiMzNDsKJiM0MzsKICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDY5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERSTSBSQVMgTmV0bGluayBFdmVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gaW50cm9kdWNlIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgc3BlY2lmaWNhbGx5IGZvciBEUk0gUkFTIChSZWxpYWJpbGl0eSwgQXZhaWxhYmlsaXR5LCBTZXJ2aWNlYWJpbGl0eSkuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHF1aXRlIGEgZmV3IGZpbGVzOiBkb2N1bWVudGF0aW9uLCB0aGUgY29yZSBEUk0gUkFTIGNvZGUsIGFuZCwgbm90YWJseSwgd2l0aGluIHRoZSBJbnRlbCBYZSBncmFwaGljcyBkcml2ZXIgKGB4ZWApLiBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBhcHBlYXJzIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudCgpYCB3aGljaCBzZW5kcyB0aGUgTmV0bGluayBtdWx0aWNhc3QgbWVzc2FnZS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgYHhlX2RybV9yYXNfZXZlbnQoKWAgd2hpY2ggY2FsbHMgYHJhc19zZW5kX2Vycm9yX2V2ZW50KClgIGluIGB4ZV9yYXMuY2AuCgpBIGtleSBxdWVzdGlvbiBwb3BzIHVwIGltbWVkaWF0ZWx5IOKAkyBpcyB0aGUgSW50ZWwgWGUgZHJpdmVyIGEgdmVuZG9yLXNwZWNpZmljIEdQVSBkcml2ZXI/IFllcywgaXQgaXMsIGdpdmVuIGl0cyBsb2NhdGlvbiBpbiBgZHJpdmVycy9ncHUvZHJtL3hlYC4gQW5kLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhLi4uIEFoLCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSwgd2hpY2ggaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyBmb3IgRnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSAqZW50aXJlKiBwYXRjaCBtaWdodCBmYWxsIGludG8gdGhpcyBjYXRlZ29yeSBiZWNhdXNlIHRoZSBYZSBkcml2ZXIgaXMgaW52b2tpbmcgdGhlIE5ldGxpbmsgZXZlbnQuIEhvd2V2ZXIsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBhbGwgcGFydHMgYXJlIGNvbnNpZGVyZWQuIExldCYjMzk7cyBzZWUuLi4gSXMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGNhbGxhYmxlIGZyb20gb3RoZXIgbG9jYXRpb25zPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLgoKT2theSwgY2hlY2tpbmcgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0woKWAuIFNvLCBvdGhlciBtb2R1bGVzICpjb3VsZCogY2FsbCBpdCwgd2hpY2ggaXMgdGhlIGNvbmNlcm4uIEhvd2V2ZXIsIGN1cnJlbnRseSBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIHRoZSBgeGVfZHJtX3Jhc19ldmVudGAgZnVuY3Rpb24gd2l0aGluIHRoZSBYZSBkcml2ZXIuIE5vdywgdGhlIG1haW4gcXVlc3Rpb24gaXM6IGNhbiB1c2Vyc3BhY2UgZGlyZWN0bHkgdHJpZ2dlciB0aGlzIGV2ZW50PyBMb29raW5nIGF0IHRoZSBOZXRsaW5rIHNwZWMsIHRoZSBgZXJyb3ItZXZlbnRgIGlzIGRlZmluZWQgYXMgYW4gZXZlbnQsIG5vdCBhIGNvbW1hbmQuIFRoZXJlIGFyZSBgZXZlbnQ6YCBlbnRyaWVzLCBidXQgbm8gYGRvOmAgb3IgYGR1bXA6YCBlbnRyaWVzLgoKVGhpcyBtZWFucyBpdCBpcyBhIGtlcm5lbC10by11c2Vyc3BhY2Ugbm90aWZpY2F0aW9uLiBVc2Vyc3BhY2Ugd291bGQgKnN1YnNjcmliZSogdG8gdGhlIG11bHRpY2FzdCBncm91cCBhbmQgcmVjZWl2ZSB0aGUgZXZlbnQsIGJ1dCBpdCBjYW4mIzM5O3QgZGlyZWN0bHkgKmNhdXNlKiB0aGUgZXZlbnQuIEl0IGNhbiAqb25seSogYmUgdHJpZ2dlcmVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSBpZiB0aGlzIGNhbiBiZSBleHBsb2l0ZWQuIAoKU28sIHVzZXJzcGFjZSBjYW4gKnJlY2VpdmUqIHRoZSBldmVudCwgYnV0IGl0IGNhbm5vdCBzZW5kIGl0LiBUaGUgb25seSBkaXJlY3QgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiBpcyBpbmRlZWQgYHhlX2RybV9yYXNfZXZlbnRgLiBPaywgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4sIGxldCYjMzk7cyB2ZXJpZnkgdGhlcmUgYXJlICpubyogb3RoZXIgY2FsbGVycyBvZiBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBtZWFucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fcmFzX25sX2Vycm9yX2V2ZW50JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM9MjIyPXN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI1OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6MjU5OiAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNjAtICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0yNzItICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI3MzppbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI3NC1cdFx0XHQgICB1MzIgdmFsdWUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYy0zMjMtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzozMjQ6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMzI1LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM9MTk3PXZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxMzpcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0yMTQtXHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Mj12b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjgzOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC04NC1cdFx0XHQgICB1MzIgdmFsdWUpO1xuLS1cbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XG5pbmNsdWRlL2RybS9kcm1fcmFzLmg6ODg6c3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODktXHRcdFx0XHRcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uOiBYZSBEcml2ZXIgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGB4ZV9kcm1fcmFzX2V2ZW50YCwgYW5kIEkmIzM5O3ZlIHRyYWNlZCBpdCBkb3duIOKAkyBpdCYjMzk7cyB0aGUgKm9ubHkqIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uLiBOb3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYHhlYCBkcml2ZXIgaXMgSW50ZWwmIzM5O3MgWGUgR1BVIGRyaXZlciwgYW5kIGEgdmVuZG9yLXNwZWNpZmljIG9uZSBhdCB0aGF0LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBmbGFncyB0aGVzZSBkcml2ZXJzIGFzIHByb2JsZW1hdGljIGZvciBmdXp6aW5nOiB0aGV5IG5lZWQgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkgYW5kIGFyZSBub3QgZ29pbmcgdG8gcnVuIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgYSBjb21tb24gaXNzdWUgd2l0aCB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzLgoKU2luY2UgYHhlX2RybV9yYXNfZXZlbnRgIGlzICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLCBhbmQgdGhlIGB4ZWAgZHJpdmVyIG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCYjMzk7cyBjbGVhcjogdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgbmV3IGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSBzdGFuZGFyZCwgdmlydHVhbGl6ZWQgUUVNVSBzZXR1cC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgbXkgYXNzdW1wdGlvbnMsIHRoZXJlJiMzOTtzIG5vIG90aGVyIHBhdGggdG8gYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGUgYHhlYCBkcml2ZXIgcmVpbmZvcmNlcyBteSBjb25jbHVzaW9uLiBUaGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGVfZHJtX3Jhc19ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jPTE1Nz1zdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxODk6ICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybS1yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5MC0gKiBAeGU6IHhlIGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5Ni0gKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTk3OnZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5OC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaD0xNT1pbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmg6MTY6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oLTE3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0yNzE9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTI4Ny1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyODg6XHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYy0yODktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDk2CgkJCQkJCQlvdXRwdXQ6IDkzCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFRoaXMgQ29kZSBpcyBVbnN1aXRhYmxlIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFllcCwgdGhlIGNyaXRpY2FsIGNvZGUgY2hhbmdlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiBgeGVfcmFzLmNgLiBHaXZlbiB0aGF0IHRoaXMgc3BlY2lmaWNhbGx5IHRhcmdldHMgYSB2ZW5kb3Itc3BlY2lmaWMgR1BVIGRyaXZlciDigJMgaW4gdGhpcyBjYXNlLCBJbnRlbCYjMzk7cyBYZSDigJMgaXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgZXhjbHVzaW9uIGNyaXRlcmlhLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGw6IGlzIHRoaXMgc29tZXRoaW5nIEkgY2FuIGVmZmVjdGl2ZWx5IGZ1eno/CgpNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IHJlbGF0ZWQgdG8gRFJNIFJBUywgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUga2lja2VyIGlzIHRoYXQgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyAqb25seSogYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgeGVgIGRyaXZlci4gTm93LCBJIGtub3cgdGhlIGxpbWl0YXRpb25zIG9mIG15IGN1cnJlbnQgc2V0dXAuIFRoZSB4ZSBkcml2ZXIgcmVxdWlyZXMgYWN0dWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBzb21ldGhpbmcgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgSSBjYW4mIzM5O3QgZWZmZWN0aXZlbHkgcmVhY2ggYW5kIGV4ZXJjaXNlIHRoaXMgbmV3IGNvZGUuIENvbnNlcXVlbnRseSwgSSB3aWxsIGNvbmZpZGVudGx5IHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0JiMzOTtzIHNpbXBseSBub3QgZmVhc2libGUgdG8gdGVzdCB0aGlzIGNvZGUgdGhvcm91Z2hseSB3aXRoIG15IGN1cnJlbnQgcmVzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgZm9yIERSTSBSQVMgYW5kIGltcGxlbWVudHMgaXQgaW4gdGhlIEludGVsIFhlIEdQVSBkcml2ZXIuIFRoZSBuZXcgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGB4ZWAgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUyOjU3Ljg5NzY1NDAzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTU1MDk1ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5ldGxpbmsgbXVsdGljYXN0IGV2ZW50IGZvciBEUk0gUkFTIGFuZCBpbXBsZW1lbnRzIGl0IGluIHRoZSBJbnRlbCBYZSBHUFUgZHJpdmVyLiBUaGUgbmV3IGNvZGUgaXMgb25seSByZWFjaGFibGUgdmlhIHRoZSBgeGVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMTo1Mjo1Ny44OTc2NTk4NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDg5OTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNjNjU2MjU4ZmM5NzAzZWRmZjI0MGJmMDczMjg2NmFlMmRhYzZkOThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTE6NTI6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxcbmluZGV4IDgzYzIxODUzYjc0YjYuLjQwNmU0YzQ5YmFjMWYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxcbiAgIGBgbm9kZS1pZGBgIGFuZCBgYGVycm9yLWlkYGAgYXMgcGFyYW1ldGVycy5cXG4gKiBDbGVhciBzcGVjaWZpYyBlcnJvciBjb3VudGVycyB3aXRoIHRoZSBgYGNsZWFyLWVycm9yLWNvdW50ZXJgYCBjb21tYW5kLCB1c2luZyBib3RoXFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxcbisqIFN1YnNjcmliZSB0byB0aGUgYGBlcnJvci1yZXBvcnRgYCBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBgYGVycm9yLWV2ZW50YGAuXFxuIFxcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0xMTEsMyArMTEyLDIzIEBAIEV4YW1wbGU6IENsZWFyIGFuIGVycm9yIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gbm9kZVxcbiBcXG4gICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1kbyBjbGVhci1lcnJvci1jb3VudGVyIC0tanNvbiAne1xcXCJub2RlLWlkXFxcIjowLCBcXFwiZXJyb3ItaWRcXFwiOjF9J1xcbiAgICAgTm9uZVxcbitcXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogYmFzaFxcbitcXG4rICAgIHN1ZG8geW5sIC0tZmFtaWx5IGRybV9yYXMgLS1vdXRwdXQtanNvbiAtLXN1YnNjcmliZSBlcnJvci1yZXBvcnRcXG4rXFxuKy4uIGNvZGUtYmxvY2s6OiBqc29uXFxuK1xcbisgICAge1xcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcImVycm9yLWV2ZW50XFxcIixcXG4rICAgICAgICBcXFwibXNnXFxcIjoge1xcbisgICAgICAgICAgICBcXFwiZGV2aWNlLW5hbWVcXFwiOiBcXFwiMDAwMDowMzowMC4wXFxcIixcXG4rICAgICAgICAgICAgXFxcIm5vZGUtaWRcXFwiOiAxLFxcbisgICAgICAgICAgICBcXFwibm9kZS1uYW1lXFxcIjogXFxcInVuY29ycmVjdGFibGUtZXJyb3JzXFxcIixcXG4rICAgICAgICAgICAgXFxcImVycm9yLWlkXFxcIjogMSxcXG4rICAgICAgICAgICAgXFxcImVycm9yLW5hbWVcXFwiOiBcXFwiZXJyb3JfbmFtZTFcXFwiLFxcbisgICAgICAgICAgICBcXFwiZXJyb3ItdmFsdWVcXFwiOiAxXFxuKyAgICAgICAgfVxcbisgICAgfVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbmluZGV4IGUxMTMwNTZmOGMwMTYuLjhhZWQzZDQ1MTVlNWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWxcXG5AQCAtNjksNiArNjksMzMgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBlcnJvciBjb3VudGVyLlxcbisgIC1cXG4rICAgIG5hbWU6IGVycm9yLWV2ZW50LWF0dHJzXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZGV2aWNlLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBub2RlLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxcbisgICAgICAgIHR5cGU6IHN0cmluZ1xcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgbm9kZSB0aGF0IHJlcG9ydGVkIHRoZSBlcnJvci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGVycm9yLW5hbWVcXG4rICAgICAgICB0eXBlOiBzdHJpbmdcXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIGVycm9yLlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBkb2M6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIGVycm9yIGNvdW50ZXIuXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGxpc3Q6XFxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcXG4gICAgICAgZG86XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1ldmVudFxcbisgICAgICBkb2M6IFxcdTAwM2UtXFxuKyAgICAgICAgICAgUmVwb3J0IGFuIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZS5cXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cXG4rICAgICAgICAgICBvZiB0aGUgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBlcnJvci1ldmVudC1hdHRyc1xcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XFxuKyAgICAgIGV2ZW50OlxcbisgICAgICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXFxuKyAgICAgICAgICAtIG5vZGUtaWRcXG4rICAgICAgICAgIC0gbm9kZS1uYW1lXFxuKyAgICAgICAgICAtIGVycm9yLWlkXFxuKyAgICAgICAgICAtIGVycm9yLW5hbWVcXG4rICAgICAgICAgIC0gZXJyb3ItdmFsdWVcXG4rXFxuK21jYXN0LWdyb3VwczpcXG4rICBsaXN0OlxcbisgICAgLVxcbisgICAgICBuYW1lOiBlcnJvci1yZXBvcnRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG5pbmRleCBkNmVhYjI5YTEzOTRjLi4zOTE1NWZiNTE0ZGUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXFxuQEAgLTQxLDYgKzQxLDExIEBAXFxuICAqICAgIFVzZXJzcGFjZSBtdXN0IHByb3ZpZGUgTm9kZSBJRCwgRXJyb3IgSUQuXFxuICAqICAgIENsZWFycyBzcGVjaWZpYyBlcnJvciBjb3VudGVyIG9mIGEgbm9kZSBpZiBzdXBwb3J0ZWQuXFxuICAqXFxuKyAqIDQuIEVSUk9SX1JFUE9SVDogU3Vic2NyaWJlIHRvIHRoaXMgbXVsdGljYXN0IGdyb3VwIHRvIHJlY2VpdmUgZXJyb3IgZXZlbnRzXFxuKyAqXFxuKyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlXFxuKyAqICAgIGFuZCBlcnJvciBpbmZvcm1hdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXFxuKyAqXFxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxcbiAgKlxcbiAgKiAtIGRybV9yYXNfbm9kZV9yZWdpc3RlcigpOiBSZWdpc3RlcnMgYSBuZXcgbm9kZSBhbmQgYXNzaWduc1xcbkBAIC0xODYsNiArMTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcXG4gXFx0XFx0XFx0ICAgdmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtXFx1MDAzZWRldmljZV9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwgbm9kZS1cXHUwMDNlbm9kZV9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLCBlcnJvcl9uYW1lKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBubGFfcHV0X3UzMihtc2csIERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSwgdmFsdWUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXFxuIFxcdFxcdFxcdCAgICB1MzIgZXJyb3JfaWQpXFxuIHtcXG5AQCAtMjIyLDYgKzI1NSw3NCBAQCBzdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXFxuIFxcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcXG4rICogQG5vZGU6IE5vZGUgc3RydWN0dXJlXFxuKyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yXFxuKyAqIEBlcnJvcl9uYW1lOiBOYW1lIG9mIHRoZSBlcnJvclxcbisgKiBAdmFsdWU6IFZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyXFxuKyAqXFxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UgdXNpbmcgdGhlIGVycm9yLXJlcG9ydCBtdWx0aWNhc3QgZ3JvdXAuXFxuKyAqXFxuKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5LiBVc2VzICVHRlBfS0VSTkVMIGFuZCBtdWx0aWNhc3RzIHRvIGFsbFxcbisgKiAgICAgICAgICBuZXRucywgd2hpY2ggaXMgdW5ib3VuZGVkIHdvcms7IGNhbGxlcnMgaW4gaW50ZXJydXB0IGhhbmRsZXJzXFxuKyAqICAgICAgICAgIG9yIG90aGVyIGF0b21pYyBjb250ZXh0IG11c3QgZGVmZXIgZXZlbnQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxcbitcXHRcXHRcXHQgICB1MzIgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IGdlbmxfaW5mbyBpbmZvO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xcbitcXHRzdHJ1Y3QgbmxhdHRyICpoZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW5vZGUgfHwgIWVycm9yX25hbWUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogQ2hlY2sgdGhlIG5vZGUgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi9cXG4rXFx0aWYgKHhhX2xvYWQoXFx1MDAyNmRybV9yYXNfeGEsIG5vZGUtXFx1MDAzZWlkKSAhPSBub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdC8qIEN1cnJlbnRseSBvbmx5IEVycm9yIENvdW50ZXIgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgKi9cXG4rXFx0aWYgKG5vZGUtXFx1MDAzZXR5cGUgIT0gRFJNX1JBU19OT0RFX1RZUEVfRVJST1JfQ09VTlRFUilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LyogQ2hlY2sgdGhlIGVycm9yIElEIGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKi9cXG4rXFx0aWYgKGVycm9yX2lkIFxcdTAwM2Mgbm9kZS1cXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdCB8fFxcbitcXHQgICAgZXJyb3JfaWQgXFx1MDAzZSBub2RlLVxcdTAwM2VlcnJvcl9jb3VudGVyX3JhbmdlLmxhc3QpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Z2VubF9pbmZvX2luaXRfbnRmKFxcdTAwMjZpbmZvLCBcXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcXG4rXFxuK1xcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtc2cpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aGRyID0gZ2VubG1zZ19pcHV0KG1zZywgXFx1MDAyNmluZm8pO1xcbitcXHRpZiAoIWhkcikge1xcbitcXHRcXHRyZXQgPSAtRU1TR1NJWkU7XFxuK1xcdFxcdGdvdG8gZnJlZV9tc2c7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG1zZ19wdXRfZXJyb3JfZXZlbnRfYXR0cnMobXNnLCBub2RlLCBlcnJvcl9pZCwgZXJyb3JfbmFtZSwgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGNhbmNlbF9tc2c7XFxuK1xcbitcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuK1xcdGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKFxcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NhbmNlbF9tc2c6XFxuK1xcdGdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTtcXG4rZnJlZV9tc2c6XFxuK1xcdG5sbXNnX2ZyZWUobXNnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRybV9yYXNfbmxfZXJyb3JfZXZlbnQpO1xcbitcXG4gLyoqXFxuICAqIGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KCkgLSBEdW1wIGFsbCBFcnJvciBDb3VudGVyc1xcbiAgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuaW5kZXggZGVhMWMxYjI0OTRlOC4uOWQzMTIzY2M5ZjljYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuY1xcbkBAIC01OCw2ICs1OCwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRybV9yYXNfbmxfb3BzW10gPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGRybV9yYXNfbmxfbWNncnBzW10gPSB7XFxuK1xcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFxcXCJlcnJvci1yZXBvcnRcXFwiLCB9LFxcbit9O1xcbitcXG4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IERSTV9SQVNfRkFNSUxZX05BTUUsXFxuIFxcdC52ZXJzaW9uXFx0PSBEUk1fUkFTX0ZBTUlMWV9WRVJTSU9OLFxcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcdC5tb2R1bGVcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiBcXHQuc3BsaXRfb3BzXFx0PSBkcm1fcmFzX25sX29wcyxcXG4gXFx0Lm5fc3BsaXRfb3BzXFx0PSBBUlJBWV9TSVpFKGRybV9yYXNfbmxfb3BzKSxcXG4rXFx0Lm1jZ3Jwc1xcdFxcdD0gZHJtX3Jhc19ubF9tY2dycHMsXFxuK1xcdC5uX21jZ3Jwc1xcdD0gQVJSQVlfU0laRShkcm1fcmFzX25sX21jZ3JwcyksXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuaW5kZXggYTM5ODY0MzU3MmE1YS4uMDNlYzI3NWFjYTkyOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXFxuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaFxcbkBAIC0yMSw2ICsyMSwxMCBAQCBpbnQgZHJtX3Jhc19ubF9nZXRfZXJyb3JfY291bnRlcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBcXG4rZW51bSB7XFxuK1xcdERSTV9SQVNfTkxHUlBfRVJST1JfUkVQT1JULFxcbit9O1xcbitcXG4gZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseTtcXG4gXFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbmluZGV4IDc5MzdkOGJhMGVkOWMuLmJmMWI5MjFmNDE4M2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmNcXG5AQCAtMTg1LDYgKzE4NSwzNyBAQCBzdGF0aWMgaW50IHJlZ2lzdGVyX25vZGVzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeGVfZHJtX3Jhc19ldmVudCgpIC0gUmVwb3J0IGRybS1yYXMgZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlXFxuKyAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAY29tcG9uZW50OiBlcnJvciBjb21wb25lbnQgKHNlZSBcXHUwMDI2ZW51bSBkcm1feGVfcmFzX2Vycm9yX2NvbXBvbmVudClcXG4rICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlIFxcdTAwMjZlbnVtIGRybV94ZV9yYXNfZXJyb3Jfc2V2ZXJpdHkpXFxuKyAqIEB2YWx1ZTogdmFsdWUgb2YgZXJyb3IgY291bnRlclxcbisgKlxcbisgKiBSZXBvcnQgYW4gZXJyb3ItZXZlbnQgdG8gdXNlcnNwYWNlLlxcbisgKi9cXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXFx1MDAyNnhlLVxcdTAwM2VyYXM7XFxuK1xcdHN0cnVjdCB4ZV9kcm1fcmFzX2NvdW50ZXIgKmluZm8gPSByYXMtXFx1MDAzZWluZm9bc2V2ZXJpdHldO1xcbitcXHRzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogRXZlbnQgaXMgc3VwcG9ydGVkIG9ubHkgaWYgZHJtLXJhcyBpcyBlbmFibGVkICovXFxuK1xcdGlmICgheGUtXFx1MDAzZWluZm8uaGFzX2RybV9yYXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG5vZGUgPSBcXHUwMDI2cmFzLVxcdTAwM2Vub2RlW3NldmVyaXR5XTtcXG4rXFxuK1xcdGlmICghaW5mbyB8fCAhaW5mb1tjb21wb25lbnRdLm5hbWUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQobm9kZSwgY29tcG9uZW50LCBpbmZvW2NvbXBvbmVudF0ubmFtZSwgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkcm1fZXJyX3JhdGVsaW1pdGVkKFxcdTAwMjZ4ZS1cXHUwMDNlZHJtLCBcXFwiZHJtLXJhcyBlcnJvci1ldmVudCBmYWlsZWQ6ICVkIGZvciAlcyAlc1xcXFxuXFxcIiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgaW5mb1tjb21wb25lbnRdLm5hbWUsIGVycm9yX3NldmVyaXR5W3NldmVyaXR5XSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xcbiAgKiBAeGU6IHhlIGRldmljZSBpbnN0YW5jZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbmluZGV4IDM2NWM3MGU5M2U4MmYuLjcyMzIyOWIyY2ZmYjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaFxcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcXG5AQCAtNSwxMSArNSwxNCBAQFxcbiAjaWZuZGVmIF9YRV9EUk1fUkFTX0hfXFxuICNkZWZpbmUgX1hFX0RSTV9SQVNfSF9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4gc3RydWN0IHhlX2RldmljZTtcXG4gXFxuICNkZWZpbmUgZm9yX2VhY2hfZXJyb3Jfc2V2ZXJpdHkoaSlcXHRcXFxcXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYOyBpKyspXFxuIFxcbiBpbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jXFxuaW5kZXggMzUyZjA1NmZkOWVmNC4uNDg1MzI0NDdlMWQ4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcXG5AQCAtOTAsNiArOTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwdV9oZWFsdGhfc3RhdGVzW10gPSB7XFxuIH07XFxuIHN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShncHVfaGVhbHRoX3N0YXRlcykgPT0gWEVfUkFTX0hFQUxUSF9NQVgpO1xcbiBcXG4rc3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSk7XFxuK1xcbiBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19zZXZlcml0eSh1OCBzZXZlcml0eSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHNldmVyaXR5KSB7XFxuQEAgLTEwMiw2ICsxMDQsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHU4IHhlX3RvX2RybV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXFxuK3tcXG4rXFx0c3dpdGNoIChzZXZlcml0eSkge1xcbitcXHRjYXNlIFhFX1JBU19TRVZfQ09SUkVDVEFCTEU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfQ09SUkVDVEFCTEU7XFxuK1xcdGNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX1VOQ09SUkVDVEFCTEU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9TRVZfTUFYO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB1OCBkcm1fdG9feGVfcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXFxuIHtcXG4gXFx0c3dpdGNoIChjb21wb25lbnQpIHtcXG5AQCAtMTIwLDYgKzEzNCwyNCBAQCBzdGF0aWMgdTggZHJtX3RvX3hlX3Jhc19jb21wb25lbnQodTggY29tcG9uZW50KVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX2NvbXBvbmVudCh1OCBjb21wb25lbnQpXFxuK3tcXG4rXFx0c3dpdGNoIChjb21wb25lbnQpIHtcXG4rXFx0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcXG4rXFx0XFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfQ09SRV9DT01QVVRFO1xcbitcXHRjYXNlIFhFX1JBU19DT01QX1BDSUU6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX1BDSUU7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XFxuK1xcdGNhc2UgWEVfUkFTX0NPTVBfU09DX0lOVEVSTkFMOlxcbitcXHRcXHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9TT0NfSU5URVJOQUw7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX01BWDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcXG4ge1xcbiBcXHRzd2l0Y2ggKHN0YXR1cykge1xcbkBAIC0yMzYsNiArMjY4LDI2IEBAIHN0YXRpYyB2b2lkIHJhc191c3BfYWVyX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdGRldl9kYmcoXFx1MDAyNnVzcC1cXHUwMDNlZGV2LCBcXFwiVW5jb3JyZWN0YWJsZSBJbnRlcm5hbCBFcnJvcnMgZG93bmdyYWRlZCBhbmQgdW5tYXNrZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByYXNfc2VuZF9lcnJvcl9ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTggc2V2ZXJpdHksIHU4IGNvbXBvbmVudClcXG4re1xcbitcXHRzdHJ1Y3QgeGVfcmFzX2Vycm9yX2NsYXNzIGNvdW50ZXIgPSB7MH07XFxuK1xcdHU4IGRybV9zZXZlcml0eSwgZHJtX2NvbXBvbmVudDtcXG4rXFx0dTMyIHZhbHVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Y291bnRlci5jb21tb24uc2V2ZXJpdHkgPSBzZXZlcml0eTtcXG4rXFx0Y291bnRlci5jb21tb24uY29tcG9uZW50ID0gY29tcG9uZW50O1xcbitcXG4rXFx0cmV0ID0gZ2V0X2NvdW50ZXIoeGUsIFxcdTAwMjZjb3VudGVyLCBcXHUwMDI2dmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkcm1fc2V2ZXJpdHkgPSB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHNldmVyaXR5KTtcXG4rXFx0ZHJtX2NvbXBvbmVudCA9IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KGNvbXBvbmVudCk7XFxuK1xcbitcXHR4ZV9kcm1fcmFzX2V2ZW50KHhlLCBkcm1fY29tcG9uZW50LCBkcm1fc2V2ZXJpdHksIHZhbHVlKTtcXG4rfVxcbitcXG4gc3RhdGljIHU4IGhhbmRsZV9jb3JlX2NvbXB1dGVfZXJyb3JzKHN0cnVjdCB4ZV9yYXNfZXJyb3JfYXJyYXkgKmFycilcXG4ge1xcbiBcXHRzdHJ1Y3QgeGVfcmFzX2NvbXB1dGVfZXJyb3IgKmVycm9yX2luZm8gPSAodm9pZCAqKWFyci1cXHUwMDNlZGV0YWlscztcXG5AQCAtMzMwLDggKzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxcbiBcXHRzdHJ1Y3QgeGVfcmFzX3RocmVzaG9sZF9jcm9zc2VkICpwZW5kaW5nID0gKHZvaWQgKilcXHUwMDI2cmVzcG9uc2UtXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctXFx1MDAzZWNvdW50ZXJzO1xcbiBcXHR1MzIgaWQsIG5jb3VudGVycyA9IHBlbmRpbmctXFx1MDAzZW5jb3VudGVycztcXG4rXFx0dTggc2VudCA9IDA7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJlc3BvbnNlLVxcdTAwM2VkYXRhKSBcXHUwMDNjIHNpemVvZigqcGVuZGluZykpO1xcbitcXHRCVUlMRF9CVUdfT04oQklUU19QRVJfVFlQRShzZW50KSBcXHUwMDNjIFhFX1JBU19DT01QX01BWCk7XFxuIFxcdHhlX2RldmljZV9hc3NlcnRfbWVtX2FjY2Vzcyh4ZSk7XFxuIFxcbiBcXHRpZiAoIW5jb3VudGVycyB8fCBuY291bnRlcnMgXFx1MDAzZSBYRV9SQVNfTlVNX0NPVU5URVJTKVxcbkBAIC0zNTAsNiArNDA0LDEzIEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXFxuIFxcbiBcXHRcXHR4ZV93YXJuKHhlLCBcXFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjb21wX3RvX3N0cihjb21wb25lbnQpLCBzZXZfdG9fc3RyKHNldmVyaXR5KSk7XFxuK1xcbitcXHRcXHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xcbitcXHRcXHRpZiAoc2VudCBcXHUwMDI2IEJJVChjb21wb25lbnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcXG4rXFxuK1xcdFxcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC00MDYsMTIgKzQ2NywxNCBAQCBlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24geGVfcmFzX3Byb2Nlc3NfZXJyb3JzKHN0cnVjdCB4ZV9kZXZpY2UgKnhlKVxcbiBcXHRlbnVtIHhlX3Jhc19yZWNvdmVyeV9hY3Rpb24gZmluYWxfYWN0aW9uO1xcbiBcXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcXG4gXFx0c3RydWN0IHhlX3Jhc19nZXRfc29jX2Vycm9yIHJlc3BvbnNlO1xcbitcXHR1OCBzZW50ID0gMDtcXG4gXFx0c2l6ZV90IHJsZW47XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXhlLVxcdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxcbiBcXHRcXHRyZXR1cm4gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRVNFVDtcXG4gXFxuK1xcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFxcdTAwM2MgWEVfUkFTX0NPTVBfTUFYKTtcXG4gXFx0LyogRGVmYXVsdCBhY3Rpb24gKi9cXG4gXFx0ZmluYWxfYWN0aW9uID0gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRUNPVkVSRUQ7XFxuIFxcbkBAIC00NTIsNiArNTE1LDEyIEBAIGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiB4ZV9yYXNfcHJvY2Vzc19lcnJvcnMoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuIFxcdFxcdFxcdHhlX2luZm8oeGUsIFxcXCJbUkFTXTogJXMgJXMgZGV0ZWN0ZWRcXFxcblxcXCIsIGNvbXBfdG9fc3RyKGNvbXBvbmVudCksXFxuIFxcdFxcdFxcdFxcdHNldl90b19zdHIoc2V2ZXJpdHkpKTtcXG4gXFxuK1xcdFxcdFxcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXFxuK1xcdFxcdFxcdGlmICghKHNlbnQgXFx1MDAyNiBCSVQoY29tcG9uZW50KSkpIHtcXG4rXFx0XFx0XFx0XFx0c2VudCB8PSBCSVQoY29tcG9uZW50KTtcXG4rXFx0XFx0XFx0XFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xcbiBcXHRcXHRcXHRjYXNlIFhFX1JBU19DT01QX0NPUkVfQ09NUFVURTpcXG4gXFx0XFx0XFx0XFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3Jhcy5oXFxuaW5kZXggMGJlZWRlM2RkYzRlNC4uZWUyY2FhMGVkYzZmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcXG5AQCAtODAsOSArODAsMTQgQEAgc3RydWN0IGRybV9kZXZpY2U7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxcbiBpbnQgZHJtX3Jhc19ub2RlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbiB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpO1xcbitpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXFxuK1xcdFxcdFxcdCAgIHUzMiB2YWx1ZSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IH1cXG4rc3RhdGljIGlubGluZSBpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICplcnJvcl9uYW1lLCB1MzIgdmFsdWUpXFxuK3sgcmV0dXJuIDA7IH1cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbmluZGV4IDIxOGEzZWU4NjgwNTIuLmVhYjgyMzFhYTg3Y2IgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaFxcbkBAIC0zOCwxMyArMzgsMjggQEAgZW51bSB7XFxuIFxcdERSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9DT1VOVEVSX0FUVFJTX01BWCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX05BTUUsXFxuK1xcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9WQUxVRSxcXG4rXFxuK1xcdF9fRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCxcXG4rXFx0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdERSTV9SQVNfQ01EX0xJU1RfTk9ERVMgPSAxLFxcbiBcXHREUk1fUkFTX0NNRF9HRVRfRVJST1JfQ09VTlRFUixcXG4gXFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcXG4rXFx0RFJNX1JBU19DTURfRVJST1JfRVZFTlQsXFxuIFxcbiBcXHRfX0RSTV9SQVNfQ01EX01BWCxcXG4gXFx0RFJNX1JBU19DTURfTUFYID0gKF9fRFJNX1JBU19DTURfTUFYIC0gMSlcXG4gfTtcXG4gXFxuKyNkZWZpbmUgRFJNX1JBU19NQ0dSUF9FUlJPUl9SRVBPUlRcXHRcXFwiZXJyb3ItcmVwb3J0XFxcIlxcbitcXG4gI2VuZGlmIC8qIF9VQVBJX0xJTlVYX0RSTV9SQVNfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMTo1Mjo1OC4zNDkyMDgzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2NTAzNTI0NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgZm9yIERSTSBSQVMgYW5kIGltcGxlbWVudHMgaXQgaW4gdGhlIEludGVsIFhlIEdQVSBkcml2ZXIuIFRoZSBuZXcgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGB4ZWAgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNjNjU2MjU4ZmM5NzAzZWRmZjI0MGJmMDczMjg2NmFlMmRhYzZkOThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxMTo1Mjo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1yYXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbmluZGV4IDgzYzIxODUzYjc0YjYuLjQwNmU0YzQ5YmFjMWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tcmFzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLXJhcy5yc3RcbkBAIC01Niw2ICs1Niw3IEBAIFVzZXIgc3BhY2UgdG9vbHMgY2FuOlxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuICogQ2xlYXIgc3BlY2lmaWMgZXJyb3IgY291bnRlcnMgd2l0aCB0aGUgYGBjbGVhci1lcnJvci1jb3VudGVyYGAgY29tbWFuZCwgdXNpbmcgYm90aFxuICAgYGBub2RlLWlkYGAgYW5kIGBgZXJyb3ItaWRgYCBhcyBwYXJhbWV0ZXJzLlxuKyogU3Vic2NyaWJlIHRvIHRoZSBgYGVycm9yLXJlcG9ydGBgIG11bHRpY2FzdCBncm91cCB0byByZWNlaXZlIGBgZXJyb3ItZXZlbnRgYC5cbiBcbiBZQU1MLWJhc2VkIEludGVyZmFjZVxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMTExLDMgKzExMiwyMyBAQCBFeGFtcGxlOiBDbGVhciBhbiBlcnJvciBjb3VudGVyIGZvciBhIGdpdmVuIG5vZGVcbiBcbiAgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLWRvIGNsZWFyLWVycm9yLWNvdW50ZXIgLS1qc29uICd7XCJub2RlLWlkXCI6MCwgXCJlcnJvci1pZFwiOjF9J1xuICAgICBOb25lXG4rXG4rRXhhbXBsZTogU3Vic2NyaWJlIHRvIGBgZXJyb3ItcmVwb3J0YGAgbXVsdGljYXN0IGdyb3VwXG4rXG4rLi4gY29kZS1ibG9jazo6IGJhc2hcbitcbisgICAgc3VkbyB5bmwgLS1mYW1pbHkgZHJtX3JhcyAtLW91dHB1dC1qc29uIC0tc3Vic2NyaWJlIGVycm9yLXJlcG9ydFxuK1xuKy4uIGNvZGUtYmxvY2s6OiBqc29uXG4rXG4rICAgIHtcbisgICAgICAgIFwibmFtZVwiOiBcImVycm9yLWV2ZW50XCIsXG4rICAgICAgICBcIm1zZ1wiOiB7XG4rICAgICAgICAgICAgXCJkZXZpY2UtbmFtZVwiOiBcIjAwMDA6MDM6MDAuMFwiLFxuKyAgICAgICAgICAgIFwibm9kZS1pZFwiOiAxLFxuKyAgICAgICAgICAgIFwibm9kZS1uYW1lXCI6IFwidW5jb3JyZWN0YWJsZS1lcnJvcnNcIixcbisgICAgICAgICAgICBcImVycm9yLWlkXCI6IDEsXG4rICAgICAgICAgICAgXCJlcnJvci1uYW1lXCI6IFwiZXJyb3JfbmFtZTFcIixcbisgICAgICAgICAgICBcImVycm9yLXZhbHVlXCI6IDFcbisgICAgICAgIH1cbisgICAgfVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcm1fcmFzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHJtX3Jhcy55YW1sXG5pbmRleCBlMTEzMDU2ZjhjMDE2Li44YWVkM2Q0NTE1ZTVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RybV9yYXMueWFtbFxuQEAgLTY5LDYgKzY5LDMzIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbiAgICAgICAgIHR5cGU6IHUzMlxuICAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgZXJyb3IgY291bnRlci5cbisgIC1cbisgICAgbmFtZTogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBkZXZpY2UtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IERldmljZSAoUENJIEJERiwgVVVJRCkgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogbm9kZS1pZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBkb2M6IElEIG9mIHRoZSBub2RlIHRoYXQgcmVwb3J0ZWQgdGhlIGVycm9yLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5vZGUtbmFtZVxuKyAgICAgICAgdHlwZTogc3RyaW5nXG4rICAgICAgICBkb2M6IE5hbWUgb2YgdGhlIG5vZGUgdGhhdCByZXBvcnRlZCB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItaWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBJRCBvZiB0aGUgZXJyb3IgY291bnRlci5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1uYW1lXG4rICAgICAgICB0eXBlOiBzdHJpbmdcbisgICAgICAgIGRvYzogTmFtZSBvZiB0aGUgZXJyb3IuXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItdmFsdWVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZG9jOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBlcnJvciBjb3VudGVyLlxuIFxuIG9wZXJhdGlvbnM6XG4gICBsaXN0OlxuQEAgLTEyNCwzICsxNTEsMjQgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZC1hdHRyc1xuKyAgICAtXG4rICAgICAgbmFtZTogZXJyb3ItZXZlbnRcbisgICAgICBkb2M6IFx1MDAzZS1cbisgICAgICAgICAgIFJlcG9ydCBhbiBlcnJvciBldmVudCB0byB1c2Vyc3BhY2UuXG4rICAgICAgICAgICBUaGUgZXZlbnQgaW5jbHVkZXMgdGhlIGRldmljZSwgbm9kZSBhbmQgZXJyb3IgaW5mb3JtYXRpb25cbisgICAgICAgICAgIG9mIHRoZSBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG4rICAgICAgYXR0cmlidXRlLXNldDogZXJyb3ItZXZlbnQtYXR0cnNcbisgICAgICBtY2dycDogZXJyb3ItcmVwb3J0XG4rICAgICAgZXZlbnQ6XG4rICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAtIGRldmljZS1uYW1lXG4rICAgICAgICAgIC0gbm9kZS1pZFxuKyAgICAgICAgICAtIG5vZGUtbmFtZVxuKyAgICAgICAgICAtIGVycm9yLWlkXG4rICAgICAgICAgIC0gZXJyb3ItbmFtZVxuKyAgICAgICAgICAtIGVycm9yLXZhbHVlXG4rXG4rbWNhc3QtZ3JvdXBzOlxuKyAgbGlzdDpcbisgICAgLVxuKyAgICAgIG5hbWU6IGVycm9yLXJlcG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jXG5pbmRleCBkNmVhYjI5YTEzOTRjLi4zOTE1NWZiNTE0ZGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuY1xuQEAgLTQxLDYgKzQxLDExIEBAXG4gICogICAgVXNlcnNwYWNlIG11c3QgcHJvdmlkZSBOb2RlIElELCBFcnJvciBJRC5cbiAgKiAgICBDbGVhcnMgc3BlY2lmaWMgZXJyb3IgY291bnRlciBvZiBhIG5vZGUgaWYgc3VwcG9ydGVkLlxuICAqXG4rICogNC4gRVJST1JfUkVQT1JUOiBTdWJzY3JpYmUgdG8gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgdG8gcmVjZWl2ZSBlcnJvciBldmVudHNcbisgKlxuKyAqIDUuIEVSUk9SX0VWRU5UOiBSZXBvcnQgYW4gZXJyb3IgZXZlbnQgdG8gdXNlcnNwYWNlLiBUaGUgZXZlbnQgY29udGFpbnMgZGV2aWNlLCBub2RlXG4rICogICAgYW5kIGVycm9yIGluZm9ybWF0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cbisgKlxuICAqIE5vZGUgcmVnaXN0cmF0aW9uOlxuICAqXG4gICogLSBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoKTogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgYW5kIGFzc2lnbnNcbkBAIC0xODYsNiArMTkxLDM0IEBAIHN0YXRpYyBpbnQgbXNnX3JlcGx5X3ZhbHVlKHN0cnVjdCBza19idWZmICptc2csIHUzMiBlcnJvcl9pZCxcbiBcdFx0XHQgICB2YWx1ZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsIHUzMiB2YWx1ZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfREVWSUNFX05BTUUsIG5vZGUtXHUwMDNlZGV2aWNlX25hbWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfSUQsIG5vZGUtXHUwMDNlaWQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSwgbm9kZS1cdTAwM2Vub2RlX25hbWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX0lELCBlcnJvcl9pZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbmxhX3B1dF9zdHJpbmcobXNnLCBEUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfRVJST1JfTkFNRSwgZXJyb3JfbmFtZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG5sYV9wdXRfdTMyKG1zZywgRFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLCB2YWx1ZSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdFx0XHQgICAgdTMyIGVycm9yX2lkKVxuIHtcbkBAIC0yMjIsNiArMjU1LDc0IEBAIHN0YXRpYyBpbnQgZG9pdF9yZXBseV92YWx1ZShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1MzIgbm9kZV9pZCxcbiBcdHJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7XG4gfVxuIFxuKy8qKlxuKyAqIGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoKSAtIFJlcG9ydCBhbiBlcnJvciBldmVudFxuKyAqIEBub2RlOiBOb2RlIHN0cnVjdHVyZVxuKyAqIEBlcnJvcl9pZDogSUQgb2YgdGhlIGVycm9yXG4rICogQGVycm9yX25hbWU6IE5hbWUgb2YgdGhlIGVycm9yXG4rICogQHZhbHVlOiBWYWx1ZSBvZiB0aGUgZXJyb3IgY291bnRlclxuKyAqXG4rICogUmVwb3J0IGFuIGVycm9yLWV2ZW50IHRvIHVzZXJzcGFjZSB1c2luZyB0aGUgZXJyb3ItcmVwb3J0IG11bHRpY2FzdCBncm91cC5cbisgKlxuKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5LiBVc2VzICVHRlBfS0VSTkVMIGFuZCBtdWx0aWNhc3RzIHRvIGFsbFxuKyAqICAgICAgICAgIG5ldG5zLCB3aGljaCBpcyB1bmJvdW5kZWQgd29yazsgY2FsbGVycyBpbiBpbnRlcnJ1cHQgaGFuZGxlcnNcbisgKiAgICAgICAgICBvciBvdGhlciBhdG9taWMgY29udGV4dCBtdXN0IGRlZmVyIGV2ZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLCBjb25zdCBjaGFyICplcnJvcl9uYW1lLFxuK1x0XHRcdCAgIHUzMiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgZ2VubF9pbmZvIGluZm87XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuK1x0c3RydWN0IG5sYXR0ciAqaGRyO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbm9kZSB8fCAhZXJyb3JfbmFtZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBDaGVjayB0aGUgbm9kZSBpcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCAqL1xuK1x0aWYgKHhhX2xvYWQoXHUwMDI2ZHJtX3Jhc194YSwgbm9kZS1cdTAwM2VpZCkgIT0gbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHQvKiBDdXJyZW50bHkgb25seSBFcnJvciBDb3VudGVyIGV2ZW50cyBhcmUgc3VwcG9ydGVkICovXG4rXHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IERSTV9SQVNfTk9ERV9UWVBFX0VSUk9SX0NPVU5URVIpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIENoZWNrIHRoZSBlcnJvciBJRCBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlICovXG4rXHRpZiAoZXJyb3JfaWQgXHUwMDNjIG5vZGUtXHUwMDNlZXJyb3JfY291bnRlcl9yYW5nZS5maXJzdCB8fFxuK1x0ICAgIGVycm9yX2lkIFx1MDAzZSBub2RlLVx1MDAzZWVycm9yX2NvdW50ZXJfcmFuZ2UubGFzdClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRnZW5sX2luZm9faW5pdF9udGYoXHUwMDI2aW5mbywgXHUwMDI2ZHJtX3Jhc19ubF9mYW1pbHksIERSTV9SQVNfQ01EX0VSUk9SX0VWRU5UKTtcbitcbitcdG1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXNnKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGhkciA9IGdlbmxtc2dfaXB1dChtc2csIFx1MDAyNmluZm8pO1xuK1x0aWYgKCFoZHIpIHtcbitcdFx0cmV0ID0gLUVNU0dTSVpFO1xuK1x0XHRnb3RvIGZyZWVfbXNnO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXNnX3B1dF9lcnJvcl9ldmVudF9hdHRycyhtc2csIG5vZGUsIGVycm9yX2lkLCBlcnJvcl9uYW1lLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNhbmNlbF9tc2c7XG4rXG4rXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4rXHRnZW5sbXNnX211bHRpY2FzdF9hbGxucyhcdTAwMjZkcm1fcmFzX25sX2ZhbWlseSwgbXNnLCAwLCBEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVCk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjYW5jZWxfbXNnOlxuK1x0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuK2ZyZWVfbXNnOlxuK1x0bmxtc2dfZnJlZShtc2cpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcbitcbiAvKipcbiAgKiBkcm1fcmFzX25sX2dldF9lcnJvcl9jb3VudGVyX2R1bXBpdCgpIC0gRHVtcCBhbGwgRXJyb3IgQ291bnRlcnNcbiAgKiBAc2tiOiBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmNcbmluZGV4IGRlYTFjMWIyNDk0ZTguLjlkMzEyM2NjOWY5Y2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5jXG5AQCAtNTgsNiArNTgsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcm1fcmFzX25sX29wc1tdID0ge1xuIFx0fSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZHJtX3Jhc19ubF9tY2dycHNbXSA9IHtcbitcdFtEUk1fUkFTX05MR1JQX0VSUk9SX1JFUE9SVF0gPSB7IFwiZXJyb3ItcmVwb3J0XCIsIH0sXG4rfTtcbitcbiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHJtX3Jhc19ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuIFx0Lm5hbWVcdFx0PSBEUk1fUkFTX0ZBTUlMWV9OQU1FLFxuIFx0LnZlcnNpb25cdD0gRFJNX1JBU19GQU1JTFlfVkVSU0lPTixcbkBAIC02Niw0ICs3MCw2IEBAIHN0cnVjdCBnZW5sX2ZhbWlseSBkcm1fcmFzX25sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHQubW9kdWxlXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuc3BsaXRfb3BzXHQ9IGRybV9yYXNfbmxfb3BzLFxuIFx0Lm5fc3BsaXRfb3BzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9vcHMpLFxuK1x0Lm1jZ3Jwc1x0XHQ9IGRybV9yYXNfbmxfbWNncnBzLFxuK1x0Lm5fbWNncnBzXHQ9IEFSUkFZX1NJWkUoZHJtX3Jhc19ubF9tY2dycHMpLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yYXNfbmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmFzX25sLmhcbmluZGV4IGEzOTg2NDM1NzJhNWEuLjAzZWMyNzVhY2E5MjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhc19ubC5oXG5AQCAtMjEsNiArMjEsMTAgQEAgaW50IGRybV9yYXNfbmxfZ2V0X2Vycm9yX2NvdW50ZXJfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4gaW50IGRybV9yYXNfbmxfY2xlYXJfZXJyb3JfY291bnRlcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuK2VudW0ge1xuK1x0RFJNX1JBU19OTEdSUF9FUlJPUl9SRVBPUlQsXG4rfTtcbitcbiBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRybV9yYXNfbmxfZmFtaWx5O1xuIFxuICNlbmRpZiAvKiBfTElOVVhfRFJNX1JBU19HRU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jXG5pbmRleCA3OTM3ZDhiYTBlZDljLi5iZjFiOTIxZjQxODNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuY1xuQEAgLTE4NSw2ICsxODUsMzcgQEAgc3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm0tcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxuKyAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxuKyAqIEBjb21wb25lbnQ6IGVycm9yIGNvbXBvbmVudCAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9jb21wb25lbnQpXG4rICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSAoc2VlIFx1MDAyNmVudW0gZHJtX3hlX3Jhc19lcnJvcl9zZXZlcml0eSlcbisgKiBAdmFsdWU6IHZhbHVlIG9mIGVycm9yIGNvdW50ZXJcbisgKlxuKyAqIFJlcG9ydCBhbiBlcnJvci1ldmVudCB0byB1c2Vyc3BhY2UuXG4rICovXG4rdm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgeGVfZHJtX3JhcyAqcmFzID0gXHUwMDI2eGUtXHUwMDNlcmFzO1xuK1x0c3RydWN0IHhlX2RybV9yYXNfY291bnRlciAqaW5mbyA9IHJhcy1cdTAwM2VpbmZvW3NldmVyaXR5XTtcbitcdHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogRXZlbnQgaXMgc3VwcG9ydGVkIG9ubHkgaWYgZHJtLXJhcyBpcyBlbmFibGVkICovXG4rXHRpZiAoIXhlLVx1MDAzZWluZm8uaGFzX2RybV9yYXMpXG4rXHRcdHJldHVybjtcbitcbitcdG5vZGUgPSBcdTAwMjZyYXMtXHUwMDNlbm9kZVtzZXZlcml0eV07XG4rXG4rXHRpZiAoIWluZm8gfHwgIWluZm9bY29tcG9uZW50XS5uYW1lKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGRybV9lcnJfcmF0ZWxpbWl0ZWQoXHUwMDI2eGUtXHUwMDNlZHJtLCBcImRybS1yYXMgZXJyb3ItZXZlbnQgZmFpbGVkOiAlZCBmb3IgJXMgJXNcXG5cIiwgcmV0LFxuK1x0XHRcdFx0ICAgIGluZm9bY29tcG9uZW50XS5uYW1lLCBlcnJvcl9zZXZlcml0eVtzZXZlcml0eV0pO1xuK31cbitcbiAvKipcbiAgKiB4ZV9kcm1fcmFzX2luaXQoKSAtIEluaXRpYWxpemUgRFJNIFJBU1xuICAqIEB4ZTogeGUgZGV2aWNlIGluc3RhbmNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmhcbmluZGV4IDM2NWM3MGU5M2U4MmYuLjcyMzIyOWIyY2ZmYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oXG5AQCAtNSwxMSArNSwxNCBAQFxuICNpZm5kZWYgX1hFX0RSTV9SQVNfSF9cbiAjZGVmaW5lIF9YRV9EUk1fUkFTX0hfXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuIHN0cnVjdCB4ZV9kZXZpY2U7XG4gXG4gI2RlZmluZSBmb3JfZWFjaF9lcnJvcl9zZXZlcml0eShpKVx0XFxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERSTV9YRV9SQVNfRVJSX1NFVl9NQVg7IGkrKylcbiBcbiBpbnQgeGVfZHJtX3Jhc19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlKTtcbit2b2lkIHhlX2RybV9yYXNfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHUzMiBjb21wb25lbnQsIHUzMiBzZXZlcml0eSwgdTMyIHZhbHVlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbmluZGV4IDM1MmYwNTZmZDllZjQuLjQ4NTMyNDQ3ZTFkOGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuY1xuQEAgLTkwLDYgKzkwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncHVfaGVhbHRoX3N0YXRlc1tdID0ge1xuIH07XG4gc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGdwdV9oZWFsdGhfc3RhdGVzKSA9PSBYRV9SQVNfSEVBTFRIX01BWCk7XG4gXG4rc3RhdGljIGludCBnZXRfY291bnRlcihzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyAqY291bnRlciwgdTMyICp2YWx1ZSk7XG4rXG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4ge1xuIFx0c3dpdGNoIChzZXZlcml0eSkge1xuQEAgLTEwMiw2ICsxMDQsMTggQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfc2V2ZXJpdHkodTggc2V2ZXJpdHkpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB1OCB4ZV90b19kcm1fcmFzX3NldmVyaXR5KHU4IHNldmVyaXR5KVxuK3tcbitcdHN3aXRjaCAoc2V2ZXJpdHkpIHtcbitcdGNhc2UgWEVfUkFTX1NFVl9DT1JSRUNUQUJMRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX1NFVl9DT1JSRUNUQUJMRTtcbitcdGNhc2UgWEVfUkFTX1NFVl9VTkNPUlJFQ1RBQkxFOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX1VOQ09SUkVDVEFCTEU7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfU0VWX01BWDtcbitcdH1cbit9XG4rXG4gc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiB7XG4gXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuQEAgLTEyMCw2ICsxMzQsMjQgQEAgc3RhdGljIHU4IGRybV90b194ZV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHU4IHhlX3RvX2RybV9yYXNfY29tcG9uZW50KHU4IGNvbXBvbmVudClcbit7XG4rXHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9ERVZJQ0VfTUVNT1JZOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9ERVZJQ0VfTUVNT1JZO1xuK1x0Y2FzZSBYRV9SQVNfQ09NUF9DT1JFX0NPTVBVVEU6XG4rXHRcdHJldHVybiBEUk1fWEVfUkFTX0VSUl9DT01QX0NPUkVfQ09NUFVURTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfUENJRTpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfUENJRTtcbitcdGNhc2UgWEVfUkFTX0NPTVBfRkFCUklDOlxuK1x0XHRyZXR1cm4gRFJNX1hFX1JBU19FUlJfQ09NUF9GQUJSSUM7XG4rXHRjYXNlIFhFX1JBU19DT01QX1NPQ19JTlRFUk5BTDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfU09DX0lOVEVSTkFMO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIERSTV9YRV9SQVNfRVJSX0NPTVBfTUFYO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJhc19zdGF0dXNfdG9fZXJybm8odTMyIHN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cykge1xuQEAgLTIzNiw2ICsyNjgsMjYgQEAgc3RhdGljIHZvaWQgcmFzX3VzcF9hZXJfaW5pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGRldl9kYmcoXHUwMDI2dXNwLVx1MDAzZWRldiwgXCJVbmNvcnJlY3RhYmxlIEludGVybmFsIEVycm9ycyBkb3duZ3JhZGVkIGFuZCB1bm1hc2tlZFxcblwiKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXG4re1xuK1x0c3RydWN0IHhlX3Jhc19lcnJvcl9jbGFzcyBjb3VudGVyID0gezB9O1xuK1x0dTggZHJtX3NldmVyaXR5LCBkcm1fY29tcG9uZW50O1xuK1x0dTMyIHZhbHVlO1xuK1x0aW50IHJldDtcbitcbitcdGNvdW50ZXIuY29tbW9uLnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4rXHRjb3VudGVyLmNvbW1vbi5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4rXG4rXHRyZXQgPSBnZXRfY291bnRlcih4ZSwgXHUwMDI2Y291bnRlciwgXHUwMDI2dmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZHJtX3NldmVyaXR5ID0geGVfdG9fZHJtX3Jhc19zZXZlcml0eShzZXZlcml0eSk7XG4rXHRkcm1fY29tcG9uZW50ID0geGVfdG9fZHJtX3Jhc19jb21wb25lbnQoY29tcG9uZW50KTtcbitcbitcdHhlX2RybV9yYXNfZXZlbnQoeGUsIGRybV9jb21wb25lbnQsIGRybV9zZXZlcml0eSwgdmFsdWUpO1xuK31cbitcbiBzdGF0aWMgdTggaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoc3RydWN0IHhlX3Jhc19lcnJvcl9hcnJheSAqYXJyKVxuIHtcbiBcdHN0cnVjdCB4ZV9yYXNfY29tcHV0ZV9lcnJvciAqZXJyb3JfaW5mbyA9ICh2b2lkICopYXJyLVx1MDAzZWRldGFpbHM7XG5AQCAtMzMwLDggKzM4MiwxMCBAQCB2b2lkIHhlX3Jhc19jb3VudGVyX3RocmVzaG9sZF9jcm9zc2VkKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLFxuIFx0c3RydWN0IHhlX3Jhc190aHJlc2hvbGRfY3Jvc3NlZCAqcGVuZGluZyA9ICh2b2lkICopXHUwMDI2cmVzcG9uc2UtXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCB4ZV9yYXNfZXJyb3JfY2xhc3MgKmVycm9ycyA9IHBlbmRpbmctXHUwMDNlY291bnRlcnM7XG4gXHR1MzIgaWQsIG5jb3VudGVycyA9IHBlbmRpbmctXHUwMDNlbmNvdW50ZXJzO1xuK1x0dTggc2VudCA9IDA7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJlc3BvbnNlLVx1MDAzZWRhdGEpIFx1MDAzYyBzaXplb2YoKnBlbmRpbmcpKTtcbitcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0eGVfZGV2aWNlX2Fzc2VydF9tZW1fYWNjZXNzKHhlKTtcbiBcbiBcdGlmICghbmNvdW50ZXJzIHx8IG5jb3VudGVycyBcdTAwM2UgWEVfUkFTX05VTV9DT1VOVEVSUylcbkBAIC0zNTAsNiArNDA0LDEzIEBAIHZvaWQgeGVfcmFzX2NvdW50ZXJfdGhyZXNob2xkX2Nyb3NzZWQoc3RydWN0IHhlX2RldmljZSAqeGUsXG4gXG4gXHRcdHhlX3dhcm4oeGUsIFwiW1JBU106ICVzICVzIGRldGVjdGVkXFxuXCIsXG4gXHRcdFx0Y29tcF90b19zdHIoY29tcG9uZW50KSwgc2V2X3RvX3N0cihzZXZlcml0eSkpO1xuK1xuK1x0XHQvKiBTZW5kIGV2ZW50IG9uY2UgcGVyIGNvbXBvbmVudCAqL1xuK1x0XHRpZiAoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHNlbnQgfD0gQklUKGNvbXBvbmVudCk7XG4rXG4rXHRcdHJhc19zZW5kX2Vycm9yX2V2ZW50KHhlLCBzZXZlcml0eSwgY29tcG9uZW50KTtcbiBcdH1cbiB9XG4gXG5AQCAtNDA2LDEyICs0NjcsMTQgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdGVudW0geGVfcmFzX3JlY292ZXJ5X2FjdGlvbiBmaW5hbF9hY3Rpb247XG4gXHR1MzIgcmVtYWluaW5nID0gWEVfU1lTQ1RSTF9GTE9PRF9MSU1JVDtcbiBcdHN0cnVjdCB4ZV9yYXNfZ2V0X3NvY19lcnJvciByZXNwb25zZTtcbitcdHU4IHNlbnQgPSAwO1xuIFx0c2l6ZV90IHJsZW47XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCF4ZS1cdTAwM2VpbmZvLmhhc19zeXNjdHJsKVxuIFx0XHRyZXR1cm4gWEVfUkFTX1JFQ09WRVJZX0FDVElPTl9SRVNFVDtcbiBcbitcdEJVSUxEX0JVR19PTihCSVRTX1BFUl9UWVBFKHNlbnQpIFx1MDAzYyBYRV9SQVNfQ09NUF9NQVgpO1xuIFx0LyogRGVmYXVsdCBhY3Rpb24gKi9cbiBcdGZpbmFsX2FjdGlvbiA9IFhFX1JBU19SRUNPVkVSWV9BQ1RJT05fUkVDT1ZFUkVEO1xuIFxuQEAgLTQ1Miw2ICs1MTUsMTIgQEAgZW51bSB4ZV9yYXNfcmVjb3ZlcnlfYWN0aW9uIHhlX3Jhc19wcm9jZXNzX2Vycm9ycyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbiBcdFx0XHR4ZV9pbmZvKHhlLCBcIltSQVNdOiAlcyAlcyBkZXRlY3RlZFxcblwiLCBjb21wX3RvX3N0cihjb21wb25lbnQpLFxuIFx0XHRcdFx0c2V2X3RvX3N0cihzZXZlcml0eSkpO1xuIFxuK1x0XHRcdC8qIFNlbmQgZXZlbnQgb25jZSBwZXIgY29tcG9uZW50ICovXG4rXHRcdFx0aWYgKCEoc2VudCBcdTAwMjYgQklUKGNvbXBvbmVudCkpKSB7XG4rXHRcdFx0XHRzZW50IHw9IEJJVChjb21wb25lbnQpO1xuK1x0XHRcdFx0cmFzX3NlbmRfZXJyb3JfZXZlbnQoeGUsIHNldmVyaXR5LCBjb21wb25lbnQpO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRzd2l0Y2ggKGNvbXBvbmVudCkge1xuIFx0XHRcdGNhc2UgWEVfUkFTX0NPTVBfQ09SRV9DT01QVVRFOlxuIFx0XHRcdFx0YWN0aW9uID0gaGFuZGxlX2NvcmVfY29tcHV0ZV9lcnJvcnMoYXJyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcmFzLmggYi9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbmluZGV4IDBiZWVkZTNkZGM0ZTQuLmVlMmNhYTBlZGM2ZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2RybS9kcm1fcmFzLmhcbisrKyBiL2luY2x1ZGUvZHJtL2RybV9yYXMuaFxuQEAgLTgwLDkgKzgwLDE0IEBAIHN0cnVjdCBkcm1fZGV2aWNlO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fUkFTKVxuIGludCBkcm1fcmFzX25vZGVfcmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XG4gdm9pZCBkcm1fcmFzX25vZGVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKTtcbitpbnQgZHJtX3Jhc19ubF9lcnJvcl9ldmVudChzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlLCB1MzIgZXJyb3JfaWQsIGNvbnN0IGNoYXIgKmVycm9yX25hbWUsXG4rXHRcdFx0ICAgdTMyIHZhbHVlKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbm9kZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX3Jhc19ub2RlICpub2RlKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGRybV9yYXNfbm9kZV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUpIHsgfVxuK3N0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLFxuK1x0XHRcdFx0XHQgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxuK3sgcmV0dXJuIDA7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9yYXMuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5pbmRleCAyMThhM2VlODY4MDUyLi5lYWI4MjMxYWE4N2NiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fcmFzLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX3Jhcy5oXG5AQCAtMzgsMTMgKzM4LDI4IEBAIGVudW0ge1xuIFx0RFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYID0gKF9fRFJNX1JBU19BX0VSUk9SX0NPVU5URVJfQVRUUlNfTUFYIC0gMSlcbiB9O1xuIFxuK2VudW0ge1xuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0RFVklDRV9OQU1FID0gMSxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19OT0RFX0lELFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX05PREVfTkFNRSxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9JRCxcbitcdERSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19FUlJPUl9OQU1FLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX0VSUk9SX1ZBTFVFLFxuK1xuK1x0X19EUk1fUkFTX0FfRVJST1JfRVZFTlRfQVRUUlNfTUFYLFxuK1x0RFJNX1JBU19BX0VSUk9SX0VWRU5UX0FUVFJTX01BWCA9IChfX0RSTV9SQVNfQV9FUlJPUl9FVkVOVF9BVFRSU19NQVggLSAxKVxuK307XG4rXG4gZW51bSB7XG4gXHREUk1fUkFTX0NNRF9MSVNUX05PREVTID0gMSxcbiBcdERSTV9SQVNfQ01EX0dFVF9FUlJPUl9DT1VOVEVSLFxuIFx0RFJNX1JBU19DTURfQ0xFQVJfRVJST1JfQ09VTlRFUixcbitcdERSTV9SQVNfQ01EX0VSUk9SX0VWRU5ULFxuIFxuIFx0X19EUk1fUkFTX0NNRF9NQVgsXG4gXHREUk1fUkFTX0NNRF9NQVggPSAoX19EUk1fUkFTX0NNRF9NQVggLSAxKVxuIH07XG4gXG4rI2RlZmluZSBEUk1fUkFTX01DR1JQX0VSUk9SX1JFUE9SVFx0XCJlcnJvci1yZXBvcnRcIlxuK1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9EUk1fUkFTX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUyOjU4LjM0OTIwOTY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MDA4MjE4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUk0gUkFTIE5ldGxpbmsgRXZlbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBpbnRyb2R1Y2UgYSBOZXRsaW5rIG11bHRpY2FzdCBldmVudCBzcGVjaWZpY2FsbHkgZm9yIERSTSBSQVMgKFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIFNlcnZpY2VhYmlsaXR5KS4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgcXVpdGUgYSBmZXcgZmlsZXM6IGRvY3VtZW50YXRpb24sIHRoZSBjb3JlIERSTSBSQVMgY29kZSwgYW5kLCBub3RhYmx5LCB3aXRoaW4gdGhlIEludGVsIFhlIGdyYXBoaWNzIGRyaXZlciAoYHhlYCkuIFRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGFwcGVhcnMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KClgIHdoaWNoIHNlbmRzIHRoZSBOZXRsaW5rIG11bHRpY2FzdCBtZXNzYWdlLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBgeGVfZHJtX3Jhc19ldmVudCgpYCB3aGljaCBjYWxscyBgcmFzX3NlbmRfZXJyb3JfZXZlbnQoKWAgaW4gYHhlX3Jhcy5jYC5cblxuQSBrZXkgcXVlc3Rpb24gcG9wcyB1cCBpbW1lZGlhdGVseSDigJMgaXMgdGhlIEludGVsIFhlIGRyaXZlciBhIHZlbmRvci1zcGVjaWZpYyBHUFUgZHJpdmVyPyBZZXMsIGl0IGlzLCBnaXZlbiBpdHMgbG9jYXRpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS94ZWAuIEFuZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjcml0ZXJpYS4uLiBBaCwgdGhlIHByb21wdCBzYXlzIHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIHJlZCBmbGFnIGZvciBGdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgKmVudGlyZSogcGF0Y2ggbWlnaHQgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkgYmVjYXVzZSB0aGUgWGUgZHJpdmVyIGlzIGludm9raW5nIHRoZSBOZXRsaW5rIGV2ZW50LiBIb3dldmVyLCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIHBhcnRzIGFyZSBjb25zaWRlcmVkLiBMZXQncyBzZWUuLi4gSXMgYGRybV9yYXNfbmxfZXJyb3JfZXZlbnRgIGNhbGxhYmxlIGZyb20gb3RoZXIgbG9jYXRpb25zPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuXG5cbk9rYXksIGNoZWNraW5nIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MKClgLiBTbywgb3RoZXIgbW9kdWxlcyAqY291bGQqIGNhbGwgaXQsIHdoaWNoIGlzIHRoZSBjb25jZXJuLiBIb3dldmVyLCBjdXJyZW50bHkgaXQncyBvbmx5IGNhbGxlZCBmcm9tIHRoZSBgeGVfZHJtX3Jhc19ldmVudGAgZnVuY3Rpb24gd2l0aGluIHRoZSBYZSBkcml2ZXIuIE5vdywgdGhlIG1haW4gcXVlc3Rpb24gaXM6IGNhbiB1c2Vyc3BhY2UgZGlyZWN0bHkgdHJpZ2dlciB0aGlzIGV2ZW50PyBMb29raW5nIGF0IHRoZSBOZXRsaW5rIHNwZWMsIHRoZSBgZXJyb3ItZXZlbnRgIGlzIGRlZmluZWQgYXMgYW4gZXZlbnQsIG5vdCBhIGNvbW1hbmQuIFRoZXJlIGFyZSBgZXZlbnQ6YCBlbnRyaWVzLCBidXQgbm8gYGRvOmAgb3IgYGR1bXA6YCBlbnRyaWVzLlxuXG5UaGlzIG1lYW5zIGl0IGlzIGEga2VybmVsLXRvLXVzZXJzcGFjZSBub3RpZmljYXRpb24uIFVzZXJzcGFjZSB3b3VsZCAqc3Vic2NyaWJlKiB0byB0aGUgbXVsdGljYXN0IGdyb3VwIGFuZCByZWNlaXZlIHRoZSBldmVudCwgYnV0IGl0IGNhbid0IGRpcmVjdGx5ICpjYXVzZSogdGhlIGV2ZW50LiBJdCBjYW4gKm9ubHkqIGJlIHRyaWdnZXJlZCBieSB0aGUga2VybmVsLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjYW4gYmUgZXhwbG9pdGVkLiBcblxuU28sIHVzZXJzcGFjZSBjYW4gKnJlY2VpdmUqIHRoZSBldmVudCwgYnV0IGl0IGNhbm5vdCBzZW5kIGl0LiBUaGUgb25seSBkaXJlY3QgY2FsbGVyIG9mIHRoZSBmdW5jdGlvbiBpcyBpbmRlZWQgYHhlX2RybV9yYXNfZXZlbnRgLiBPaywgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4sIGxldCdzIHZlcmlmeSB0aGVyZSBhcmUgKm5vKiBvdGhlciBjYWxsZXJzIG9mIGBkcm1fcmFzX25sX2Vycm9yX2V2ZW50YCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIG1lYW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTU3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6NTM6MDkuMDUwMDM0NDI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjE3OTg4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3Jhc19ubF9lcnJvcl9ldmVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jPTIyMj1zdGF0aWMgaW50IGRvaXRfcmVwbHlfdmFsdWUoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTMyIG5vZGVfaWQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI1OC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jOjI1OTogKiBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KCkgLSBSZXBvcnQgYW4gZXJyb3IgZXZlbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI2MC0gKiBAbm9kZTogTm9kZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmMtMjcyLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcmFzLmM6MjczOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTI3NC1cXHRcXHRcXHQgICB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTMyMy19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9yYXMuYzozMjQ6RVhQT1JUX1NZTUJPTChkcm1fcmFzX25sX2Vycm9yX2V2ZW50KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3Jhcy5jLTMyNS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM9MTk3PXZvaWQgeGVfZHJtX3Jhc19ldmVudChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTMyIGNvbXBvbmVudCwgdTMyIHNldmVyaXR5LCB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxMi1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jOjIxMzpcXHRyZXQgPSBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KG5vZGUsIGNvbXBvbmVudCwgaW5mb1tjb21wb25lbnRdLm5hbWUsIHZhbHVlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTIxNC1cXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oPTgyPXZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSk7XFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjgzOmludCBkcm1fcmFzX25sX2Vycm9yX2V2ZW50KHN0cnVjdCBkcm1fcmFzX25vZGUgKm5vZGUsIHUzMiBlcnJvcl9pZCwgY29uc3QgY2hhciAqZXJyb3JfbmFtZSxcXG5pbmNsdWRlL2RybS9kcm1fcmFzLmgtODQtXFx0XFx0XFx0ICAgdTMyIHZhbHVlKTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaD04Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX3Jhc19ub2RlX3VucmVnaXN0ZXIoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSkgeyB9XFxuaW5jbHVkZS9kcm0vZHJtX3Jhcy5oOjg4OnN0YXRpYyBpbmxpbmUgaW50IGRybV9yYXNfbmxfZXJyb3JfZXZlbnQoc3RydWN0IGRybV9yYXNfbm9kZSAqbm9kZSwgdTMyIGVycm9yX2lkLFxcbmluY2x1ZGUvZHJtL2RybV9yYXMuaC04OS1cXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgdTMyIHZhbHVlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxMTo1MzoxMi4wNzE4Mzg0OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTgzODE3Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbjogWGUgRHJpdmVyIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgeGVfZHJtX3Jhc19ldmVudGAsIGFuZCBJJ3ZlIHRyYWNlZCBpdCBkb3duIOKAkyBpdCdzIHRoZSAqb25seSogY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24uIE5vdywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgeGVgIGRyaXZlciBpcyBJbnRlbCdzIFhlIEdQVSBkcml2ZXIsIGFuZCBhIHZlbmRvci1zcGVjaWZpYyBvbmUgYXQgdGhhdC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZmxhZ3MgdGhlc2UgZHJpdmVycyBhcyBwcm9ibGVtYXRpYyBmb3IgZnV6emluZzogdGhleSBuZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5IGFuZCBhcmUgbm90IGdvaW5nIHRvIHJ1biB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIGEgY29tbW9uIGlzc3VlIHdpdGggdGhlc2UgdHlwZXMgb2YgZHJpdmVycy5cblxuU2luY2UgYHhlX2RybV9yYXNfZXZlbnRgIGlzICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLCBhbmQgdGhlIGB4ZWAgZHJpdmVyIG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCdzIGNsZWFyOiB0aGVyZSdzIG5vIHdheSB0aGlzIG5ldyBjb2RlIGNhbiBiZSByZWFjaGVkIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAuIEkndmUgZG91YmxlLWNoZWNrZWQgbXkgYXNzdW1wdGlvbnMsIHRoZXJlJ3Mgbm8gb3RoZXIgcGF0aCB0byBgZHJtX3Jhc19ubF9lcnJvcl9ldmVudGAuIFRoZSBmYWN0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCB3aXRoaW4gdGhlIGB4ZWAgZHJpdmVyIHJlaW5mb3JjZXMgbXkgY29uY2x1c2lvbi4gVGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgcHVycG9zZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCdzIGNyaXRlcmlhLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUzOjE3LjY1NTY1OTgxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0ODM5MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlX2RybV9yYXNfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYz0xNTc9c3RhdGljIGludCByZWdpc3Rlcl9ub2RlcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTg4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmM6MTg5OiAqIHhlX2RybV9yYXNfZXZlbnQoKSAtIFJlcG9ydCBkcm0tcmFzIGVycm9yIGV2ZW50IHRvIHVzZXJzcGFjZVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmMtMTkwLSAqIEB4ZTogeGUgZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYy0xOTYtICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuYzoxOTc6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5jLTE5OC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZHJtX3Jhcy5oPTE1PWludCB4ZV9kcm1fcmFzX2luaXQoc3RydWN0IHhlX2RldmljZSAqeGUpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kcm1fcmFzLmg6MTY6dm9pZCB4ZV9kcm1fcmFzX2V2ZW50KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCB1MzIgY29tcG9uZW50LCB1MzIgc2V2ZXJpdHksIHUzMiB2YWx1ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RybV9yYXMuaC0xNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYz0yNzE9c3RhdGljIHZvaWQgcmFzX3NlbmRfZXJyb3JfZXZlbnQoc3RydWN0IHhlX2RldmljZSAqeGUsIHU4IHNldmVyaXR5LCB1OCBjb21wb25lbnQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmFzLmMtMjg3LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yYXMuYzoyODg6XFx0eGVfZHJtX3Jhc19ldmVudCh4ZSwgZHJtX2NvbXBvbmVudCwgZHJtX3NldmVyaXR5LCB2YWx1ZSk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jhcy5jLTI4OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDExOjUzOjE5Ljg4MDUwNTIyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzIxODgzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogVGhpcyBDb2RlIGlzIFVuc3VpdGFibGUgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFllcCwgdGhlIGNyaXRpY2FsIGNvZGUgY2hhbmdlIGlzIGV4Y2x1c2l2ZWx5IHdpdGhpbiBgeGVfcmFzLmNgLiBHaXZlbiB0aGF0IHRoaXMgc3BlY2lmaWNhbGx5IHRhcmdldHMgYSB2ZW5kb3Itc3BlY2lmaWMgR1BVIGRyaXZlciDigJMgaW4gdGhpcyBjYXNlLCBJbnRlbCdzIFhlIOKAkyBpdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleGNsdXNpb24gY3JpdGVyaWEuIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbDogaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZWZmZWN0aXZlbHkgZnV6ej9cblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBOZXRsaW5rIG11bHRpY2FzdCBldmVudCByZWxhdGVkIHRvIERSTSBSQVMsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgSW50ZWwgWGUgR1BVIGRyaXZlci4gVGhlIGtpY2tlciBpcyB0aGF0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgKm9ubHkqIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYHhlYCBkcml2ZXIuIE5vdywgSSBrbm93IHRoZSBsaW1pdGF0aW9ucyBvZiBteSBjdXJyZW50IHNldHVwLiBUaGUgeGUgZHJpdmVyIHJlcXVpcmVzIGFjdHVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgSSBjYW4ndCBlZmZlY3RpdmVseSByZWFjaCBhbmQgZXhlcmNpc2UgdGhpcyBuZXcgY29kZS4gQ29uc2VxdWVudGx5LCBJIHdpbGwgY29uZmlkZW50bHkgc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS4gSXQncyBzaW1wbHkgbm90IGZlYXNpYmxlIHRvIHRlc3QgdGhpcyBjb2RlIHRob3JvdWdobHkgd2l0aCBteSBjdXJyZW50IHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTYsIk91dHB1dFRva2VucyI6OTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6NTM6MjQuODUyNjk3NTA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTmV0bGluayBtdWx0aWNhc3QgZXZlbnQgZm9yIERSTSBSQVMgYW5kIGltcGxlbWVudHMgaXQgaW4gdGhlIEludGVsIFhlIEdQVSBkcml2ZXIuIFRoZSBuZXcgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGB4ZWAgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIGl0IGNhbm5vdCBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOZXRsaW5rIG11bHRpY2FzdCBldmVudCBmb3IgRFJNIFJBUyBhbmQgaW1wbGVtZW50cyBpdCBpbiB0aGUgSW50ZWwgWGUgR1BVIGRyaXZlci4gVGhlIG5ldyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHZpYSB0aGUgYHhlYCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTE6NTM6MjQuODUyNzM1MTk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl7j6c[1] Phase: Running StartedAt: 2026-08-10 11:53:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7j6c[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 11:53:36 +0000 UTC FinishedAt: 2026-08-10 11:53:42 +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,}