Name: series-workflowl7q9v Phase: Failed StartedAt: 2026-07-26 17:21:05 +0000 UTC FinishedAt: 2026-07-26 17:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7q9v[0] Phase: Succeeded StartedAt: 2026-07-26 17:21:05 +0000 UTC FinishedAt: 2026-07-26 17:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7q9v[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 17:21:05 +0000 UTC FinishedAt: 2026-07-26 17:34:24 +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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBXaUZpL0JsdWV0b290aCBjb2V4aXN0ZW5jZSBhbmQgbW9kaWZpZXMgU0RJTy1zcGVjaWZpYyBUWC9SWCBoYW5kbGluZy4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGNvbmZpbmVkIHRvIHRoZSBTRElPIGludGVyZmFjZSAoc2Rpby5jKSBvciBleHBsaWNpdGx5IGd1YXJkZWQgYnkgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIHdoaWNoIGNoZWNrcyBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHVzZWQgYnkgc3l6a2FsbGVyIGRvIG5vdCBlbXVsYXRlIHBoeXNpY2FsIFNESU8gV2lGaSBjYXJkcywgdGhpcyBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUwODliN2Q1OWFiOWQ5M2VhNTFhNzE0MmYyZTQ5MWUwYzBjZjUxNmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXG5pbmRleCAzN2MzMzZkZWY0MTkxNS4uMzE0YjJhMzY4YThmMTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmNcbkBAIC0xNDQzLDYgJiM0MzsxNDQzLDE5MSBAQCBzdGF0aWMgdm9pZCBydHdfY29leF9zZXRfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSwgdTggcGhhc2UpXG4gI2RlZmluZSBjYXNlX0FMR08oc3JjKSBcXFxuIFx0Y2FzZSBDT0VYX0FMR09fIyNzcmM6IHJldHVybiAjc3JjXG4gXG4mIzQzOy8qIDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UgYW50ZW5uYSBoYW5kbGluZy4gT24gQlQtZGlzYWJsZWQgYm9hcmRzIHRoZVxuJiM0MzsgKiBzY2FuL2F1dGggd2luZG93IHN0aWxsIHJvdXRlcyB0aHJvdWdoIHRoZSBQVEEgbXV4OyB0aGVzZSBoZWxwZXJzIGZvcmNlIHRoZVxuJiM0MzsgKiB2ZW5kb3Itc2hhcGVkIFdpRmktb3duZWQgYW50ZW5uYSBwYXRoIHNvIGRpcmVjdGVkIG1hbmFnZW1lbnQgVFggcmVhY2hlcyBhaXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQlRfQ09FWF9DVFJMXHRcdDB4MDAzOVxuJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0NGR1x0XHQweDA5MzBcbiYjNDM7I2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkcxXHRcdDB4MDk0NFxuJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0JVRlx0XHQweDA5NzRcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFXHQweDE4MDAxMDFiXG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYW50X2lzX2F1eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKHJ0d2Rldi1cdTAwM2VlZnVzZS5idF9zZXR0aW5nIFx1MDAyNiBCSVQoNikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHJ0d2Rldi1cdTAwM2Vjb2V4LnN0YXQuYnRfZGlzYWJsZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgcnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0d19jb2V4Xzg3MjNic19hbnRfaXNfYXV4KHJ0d2RldikgPyAweDgwIDogMHgyMDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdyaXRlIEJCX1NFTF9CVEcsIHJldHJ5aW5nIG9uY2Ugd2l0aCBTWVNfRlVOQyBCQiByZXNldCBpZiB0aGUgZmlyc3RcbiYjNDM7ICogd3JpdGUgZG9lcyBub3Qgc3RpY2sgKFJGL0JCIGNsb2NrIG1heSBoYXZlIGJlZW4gZ2F0ZWQpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfd3JpdGVfYmJfc2VsX2J0ZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHR1OCBzeXNfZnVuY19iZWZvcmU7XG4mIzQzO1x0dTMyIHJlYWRiYWNrO1xuJiM0MztcbiYjNDM7XHRzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pO1xuJiM0MztcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcbiYjNDM7XHRcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XG4mIzQzO1x0cmVhZGJhY2sgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX0JCX1NFTF9CVEdfODcyM0IpO1xuJiM0MztcdGlmIChyZWFkYmFjayA9PSB2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiByZWFkYmFjaztcbiYjNDM7XG4mIzQzO1x0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4mIzQzO1x0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQiwgdmFsdWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnR3X3JlYWQzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdFx0cnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChydHdkZXYpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgaGlnaClcbiYjNDM7e1xuJiM0MztcdGlmICghcnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChoaWdoKSB7XG4mIzQzO1x0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CVF9DT0VYX1RBQkxFX0gsXG4mIzQzO1x0XHRcdCAgICBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cnR3X2NvZXhfc2V0X3dsX3ByaV9tYXNrKHJ0d2RldiwgQ09FWF9XTFBSSV9UWF9DQ0ssIGZhbHNlKTtcbiYjNDM7XHRcdHJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfUlhfQ0NLLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGtlZXBfcHRhX293bmVyKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGJlZm9yZSwgYWZ0ZXI7XG4mIzQzO1xuJiM0MztcdGJlZm9yZSA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfUEFEX0NUUkwxKTtcbiYjNDM7XHRhZnRlciA9IGJlZm9yZSBcdTAwMjYgfihCSVRfTE5BT05fV0xCVF9TRUwgfCBCSVRfU1dfRFBEVF9TRUxfREFUQSk7XG4mIzQzO1x0aWYgKGtlZXBfcHRhX293bmVyKVxuJiM0MztcdFx0YWZ0ZXIgfD0gQklUX1BBUEVfV0xCVF9TRUw7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YWZ0ZXIgXHUwMDI2PSB+QklUX1BBUEVfV0xCVF9TRUw7XG4mIzQzO1x0aWYgKGFmdGVyICE9IGJlZm9yZSlcbiYjNDM7XHRcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1BBRF9DVFJMMSwgYWZ0ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19yZWFkOChydHdkZXYsIFJFR19HTlRfQlQpID09IDB4MDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19CVF9DT0VYX0VOSF9JTlRSX0NUUkwpID09IDB4MGMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ0d19md19zZXRfZ250X2J0KHJ0d2RldiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYW50X3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YW50X3RhcmdldCA9IHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcbiYjNDM7XHRydHdfY29leF9zZXRfYW50X3N3aXRjaChydHdkZXYsIENPRVhfU1dJVENIX0NUUkxfQllfUFRBLFxuJiM0MztcdFx0XHRcdENPRVhfU1dJVENIX1RPX05PQ0FSRSk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX3dyaXRlX2JiX3NlbF9idGcocnR3ZGV2LCBhbnRfdGFyZ2V0KTtcbiYjNDM7XHRydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChydHdkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfYW50X2J1ZmZlcihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTggc3lzX2Z1bmNfYmVmb3JlO1xuJiM0MztcbiYjNDM7XHRzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pO1xuJiM0MztcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcbiYjNDM7XHRcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfODcyM0JTX0JUX0NPRVhfQ1RSTCwgQklUKDMpLCAweDEpO1xuJiM0MztcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfODcyM0JTX0JCX0FOVF9CVUYsIDB4ZmYpO1xuJiM0MztcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR184NzIzQlNfQkJfQU5UX0NGRzEsIDB4MywgMHgzKTtcbiYjNDM7XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHLCAweDc3KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJ0d2Rldi1cdTAwM2Vjb2V4LmRtLmN1cl90YWJsZSA9IDI7XG4mIzQzO1x0cnR3X2NvZXhfc2V0X3RhYmxlKHJ0d2RldiwgdHJ1ZSwgMHg1YTVhNWE1YSwgMHg1YTVhNWE1YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5vbi1jb25uZWN0ZWQgc2Nhbi9hdXRoIHdvcmthcm91bmQ6IFBTLVRETUEgdHlwZSA4IG9mZiwgUFRBIGFudGVubmEgcGF0aCxcbiYjNDM7ICogY29leCB0YWJsZSB0eXBlIDIgKG1hdGNoZXMgdGhlIHZlbmRvciBub24tY29ubmVjdGVkIGFyYml0cmF0aW9uKS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19jb2V4X2RtICpjb2V4X2RtID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNvZXguZG07XG4mIzQzO1x0c3RydWN0IHJ0d19jb2V4X3N0YXQgKmNvZXhfc3RhdCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2Vjb2V4LnN0YXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjb2V4X2RtLVx1MDAzZWN1cl9wc190ZG1hX29uID0gZmFsc2U7XG4mIzQzO1x0Y29leF9kbS1cdTAwM2VjdXJfcHNfdGRtYSA9IDg7XG4mIzQzO1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMF0gPSAweDA4O1xuJiM0MztcdGNvZXhfZG0tXHUwMDNlcHNfdGRtYV9wYXJhWzFdID0gMHgwMDtcbiYjNDM7XHRjb2V4X2RtLVx1MDAzZXBzX3RkbWFfcGFyYVsyXSA9IDB4MDA7XG4mIzQzO1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbM10gPSAweDAwO1xuJiM0MztcdGNvZXhfZG0tXHUwMDNlcHNfdGRtYV9wYXJhWzRdID0gMHgwMDtcbiYjNDM7XG4mIzQzO1x0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcbiYjNDM7XHRydHdfY29leF9zZXRfYW50X3BhdGgocnR3ZGV2LCB0cnVlLCBDT0VYX1NFVF9BTlRfMkcpO1xuJiM0MztcdHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHJ0d2Rldik7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUocnR3ZGV2KTtcbiYjNDM7XHRpZiAoY29leF9zdGF0LVx1MDAzZWJ0X2Rpc2FibGVkKVxuJiM0MztcdFx0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX3JlYXNzZXJ0X3B0YV9hbnQocnR3ZGV2KTtcbiYjNDM7XHRydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChydHdkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXBsYXllZCBpbW1lZGlhdGVseSBiZWZvcmUgc3RhcnRfY2xudF9qb2luKCkvYXV0aDogQlRfSU5GTyAmIzQzOyBQUy1URE1BIHR5cGUgOFxuJiM0MzsgKiB0aGVuIHRoZSBmb3JjZWQgV2lGaSBQVEEgYW50ZW5uYSBwYXRoLCBzbyB0aGUgYXV0aCB3aW5kb3cgaXMgY2xlYW4uXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cnR3ZGV2LVx1MDAzZW11dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cnR3X2Z3X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTtcbiYjNDM7XHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbiYjNDM7XHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbiYjNDM7XHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbiYjNDM7XHRydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhydHdkZXYpO1xuJiM0MztcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IGNoYXIgKnJ0d19jb2V4X2dldF9hbGdvX3N0cmluZyh1OCBhbGdvKVxuIHtcbiBcdHN3aXRjaCAoYWxnbykge1xuQEAgLTI3NzAsNyAmIzQzOzI5NTUsNyBAQCB2b2lkIHJ0d19jb2V4X3Bvd2VyX29uX3NldHRpbmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdGNvZXgtXHUwMDNlc3RvcF9kbSA9IHRydWU7XG4gXHRjb2V4LVx1MDAzZXdsX3JmX29mZiA9IGZhbHNlO1xuIFxuLVx0LyogZW5hYmxlIEJCLCB3ZSBjYW4gd3JpdGUgMHg5NDggKi9cbiYjNDM7XHQvKiBlbmFibGUgQkIsIHNvIEJCX1NFTF9CVEcgaXMgd3JpdGFibGUgKi9cbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLFxuIFx0XHQgICAgICAgQklUX0ZFTl9CQl9HTEJfUlNUIHwgQklUX0ZFTl9CQl9SU1RCKTtcbiBcbkBAIC0yODc3LDYgJiM0MzszMDYyLDMzIEBAIHZvaWQgcnR3X2NvZXhfc2Nhbl9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcbiBcdGNvZXgtXHUwMDNlZnJlZXplID0gZmFsc2U7XG4gXHRydHdfY29leF93cml0ZV9zY2JkKHJ0d2RldiwgQ09FWF9TQ0JEX0FDVElWRSB8IENPRVhfU0NCRF9PTk9GRiwgdHJ1ZSk7XG4gXG4mIzQzO1x0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IGtlZXAgdGhlIHNjYW4vYXV0aCBQVEEgYW50ZW5uYSBzdGF0ZSB0aGVcbiYjNDM7XHQgKiB2ZW5kb3IgdXNlcyBhbmQgc2tpcCB0aGUgZ2VuZXJpYyBjb2V4IHJ1bi4gQXQgc2NhbiBzdGFydCAoZmlybXdhcmVcbiYjNDM7XHQgKiBoYXMgYmVlbiB1cCBsb25nIGVub3VnaCBmb3Igc3RhYmxlIFJYIERNQSkgcmVwbGF5IHRoZSB2ZW5kb3IgQlRfTVAgL1xuJiM0MztcdCAqIEJUX0lORk8gcXVlcmllcywgdGhlbiByZS1lc3RhYmxpc2ggdGhlIHNjYW4tcGF0aCBQVEEgc2V0dXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKSB7XG4mIzQzO1x0XHRpZiAodHlwZSA9PSBDT0VYX1NDQU5fU1RBUlRfMkcgfHwgdHlwZSA9PSBDT0VYX1NDQU5fU1RBUlQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0d19jb2V4X2luZm9fcmVxIHJlcSA9IHt9O1xuJiM0MztcbiYjNDM7XHRcdFx0Y29leF9zdGF0LVx1MDAzZWNudF93bFtDT0VYX0NOVF9XTF9TQ0FOQVBdID0gMDtcbiYjNDM7XHRcdFx0Y29leF9zdGF0LVx1MDAzZXdsX2hpX3ByaV90YXNrMiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXEuc2VxID0gMHgwZTtcbiYjNDM7XHRcdFx0cmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1NVUFBfVkVSO1xuJiM0MztcdFx0XHRydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsIFx1MDAyNnJlcSk7XG4mIzQzO1x0XHRcdHJlcS5zZXEgPSAweDBmO1xuJiM0MztcdFx0XHRyZXEub3BfY29kZSA9IEJUX01QX0lORk9fT1BfUEFUQ0hfVkVSO1xuJiM0MztcdFx0XHRydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsIFx1MDAyNnJlcSk7XG4mIzQzO1x0XHRcdHJ0d19md19xdWVyeV9idF9pbmZvKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdFx0XHRydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHJ0d2Rldik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRjb2V4X3N0YXQtXHUwMDNld2xfaGlfcHJpX3Rhc2syID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh0eXBlID09IENPRVhfU0NBTl9TVEFSVF81Rykge1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19DT0VYLFxuIFx0XHRcdFwmIzM0O1tCVENvZXhdLCBTQ0FOIFNUQVJUIG5vdGlmeSAoNUcpXFxuXCYjMzQ7KTtcbkBAIC0yOTM4LDYgJiM0MzszMTUwLDE3IEBAIHZvaWQgcnR3X2NvZXhfY29ubmVjdF9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcbiBcdGlmIChjb2V4LVx1MDAzZW1hbnVhbF9jb250cm9sIHx8IGNvZXgtXHUwMDNlc3RvcF9kbSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIDg3MjNCUyBTRElPIEJULWRpc2FibGVkOiB0aGUgdmVuZG9yIENvbm5lY3ROb3RpZnkoKSBlYXJseS1yZXR1cm5zXG4mIzQzO1x0ICogd2l0aG91dCBzZW5kaW5nIEgyQ3M7IHNjYW5fd29ya2Fyb3VuZCBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZSBQVEFcbiYjNDM7XHQgKiBwYXRoIC8gY29leCB0YWJsZSAvIFBTLVRETUEuIEtlZXAgb25seSB0aGUgcmVnaXN0ZXItbGV2ZWwgUFRBXG4mIzQzO1x0ICogcmVhc3NlcnRpb24gYXQgYXNzb2NpYXRlLXN0YXJ0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkge1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpXG4mIzQzO1x0XHRcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTtcbiBcbiBcdGlmICh0eXBlID09IENPRVhfQVNTT0NJQVRFXzVHX1NUQVJUKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxuaW5kZXggYzM5OGJlODM5MWY3YjAuLmM1OGFlMGE1MGIzMGIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oXG5AQCAtNDMwLDQgJiM0Mzs0MzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2NvZXhfYWN0aXZlX3F1ZXJ5X2J0X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cnR3X2NvZXhfcXVlcnlfYnRfaW5mbyhydHdkZXYpO1xuIH1cbiBcbiYjNDM7dm9pZCBydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XG4mIzQzO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xuaW5kZXggOTQ1ZmVkY2QzNzViNjIuLjdjMTcwODZjYWMzMmM0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbkBAIC03ODYsNiAmIzQzOzc4NiwxNyBAQCB2b2lkIHJ0d19md19tZWRpYV9zdGF0dXNfcmVwb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IG1hY19pZCwgYm9vbCBjb25uZWN0KVxuIFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbiB9XG4gXG4mIzQzOy8qIDg3MjNCUyBTRElPOiBzZXQgdGhlIGZpcm13YXJlIEdOVF9CVCBzdGF0ZSAoMCA9IFdpRmkgb3ducyB0aGUgYW50ZW5uYSkuICovXG4mIzQzO3ZvaWQgcnR3X2Z3X3NldF9nbnRfYnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHR1OCBoMmNfcGt0W0gyQ19QS1RfU0laRV0gPSB7MH07XG4mIzQzO1xuJiM0MztcdFNFVF9IMkNfQ01EX0lEX0NMQVNTKGgyY19wa3QsIEgyQ19DTURfR05UX0JUKTtcbiYjNDM7XHRTRVRfR05UX0JUX1NUQVRFKGgyY19wa3QsIHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJ0d19md191cGRhdGVfd2xfcGh5X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3RyYWZmaWNfc3RhdHMgKnN0YXRzID0gXHUwMDI2cnR3ZGV2LVx1MDAzZXN0YXRzO1xuQEAgLTE0NjYsMTAgJiM0MzsxNDc3LDE0IEBAIHZvaWQgcnR3X2FkZF9yc3ZkX3BhZ2Vfc3RhKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRydHdfYWRkX3JzdmRfcGFnZShydHdkZXYsIHJ0d3ZpZiwgUlNWRF9MUFNfUEdfSU5GTywgdHJ1ZSk7XG4gfVxuIFxuJiM0MzsvKiBSRUdfRFdCQ04xX0NUUkwgYml0IDIwIChTV19CQ05fU0VMIGZvciBwb3J0IDApLCByZWxhdGl2ZSB0byBieXRlICYjNDM7MiAqL1xuJiM0MzsjZGVmaW5lIEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDBcdCgyMCAtIDE2KVxuJiM0MztcbiBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLFxuIFx0XHRcdFx0dTggKmJ1ZiwgdTMyIHNpemUpXG4ge1xuLVx0dTggYmNrcFszXTtcbiYjNDM7XHRjb25zdCBib29sIGlzXzg3MjNic19zZGlvID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuJiM0MztcdHU4IGJja3BbNF07XG4gXHR1OCB2YWw7XG4gXHR1MTYgcnN2ZF9wZ19oZWFkO1xuIFx0dTMyIGJjbl92YWxpZF9hZGRyO1xuQEAgLTE0OTksMTMgJiM0MzsxNTE0LDI4IEBAIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXG4gXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuIFx0XHQgICAoYmNrcFsyXSBcdTAwMjYgfkJJVF9FTl9CQ05fRlVOQ1RJT04pIHwgQklUX0RJU19UU0ZfVURUKTtcbiBcbi1cdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSkge1xuJiM0MztcdC8qIENsZWFyIEJJVF9FTl9CQ05RX0RMIHNvIHRoZSBjaGlwIGRvZXMgbm90IHRyZWF0IHRoZSByZXNlcnZlZC1wYWdlXG4mIzQzO1x0ICogdXBsb2FkIGFzIGEgcmVhbCBiZWFjb247IG90aGVyd2lzZSBCSVRfQkNOX1ZBTElEIG5ldmVyIGFzc2VydHMuIFRoZVxuJiM0MztcdCAqIHZlbmRvciBydGw4NzIzYnMgZHJpdmVyIGRvZXMgdGhpcyB1bmNvbmRpdGlvbmFsbHk7IHJ0dzg4IG9ubHkgZGlkIGl0XG4mIzQzO1x0ICogZm9yIFBDSWUsIHdoaWNoIGxlZnQgODcyM0JTIFNESU8mIzM5O3MgQkNOX1ZBTElEIGhhbmRzaGFrZSBmYWlsaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSB8fCBpc184NzIzYnNfc2Rpbykge1xuIFx0XHR2YWwgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyKTtcbiBcdFx0YmNrcFsxXSA9IHZhbDtcbiBcdFx0dmFsIFx1MDAyNj0gfihCSVRfRU5fQkNOUV9ETCBcdTAwM2VcdTAwM2UgMTYpO1xuIFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgJiM0MzsgMiwgdmFsKTtcbiBcdH1cbiBcbiYjNDM7XHQvKiA4NzIzQlMgU0RJTzogcG9pbnQgdGhlIFNXIGJlYWNvbiBkb3dubG9hZCBwYXRoIGF0IHBvcnQgMCwgZWxzZVxuJiM0MztcdCAqIEJJVF9CQ05fVkFMSUQgaXMgbmV2ZXIgYXNzZXJ0ZWQgYWZ0ZXIgdGhlIFNESU8gdXBsb2FkIGNvbXBsZXRlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfODcyM2JzX3NkaW8pIHtcbiYjNDM7XHRcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCAmIzQzOyAyKTtcbiYjNDM7XHRcdGJja3BbM10gPSB2YWw7XG4mIzQzO1x0XHR2YWwgXHUwMDI2PSB+QklUKEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDApO1xuJiM0MztcdFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCAmIzQzOyAyLCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBydHdfaGNpX3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHJ0d2RldiwgYnVmLCBzaXplKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cnR3X2VycihydHdkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBkYXRhIHRvIHJzdmQgcGFnZVxcblwmIzM0Oyk7XG5AQCAtMTUyNiwxMSAmIzQzOzE1NTYsMTMgQEAgaW50IHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgcGdfYWRkcixcbiBcdH1cbiBcbiByZXN0b3JlOlxuJiM0MztcdGlmIChpc184NzIzYnNfc2RpbylcbiYjNDM7XHRcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgJiM0MzsgMiwgYmNrcFszXSk7XG4gXHRyc3ZkX3BnX2hlYWQgPSBydHdkZXYtXHUwMDNlZmlmby5yc3ZkX2JvdW5kYXJ5O1xuIFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfRklGT1BBR0VfQ1RSTF8yLFxuIFx0XHQgICAgcnN2ZF9wZ19oZWFkIHwgQklUX0JDTl9WQUxJRF9WMSk7XG4gXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLCBiY2twWzJdKTtcbi1cdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSlcbiYjNDM7XHRpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pXG4gXHRcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyLCBiY2twWzFdKTtcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQ1IgJiM0MzsgMSwgYmNrcFswXSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5pbmRleCA0OGFkOWNlYWI2ZWExMi4uZjVlZDY1YzQ2MzUwZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuQEAgLTU3Miw2ICYjNDM7NTcyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19oMmNfcGt0X3NldF9oZWFkZXIodTggKmgyY19wa3QsIHU4IHN1Yl9pZClcbiAjZGVmaW5lIEgyQ19DTURfUVVFUllfQlRfTVBfSU5GT1x0MHg2N1xuICNkZWZpbmUgSDJDX0NNRF9CVF9XSUZJX0NPTlRST0xcdFx0MHg2OVxuICNkZWZpbmUgSDJDX0NNRF9XSUZJX0NBTElCUkFUSU9OXHQweDZkXG4mIzQzOyNkZWZpbmUgSDJDX0NNRF9HTlRfQlRcdFx0XHQweDZlXG4gI2RlZmluZSBIMkNfQ01EX1FVRVJZX0JUX0hJRF9JTkZPXHQweDczXG4gXG4gI2RlZmluZSBIMkNfQ01EX0tFRVBfQUxJVkVcdFx0MHgwM1xuQEAgLTY4NCw2ICYjNDM7Njg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19oMmNfcGt0X3NldF9oZWFkZXIodTggKmgyY19wa3QsIHU4IHN1Yl9pZClcbiBcdGxlMzJwX3JlcGxhY2VfYml0cygoX19sZTMyICopKGgyY19wa3QpICYjNDM7IDB4MDEsIHZhbHVlLCBHRU5NQVNLKDMxLCAyNCkpXG4gI2RlZmluZSBTRVRfUVVFUllfQlRfSU5GTyhoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gXHRsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuJiM0MzsjZGVmaW5lIFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7XHRsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fTElOSyhoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgJiM0MzsgMHgwMCwgdmFsdWUsIEdFTk1BU0soMTUsIDgpKVxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fQ0hOTChoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuQEAgLTg0OSw2ICYjNDM7ODUyLDcgQEAgdm9pZCBydHdfZndfc2VuZF9yc3NpX2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHJ0d19zdGFfaW5mbyAqc2kpO1xuIHZvaWQgcnR3X2Z3X3NlbmRfcmFfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSxcbiBcdFx0XHQgYm9vbCByZXNldF9yYV9tYXNrKTtcbiB2b2lkIHJ0d19md19tZWRpYV9zdGF0dXNfcmVwb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IG1hY19pZCwgYm9vbCBjb25uKTtcbiYjNDM7dm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSk7XG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuIHZvaWQgcnR3X2Z3X2JlYWNvbl9maWx0ZXJfY29uZmlnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgY29ubmVjdCxcbiBcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmNcbmluZGV4IDc2NmYyMmQzMTA3OWVlLi45MTAxNGE4ZTI0MmIzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jXG5AQCAtMTUsNiAmIzQzOzE1LDQ2MyBAQFxuICNpbmNsdWRlIFwmIzM0O3dvdy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2FyLmhcJiMzNDtcbiBcbiYjNDM7LyogODcyM0JTIFNESU86IHJlY29yZCBhIGJlYWNvbi9wcm9iZS1yZXNwIHNlZW4gZnJvbSB0aGUgdGFyZ2V0IEJTU0lEIGR1cmluZ1xuJiM0MzsgKiB0aGUgcHJlLWF1dGggd2luZG93IHNvIHRoZSBqb2luIHNlcXVlbmNlIChtZ2RfcHJlcGFyZV90eCkgY2FuIHdhaXQgZm9yIGl0LFxuJiM0MzsgKiBtaXJyb3JpbmcgdGhlIHZlbmRvciBzdGFydF9jbG50X2pvaW4oKS4gQ2FsbGVkIGZyb20gdGhlIFNESU8gUlggcGF0aC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbixcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdF9fbGUxNiBmYyA9IGhkci1cdTAwM2VmcmFtZV9jb250cm9sO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChSVFdfRkxBR19TQ0FOTklORywgcnR3ZGV2LVx1MDAzZWZsYWdzKSB8fFxuJiM0MztcdCAgICBwa3Rfc3RhdC1cdTAwM2VjcmNfZXJyIHx8IHBrdF9zdGF0LVx1MDAzZWljdl9lcnIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihmYykgXHUwMDI2XHUwMDI2ICFpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlmIChzeW5jLVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgZXRoZXJfYWRkcl9lcXVhbChoZHItXHUwMDNlYWRkcjMsIHN5bmMtXHUwMDNlYnNzaWQpKSB7XG4mIzQzO1x0XHRzeW5jLVx1MDAzZXNlZW4gPSB0cnVlO1xuJiM0MztcdFx0c3luYy1cdTAwM2VzZWVuX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2c3luYy1cdTAwM2V3YWl0KTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHJ0dzg3MjNic19hdXRoX3N5bmNfcngpO1xuJiM0MztcbiYjNDM7LyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfSk9JTl9SRVRSWV9MSU1JVFx0XHQweDMwXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX0ZBTExCQUNLX01TXHQxMjBcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUlOX01TXHRcdDgwXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX01BWF9NU1x0XHQxNjBcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19TSE9SVF9TTE9UX1RJTUVcdFx0OVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19MT05HX1NMT1RfVElNRVx0XHQyMFxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzFNXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMk1cdFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81XzVNXHRcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMTFNXHRcdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNk1cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl85TVx0XHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzEyTVx0XHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzE4TVx0XHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzI0TVx0XHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzM2TVx0XHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzQ4TVx0XHRcdEJJVCgxMClcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81NE1cdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIFxcXG4mIzQzO1x0KFJUVzg3MjNCU19SUlNSXzFNIHwgUlRXODcyM0JTX1JSU1JfMk0gfCBcXFxuJiM0MztcdCBSVFc4NzIzQlNfUlJTUl81XzVNIHwgUlRXODcyM0JTX1JSU1JfMTFNKVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJHX0ZPUkNFXHRcdFx0UlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMkdfQUxMT1cgXFxcbiYjNDM7XHQoUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIHwgUlRXODcyM0JTX1JSU1JfNk0gfCBcXFxuJiM0MztcdCBSVFc4NzIzQlNfUlJTUl8xMk0gfCBSVFc4NzIzQlNfUlJTUl8yNE0pXG4mIzQzO1xuJiM0MzsvKiBLZWVwIHRoZSBSQ1IgYXQgdGhlIHZlbmRvciB0YXJnZXQtb25seSBzdGF0ZSAoQU1GICYjNDM7IENCU1NJRCkgYWNyb3NzIHRoZSB3aG9sZVxuJiM0MzsgKiBjb25uZWN0IHdpbmRvdywgbWF0Y2hpbmcgdGhlIHZlbmRvciBTVEEgcGF0aC4gYWNjZXB0X2FsbCBpcyBrZXB0IG9ubHkgZm9yIHRoZVxuJiM0MzsgKiBjYWxsZXImIzM5O3MgaW50ZW50OyBib3RoIHBhdGhzIGNvbnZlcmdlIHRoZSBmaWx0ZXIgdG8gdGFyZ2V0LW9ubHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBhY2NlcHRfYWxsKVxuJiM0Mzt7XG4mIzQzO1x0cnR3ZGV2LVx1MDAzZWhhbC5yY3IgfD0gQklUX0FNRiB8IEJJVF9DQlNTSURfREFUQSB8IEJJVF9DQlNTSURfQkNOO1xuJiM0MztcdHJ0d2Rldi1cdTAwM2VoYWwucmNyIFx1MDAyNj0gfkJJVF9BQVA7XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUkNSLCBydHdkZXYtXHUwMDNlaGFsLnJjcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7XG4mIzQzO1xuJiM0MztcdHNlYyB8PSBSVFdfU0VDX0NIS19LRVlJRCB8IFJUV19TRUNfVFhfREVDX0VOIHwgUlRXX1NFQ19SWF9ERUNfRU47XG4mIzQzO1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2goc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdFx0Ym9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc2VjID0gcnR3X3JlYWQxNihydHdkZXYsIFJUV19TRUNfQ09ORklHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSlcbiYjNDM7XHRcdHNlYyB8PSBSVFdfU0VDX1RYX0JDX1VTRV9ESyB8IFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8XG4mIzQzO1x0XHQgICAgICAgUlRXX1NFQ19SWF9VTklfVVNFX0RLO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNlYyBcdTAwMjY9IH4oUlRXX1NFQ19UWF9VTklfVVNFX0RLIHwgUlRXX1NFQ19SWF9VTklfVVNFX0RLIHxcbiYjNDM7XHRcdFx0IFJUV19TRUNfVFhfQkNfVVNFX0RLIHwgUlRXX1NFQ19SWF9CQ19VU0VfREspO1xuJiM0MztcdHJ0d193cml0ZTE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcsIHNlYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19lbmFibGVfdHNmX3VwZGF0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cnR3X3dyaXRlOF9jbHIocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIEJJVF9ESVNfVFNGX1VEVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgc2hvcnRfcHJlYW1ibGUpXG4mIzQzO3tcbiYjNDM7XHR1OCB2YWwgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfUlJTUiAmIzQzOyAyKSBcdTAwMjYgflJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQ7XG4mIzQzO1xuJiM0MztcdGlmIChzaG9ydF9wcmVhbWJsZSlcbiYjNDM7XHRcdHZhbCB8PSBSVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUO1xuJiM0MztcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfUlJTUiAmIzQzOyAyLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIHNob3J0X3Nsb3QpXG4mIzQzO3tcbiYjNDM7XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1NMT1QsXG4mIzQzO1x0XHQgICBzaG9ydF9zbG90ID8gUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRSA6XG4mIzQzO1x0XHRcdFx0UlRXODcyM0JTX0xPTkdfU0xPVF9USU1FKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUodTggcmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocmF0ZSBcdTAwMjYgMHg3Zikge1xuJiM0MztcdGNhc2UgMjogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMU07XG4mIzQzO1x0Y2FzZSA0OiAgIHJldHVybiBSVFc4NzIzQlNfUlJTUl8yTTtcbiYjNDM7XHRjYXNlIDExOiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzVfNU07XG4mIzQzO1x0Y2FzZSAyMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMU07XG4mIzQzO1x0Y2FzZSAxMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl82TTtcbiYjNDM7XHRjYXNlIDE4OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzlNO1xuJiM0MztcdGNhc2UgMjQ6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMTJNO1xuJiM0MztcdGNhc2UgMzY6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMThNO1xuJiM0MztcdGNhc2UgNDg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMjRNO1xuJiM0MztcdGNhc2UgNzI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMzZNO1xuJiM0MztcdGNhc2UgOTY6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNDhNO1xuJiM0MztcdGNhc2UgMTA4OiByZXR1cm4gUlRXODcyM0JTX1JSU1JfNTRNO1xuJiM0MztcdGRlZmF1bHQ6ICByZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb2xsZWN0X2Jhc2ljX3JhdGVzKGNvbnN0IHU4ICppZSwgdTE2ICpiYXNpY19yYXRlcyxcbiYjNDM7XHRcdFx0XHRcdCAgYm9vbCAqdmFsaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWVbMV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MTYgcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShpZVtpICYjNDM7IDJdIFx1MDAyNiAweDgwKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyID0gcnR3ODcyM2JzX3Jyc3JfZnJvbV9pZV9yYXRlKGllW2kgJiM0MzsgMl0pO1xuJiM0MztcdFx0aWYgKCFyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdCpiYXNpY19yYXRlcyB8PSByO1xuJiM0MztcdFx0KnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlJTUiwgMHhmZmZmMSk7XG4mIzQzO1x0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IDB4ZmZmZjE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHU4ICpic3NpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcdTAwMjZ2aWYtXHUwMDNlYnNzX2NvbmY7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDtcbiYjNDM7XHRib29sIHZhbGlkID0gZmFsc2U7XG4mIzQzO1x0dTE2IGJhc2ljX3JhdGVzID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgdmlmLVx1MDAzZXR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvbmYtXHUwMDNlYnNzKSB7XG4mIzQzO1x0XHRic3MgPSBjb25mLVx1MDAzZWJzcztcbiYjNDM7XHR9IGVsc2UgaWYgKGJzc2lkIFx1MDAyNlx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xuJiM0MztcdFx0bG9va3VwX2JzcyA9IGNmZzgwMjExX2dldF9ic3MocnR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgYnNzaWQsIE5VTEwsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbiYjNDM7XHRcdGJzcyA9IGxvb2t1cF9ic3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYnNzKSB7XG4mIzQzO1x0XHRjb25zdCB1OCAqcmF0ZXMsICpleHQ7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0cmF0ZXMgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpO1xuJiM0MztcdFx0ZXh0ID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUyk7XG4mIzQzO1x0XHRydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhyYXRlcywgXHUwMDI2YmFzaWNfcmF0ZXMsIFx1MDAyNnZhbGlkKTtcbiYjNDM7XHRcdHJ0dzg3MjNic19jb2xsZWN0X2Jhc2ljX3JhdGVzKGV4dCwgXHUwMDI2YmFzaWNfcmF0ZXMsIFx1MDAyNnZhbGlkKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZhbGlkKSB7XG4mIzQzO1x0XHRiYXNpY19yYXRlcyB8PSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRTtcbiYjNDM7XHRcdGJhc2ljX3JhdGVzIFx1MDAyNj0gUlRXODcyM0JTX1JSU1JfMkdfQUxMT1c7XG4mIzQzO1x0XHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SUlNSLCBiYXNpY19yYXRlcyk7XG4mIzQzO1x0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1JSU1IgJiM0MzsgMixcbiYjNDM7XHRcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1JSU1IgJiM0MzsgMikgXHUwMDI2IDB4ZjApO1xuJiM0MztcdFx0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IGJhc2ljX3JhdGVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxvb2t1cF9ic3MpXG4mIzQzO1x0XHRjZmc4MDIxMV9wdXRfYnNzKHJ0d2Rldi1cdTAwM2Vody1cdTAwM2V3aXBoeSwgbG9va3VwX2Jzcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFByb2dyYW0gcmVzcG9uc2Ugc2xvdCB0aW1lIChhbmQsIHdoZW4gc2V0X3ByZWFtYmxlLCB0aGUgQUNLIHByZWFtYmxlKSBmcm9tXG4mIzQzOyAqIHRoZSBzZWxlY3RlZCBzY2FuIEJTUyBjYXBhYmlsaXRpZXM7IHRoZSBBUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCB5ZXQgaW5cbiYjNDM7ICogYnNzX2NvbmYgYXQgbWdkX3ByZXBhcmVfdHgoKSB0aW1lLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgdTggKmJzc2lkLCBib29sIHNldF9wcmVhbWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcdTAwMjZ2aWYtXHUwMDNlYnNzX2NvbmY7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDtcbiYjNDM7XHRib29sIHNob3J0X3ByZWFtYmxlLCBzaG9ydF9zbG90O1xuJiM0MztcdHUxNiBjYXAgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoY29uZi1cdTAwM2Vic3MpIHtcbiYjNDM7XHRcdGJzcyA9IGNvbmYtXHUwMDNlYnNzO1xuJiM0MztcdH0gZWxzZSBpZiAoYnNzaWQgXHUwMDI2XHUwMDI2IGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7XG4mIzQzO1x0XHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuJiM0MztcdFx0YnNzID0gbG9va3VwX2JzcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChic3MpIHtcbiYjNDM7XHRcdGNhcCA9IGJzcy1cdTAwM2VjYXBhYmlsaXR5O1xuJiM0MztcdH0gZWxzZSBpZiAoY29uZi1cdTAwM2Vhc3NvY19jYXBhYmlsaXR5KSB7XG4mIzQzO1x0XHRjYXAgPSBjb25mLVx1MDAzZWFzc29jX2NhcGFiaWxpdHk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNob3J0X3ByZWFtYmxlID0gY29uZi1cdTAwM2V1c2Vfc2hvcnRfcHJlYW1ibGU7XG4mIzQzO1x0XHRzaG9ydF9zbG90ID0gY29uZi1cdTAwM2V1c2Vfc2hvcnRfc2xvdDtcbiYjNDM7XHRcdGdvdG8gcHJvZ3JhbTtcbiYjNDM7XHR9XG4mIzQzO1x0c2hvcnRfcHJlYW1ibGUgPSAhIShjYXAgXHUwMDI2IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSk7XG4mIzQzO1x0c2hvcnRfc2xvdCA9ICEhKGNhcCBcdTAwMjYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSk7XG4mIzQzO1xuJiM0Mztwcm9ncmFtOlxuJiM0MztcdGlmIChzZXRfcHJlYW1ibGUpXG4mIzQzO1x0XHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTtcbiYjNDM7XHRydHc4NzIzYnNfc2V0X3Nsb3RfdGltZShydHdkZXYsIHNob3J0X3Nsb3QpO1xuJiM0MztcbiYjNDM7XHRpZiAobG9va3VwX2JzcylcbiYjNDM7XHRcdGNmZzgwMjExX3B1dF9ic3MocnR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LCBsb29rdXBfYnNzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiYjNDM7e1xuJiM0MztcdHUxNiBiZWFjb25faW50ID0gdmlmLVx1MDAzZWJzc19jb25mLmJlYWNvbl9pbnQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRfbXM7XG4mIzQzO1xuJiM0MztcdGlmICghYmVhY29uX2ludClcbiYjNDM7XHRcdHJldHVybiBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfRkFMTEJBQ0tfTVM7XG4mIzQzO1xuJiM0MztcdHdhaXRfbXMgPSBESVZfUk9VTkRfVVAoYmVhY29uX2ludCAqIDEwMjQsIDEwMDApICYjNDM7IDIwO1xuJiM0MztcdHJldHVybiBjbGFtcF90KHVuc2lnbmVkIGludCwgd2FpdF9tcywgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX01JTl9NUyxcbiYjNDM7XHRcdCAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VhdXRoX3N5bmM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KHN5bmMtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbiYjNDM7XHRzeW5jLVx1MDAzZXNlZW4gPSBmYWxzZTtcbiYjNDM7XHRzeW5jLVx1MDAzZXNlZW5fY291bnQgPSAwO1xuJiM0MztcdHN5bmMtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3N0b3Aoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRzeW5jLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHJ0dzg3MjNic19hdXRoX3N5bmNfc2VlbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCBzZWVuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRzZWVuID0gc3luYy1cdTAwM2VzZWVuO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZWVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCB3YWl0X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gd2FpdF9ldmVudF90aW1lb3V0KHN5bmMtXHUwMDNld2FpdCwgcnR3ODcyM2JzX2F1dGhfc3luY19zZWVuKHJ0d2RldiksXG4mIzQzO1x0XHRcdFx0ICBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSBcdTAwM2UgMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9wcmVwX3R4X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBpbmZvIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBpbmZvLVx1MDAzZXN1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0FVVEg7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlcGxpY2F0ZSB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIHJlZ2lzdGVyIHByb2dyYW1taW5nIHJpZ2h0IGJlZm9yZVxuJiM0MzsgKiBhdXRoLiBSZXR1cm5zIHRydWUgZm9yIGEgZnJlc2ggam9pbiAoQlNTSUQgY2hhbmdlZCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfam9pbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYnNzaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3ZpZiAqcnR3dmlmID0gKHN0cnVjdCBydHdfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuJiM0MztcdGJvb2wgZnJlc2hfam9pbjtcbiYjNDM7XHR1MTYgcmV0cnlfbGltaXQ7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZyZXNoX2pvaW4gPSAhZXRoZXJfYWRkcl9lcXVhbChydHd2aWYtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbiYjNDM7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KHJ0d3ZpZi1cdTAwM2Vic3NpZCwgYnNzaWQpO1xuJiM0MztcdHJ0d3ZpZi1cdTAwM2VhaWQgPSAwO1xuJiM0MztcdHJ0d3ZpZi1cdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTUdEX0xJTktFRDtcbiYjNDM7XHRydHdfdmlmX3BvcnRfY29uZmlnKHJ0d2RldiwgcnR3dmlmLFxuJiM0MztcdFx0XHQgICAgUE9SVF9TRVRfQlNTSUQgfCBQT1JUX1NFVF9BSUQgfCBQT1JUX1NFVF9ORVRfVFlQRSk7XG4mIzQzO1xuJiM0MztcdC8qIERvIG5vdCBuYXJyb3cgUlJTUiBvciBzd2l0Y2ggdG8gc2hvcnQtcHJlYW1ibGUgcmVzcG9uc2VzIGJlZm9yZSB0aGVcbiYjNDM7XHQgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXRcbiYjNDM7XHQgKiAoMHhmZmZmMSwgbG9uZyBwcmVhbWJsZSkuIE9ubHkgc2xvdCB0aW1lIGlzIHByb2dyYW1tZWQgZWFybHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJ0d19md19iZWFjb25fZmlsdGVyX2NvbmZpZyhydHdkZXYsIGZhbHNlLCB2aWYpO1xuJiM0MztcbiYjNDM7XHQvKiBNYXRjaCB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIFRYIHN0YXRlIChzZXRfbXNyIGRpcmVjdGx5LCBrZWVwXG4mIzQzO1x0ICogQkNOX0NUUkwgLyBCQ05RX0RMIHNldCwgcmVhc3NlcnQgVEJUVC9SRVNQX1NJRlMgZXZlcnkgam9pbikuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR19CQ05fQ1RSTCxcbiYjNDM7XHRcdCAgIEJJVF9ESVNfVFNGX1VEVCB8IEJJVF9FTl9CQ05fRlVOQ1RJT04pO1xuJiM0MztcdHJ0d193cml0ZTMyX3NldChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMLCBCSVRfRU5fQkNOUV9ETCk7XG4mIzQzO1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICYjNDM7IDEsIDB4NjQgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfVEJUVF9QUk9ISUJJVCAmIzQzOyAyLFxuJiM0MztcdFx0ICAgKHJ0d19yZWFkOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICYjNDM7IDIpIFx1MDAyNiAweGYwKSB8ICgweDY0IFx1MDAzZVx1MDAzZSA4KSk7XG4mIzQzO1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUkVTUF9TSUZTX0NDSywgMHgwODA4KTtcbiYjNDM7XHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfT0ZETSwgMHgwYTBhKTtcbiYjNDM7XG4mIzQzO1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUlhGTFRNQVAwLCAweGZmZmYpO1xuJiM0MztcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JYRkxUTUFQMiwgMHhmZmZmKTtcbiYjNDM7XHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0cmV0cnlfbGltaXQgPSAoUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVQgXHUwMDNjXHUwMDNjIDgpIHxcbiYjNDM7XHRcdCAgICAgIFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUO1xuJiM0MztcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFVFJZX0xJTUlULCByZXRyeV9saW1pdCk7XG4mIzQzO1xuJiM0MztcdHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlc2hfam9pbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIHZlbmRvciBzZW5kcyBhIGRlYXV0aCB0byB0aGUgdGFyZ2V0IGJlZm9yZSBhdXRoIHRvIGNsZWFyIHN0YWxlIEFQLXNpZGVcbiYjNDM7ICogc3RhdGU7IHN5bnRoZXNpemUgYW5kIFRYIG9uZSwgdGhlbiBsZXQgdGhlIEFQIHNldHRsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHU4ICpic3NpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sID0ge307XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHVuc2lnbmVkIGludCBmcmFtZV9sZW4sIGhlYWRyb29tO1xuJiM0MztcbiYjNDM7XHRmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICYjNDM7IHNpemVvZihtZ210LVx1MDAzZXUuZGVhdXRoKTtcbiYjNDM7XHRoZWFkcm9vbSA9IHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXR4X3BrdF9kZXNjX3N6ICYjNDM7IDg7XG4mIzQzO1xuJiM0MztcdHNrYiA9IGRldl9hbGxvY19za2IoaGVhZHJvb20gJiM0MzsgZnJhbWVfbGVuKTtcbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XG4mIzQzO1x0bWdtdCA9IHNrYl9wdXRfemVybyhza2IsIGZyYW1lX2xlbik7XG4mIzQzO1x0bWdtdC1cdTAwM2VmcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfFxuJiM0MztcdFx0XHRcdFx0ICBJRUVFODAyMTFfU1RZUEVfREVBVVRIKTtcbiYjNDM7XHRtZW1jcHkobWdtdC1cdTAwM2VkYSwgYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRtZW1jcHkobWdtdC1cdTAwM2VzYSwgdmlmLVx1MDAzZWFkZHIsIEVUSF9BTEVOKTtcbiYjNDM7XHRtZW1jcHkobWdtdC1cdTAwM2Vic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRtZ210LVx1MDAzZXUuZGVhdXRoLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYoV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpO1xuJiM0MztcbiYjNDM7XHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xuJiM0MztcbiYjNDM7XHRydHdfdHgocnR3ZGV2LCBcdTAwMjZjb250cm9sLCBza2IpO1xuJiM0MztcdG1zbGVlcCgxMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPcmNoZXN0cmF0ZSB0aGUgcHJlLWF1dGggam9pbjogcHJvZ3JhbSB0aGUgdmVuZG9yIGpvaW4gc3RhdGUsIHNlbmQgdGhlXG4mIzQzOyAqIHByZS1hdXRoIGRlYXV0aCwgd2FpdCBmb3IgYSBiZWFjb24gZnJvbSB0aGUgdGFyZ2V0LCB0aGVuIHJlcGxheSB0aGVcbiYjNDM7ICogcHJlLWF1dGggY29leCBIMkNzIC0gb25jZSBwZXIgZnJlc2ggQlNTSUQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfdmlmICpydHd2aWY7XG4mIzQzO1x0Y29uc3QgdTggKmJzc2lkID0gTlVMTDtcbiYjNDM7XHRib29sIGZyZXNoX2pvaW47XG4mIzQzO1xuJiM0MztcdGlmICghcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgocnR3ZGV2LCBpbmZvKSB8fCAhdmlmIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRydHd2aWYgPSAoc3RydWN0IHJ0d192aWYgKil2aWYtXHUwMDNlZHJ2X3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cdTAwM2VjZmcuYXBfYWRkcikpXG4mIzQzO1x0XHRic3NpZCA9IHZpZi1cdTAwM2VjZmcuYXBfYWRkcjtcbiYjNDM7XHRlbHNlIGlmICh2aWYtXHUwMDNlYnNzX2NvbmYuYnNzaWQgXHUwMDI2XHUwMDI2ICFpc196ZXJvX2V0aGVyX2FkZHIodmlmLVx1MDAzZWJzc19jb25mLmJzc2lkKSlcbiYjNDM7XHRcdGJzc2lkID0gdmlmLVx1MDAzZWJzc19jb25mLmJzc2lkO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJzc2lkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmcmVzaF9qb2luID0gcnR3ODcyM2JzX21nZF9wcmVwYXJlX2pvaW4ocnR3ZGV2LCB2aWYsIGJzc2lkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZXNoX2pvaW4gfHwgIXJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9qb2luX2RvbmUpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB3YWl0X21zID0gcnR3ODcyM2JzX2F1dGhfc3luY193YWl0X21zKHZpZik7XG4mIzQzO1xuJiM0MztcdFx0cnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChydHdkZXYsIGJzc2lkKTtcbiYjNDM7XHRcdHJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgocnR3ZGV2LCB2aWYsIGJzc2lkKTtcbiYjNDM7XHRcdHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChydHdkZXYsIHdhaXRfbXMpO1xuJiM0MztcdFx0cnR3ODcyM2JzX2F1dGhfc3luY19zdG9wKHJ0d2Rldik7XG4mIzQzO1x0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50KSB7XG4mIzQzO1x0XHRydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7XG4mIzQzO1x0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfaDJjX3NlbnQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydHdfb3BzX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0zODcsNiAmIzQzOzg0NCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQVNTT0MpIHtcbiBcdFx0cnR3X3ZpZl9hc3NvY19jaGFuZ2VkKHJ0d3ZpZiwgY29uZik7XG4gXHRcdGlmICh2aWYtXHUwMDNlY2ZnLmFzc29jKSB7XG4mIzQzO1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XG4mIzQzO1x0XHRcdFx0cnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHJ0d2RldiwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhydHdkZXYsIHZpZiwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0cnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHJ0d2Rldik7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0cnR3X2NvZXhfY29ubmVjdF9ub3RpZnkocnR3ZGV2LCBDT0VYX0FTU09DSUFURV9GSU5JU0gpO1xuIFxuIFx0XHRcdHJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTtcbkBAIC00MDgsNiAmIzQzOzg3MiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0aWYgKHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdFx0cnR3X2h3X3NjYW5fYWJvcnQocnR3ZGV2KTtcbiBcbiYjNDM7XHRcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbiYjNDM7XHRcdFx0XHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0cnR3ODcyM2JzX3Jlc2V0X3Jlc3BvbnNlX3JhdGVzKHJ0d2Rldik7XG4mIzQzO1x0XHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XG4mIzQzO1x0XHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IGZhbHNlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFO1xuQEAgLTQxNSw4ICYjNDM7ODg2LDI2IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CU1NJRCkge1xuJiM0MztcdFx0Ym9vbCBic3NpZF9jbGVhcmVkID0gaXNfemVyb19ldGhlcl9hZGRyKGNvbmYtXHUwMDNlYnNzaWQpO1xuJiM0MztcdFx0Ym9vbCBic3NpZF9jaGFuZ2VkID0gIWV0aGVyX2FkZHJfZXF1YWwocnR3dmlmLVx1MDAzZWJzc2lkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY29uZi1cdTAwM2Vic3NpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNiBic3NpZF9jaGFuZ2VkKSB7XG4mIzQzO1x0XHRcdHJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9oMmNfc2VudCA9IGZhbHNlO1xuJiM0MztcdFx0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4gXHRcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXHUwMDNlYnNzaWQsIGNvbmYtXHUwMDNlYnNzaWQpO1xuIFx0XHRjb25maWcgfD0gUE9SVF9TRVRfQlNTSUQ7XG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXHUwMDI2XHUwMDI2IGJzc2lkX2NsZWFyZWQpIHtcbiYjNDM7XHRcdFx0cnR3dmlmLVx1MDAzZWFpZCA9IDA7XG4mIzQzO1x0XHRcdHJ0d3ZpZi1cdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTk9fTElOSztcbiYjNDM7XHRcdFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFIHwgUE9SVF9TRVRfQUlEO1xuJiM0MztcdFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIEJJVF9ESVNfVFNGX1VEVCB8IEJJVF9FTl9CQ05fRlVOQ1RJT04gfFxuJiM0MztcdFx0XHRcdCAgIEJJVF9ESVNfQVRJTSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmICghcnR3X2NvcmVfY2hlY2tfc3RhX2FjdGl2ZShydHdkZXYpKVxuIFx0XHRcdHJ0d19jbGVhcl9vcF9jaGFuKHJ0d2Rldik7XG4gXHRcdGVsc2VcbkBAIC00NDgsOCAmIzQzOzkzNywxNyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfTVVfR1JPVVBTKVxuIFx0XHRydHdfY2hpcF9zZXRfZ2lkX3RhYmxlKHJ0d2RldiwgdmlmLCBjb25mKTtcbiBcbi1cdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfU0xPVClcbiYjNDM7XHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4mIzQzO1x0XHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIGNvbmYtXHUwMDNldXNlX3Nob3J0X3ByZWFtYmxlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7XG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4mIzQzO1x0XHRcdHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHJ0d2RldiwgY29uZi1cdTAwM2V1c2Vfc2hvcnRfc2xvdCk7XG4gXHRcdHJ0d19jb25mX3R4KHJ0d2RldiwgcnR3dmlmKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfUFMpXG4gXHRcdHJ0d19yZWNhbGNfbHBzKHJ0d2RldiwgTlVMTCk7XG5AQCAtNjA5LDExICYjNDM7MTEwNywxOSBAQCBzdGF0aWMgaW50IHJ0d19vcHNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsXG4gXHRcdGtleS1cdTAwM2Vod19rZXlfaWR4ID0gaHdfa2V5X2lkeDtcbiBcdFx0cnR3X3NlY193cml0ZV9jYW0ocnR3ZGV2LCBzZWMsIHN0YSwga2V5LFxuIFx0XHRcdFx0ICBod19rZXlfdHlwZSwgaHdfa2V5X2lkeCk7XG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiB2aWYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSlcbiYjNDM7XHRcdFx0cnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2gocnR3ZGV2LCB0cnVlKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERJU0FCTEVfS0VZOlxuIFx0XHRydHdfaGNpX2ZsdXNoX2FsbF9xdWV1ZXMocnR3ZGV2LCBmYWxzZSk7XG4gXHRcdHJ0d19tYWNfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTtcbiBcdFx0cnR3X3NlY19jbGVhcl9jYW0ocnR3ZGV2LCBzZWMsIGtleS1cdTAwM2Vod19rZXlfaWR4KTtcbiYjNDM7XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHZpZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKVxuJiM0MztcdFx0XHRydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIGZhbHNlKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG5AQCAtNzAzLDggJiM0MzsxMjA5LDIzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfbWdkX3ByZXBhcmVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4gXHRydHdfbGVhdmVfbHBzX2RlZXAocnR3ZGV2KTtcbi1cdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuLVx0cnR3X2NoaXBfcHJlcGFyZV90eChydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHQvKiBXYWtlIGZyb20gc29mdCBJUFMgYW5kIHJ1biB0aGUgdmVuZG9yIGpvaW4gc2VxdWVuY2UuIFRoZSBSRktcbiYjNDM7XHRcdCAqIGlzIGhhbmRsZWQgYnkgdGhlIG9uY2Utb25seSBwb3dlci1vbiBJUUsgcGx1cyB0aGUgcHMuY1xuJiM0MztcdFx0ICogcG9zdC1JUFMgUkYtYnVzIHJlY292ZXJ5LCBub3QgYSBmcmVzaCBjYWxpYnJhdGlvbiBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocnR3X2xlYXZlX2lwcyhydHdkZXYpKSB7XG4mIzQzO1x0XHRcdHJ0d19lcnIocnR3ZGV2LCBcJiMzNDtmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0ZSBmb3IgbWdkIHR4XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTtcbiYjNDM7XHRcdHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9hdXRoX2pvaW4ocnR3ZGV2LCB2aWYsIGluZm8pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTtcbiYjNDM7XHRcdHJ0d19jaGlwX3ByZXBhcmVfdHgocnR3ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO291dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZydHdkZXYtXHUwMDNlbXV0ZXgpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXG5pbmRleCBjZDkyNTQzNzBmY2M3Mi4uMTYyMjhjYWUyNTJlYmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmNcbkBAIC0yMTc0LDExICYjNDM7MjE3NCwxMyBAQCBpbnQgcnR3X2NvcmVfaW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnR3ZGV2LVx1MDAzZXR4cV9sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ0d2Rldi1cdTAwM2V0eF9yZXBvcnQucV9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jLmxvY2spO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlaGFsLnR4X3Bvd2VyX211dGV4KTtcbiBcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cnR3ZGV2LVx1MDAzZWNvZXgud2FpdCk7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jLndhaXQpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnJ0d2Rldi1cdTAwM2VscHNfbGVhdmVfY2hlY2spO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnJ0d2Rldi1cdTAwM2Vmd19zY2FuX2RlbnNpdHkpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbmluZGV4IDljMGI3NDY1NDBiMGVlLi45OWI5OWFhM2Q2MDBmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICYjNDM7MTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcbiBcdFJUV19DSElQX1RZUEVfODcyM0QsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFDLFxuIFx0UlRXX0NISVBfVFlQRV84NzAzQixcbiYjNDM7XHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQSxcbiBcdFJUV19DSElQX1RZUEVfODgxMkEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTRBLFxuQEAgLTgyOCw2ICYjNDM7ODI5LDggQEAgc3RydWN0IHJ0d192aWYge1xuIFx0dTggYnNzaWRbRVRIX0FMRU5dO1xuIFx0dTggcG9ydDtcbiBcdHU4IGJjbl9jdHJsO1xuJiM0MztcdGJvb2wgcHJlX2F1dGhfaDJjX3NlbnQ7XG4mIzQzO1x0Ym9vbCBwcmVfYXV0aF9qb2luX2RvbmU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJzdmRfcGFnZV9saXN0O1xuIFx0c3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgdHhfcGFyYW1zW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdGNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7XG5AQCAtMjA1Niw2ICYjNDM7MjA1OSwyMCBAQCBzdHJ1Y3QgcnR3X2h3X3NjYW5faW5mbyB7XG4gXHR1OCBvcF9idztcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTeW5jaHJvbmlzZXMgdGhlIHByZS1hdXRoIHdhaXQgb24gYSBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZnJvbSB0aGVcbiYjNDM7ICogdGFyZ2V0IEJTU0lEIGJlZm9yZSB0aGUgam9pbiBzZXF1ZW5jZSBjb250aW51ZXMuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcnR3X2F1dGhfc3luYyB7XG4mIzQzO1x0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbiYjNDM7XHQvKiBQcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93LiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiYjNDM7XHR1OCBic3NpZFtFVEhfQUxFTl07XG4mIzQzO1x0Ym9vbCBhY3RpdmU7XG4mIzQzO1x0Ym9vbCBzZWVuO1xuJiM0MztcdHUzMiBzZWVuX2NvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcnR3X2RldiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbkBAIC0yMTMyLDYgJiM0MzsyMTQ5LDggQEAgc3RydWN0IHJ0d19kZXYge1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZndfc2Nhbl9kZW5zaXR5O1xuIFx0Ym9vbCBhcF9hY3RpdmU7XG4gXG4mIzQzO1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgYXV0aF9zeW5jO1xuJiM0MztcbiBcdGJvb2wgbGVkX3JlZ2lzdGVyZWQ7XG4gXHRjaGFyIGxlZF9uYW1lWzMyXTtcbiBcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7XG5AQCAtMjE5Myw2ICYjNDM7MjIxMiwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuQEAgLTIyODMsNCAmIzQzOzIzMDgsOCBAQCBib29sIHJ0d19jb3JlX2NoZWNrX3N0YV9hY3RpdmUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XG4gdm9pZCBydHdfY29yZV9lbmFibGVfYmVhY29uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW5hYmxlKTtcbiB2b2lkIHJ0d19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZik7XG4mIzQzO3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbixcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbmluZGV4IDA4ZTk0OTQ5NzdlMDZhLi5iNmQ0ZThlZDk4Yzc1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbkBAIC00NzksNiAmIzQzOzQ3OSw3IEBAXG4gI2RlZmluZSBCSVRfRElTX1RTRl9VRFRcdFx0QklUKDQpXG4gI2RlZmluZSBCSVRfRU5fQkNOX0ZVTkNUSU9OXHRCSVQoMylcbiAjZGVmaW5lIEJJVF9FTl9UWEJDTl9SUFRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEJJVF9ESVNfQVRJTVx0XHRCSVQoMClcbiAjZGVmaW5lIFJFR19CQ05fQ1RSTF9DTElOVDBcdDB4MDU1MVxuICNkZWZpbmUgUkVHX0RSVkVSTFlJTlRcdFx0MHgwNTU4XG4gI2RlZmluZSBSRUdfQkNORE1BVElNXHRcdDB4MDU1OVxuQEAgLTUxOCw2ICYjNDM7NTE5LDcgQEBcbiAjZGVmaW5lIEJJVF9VQ19NRF9FTlx0XHRCSVQoMTYpXG4gI2RlZmluZSBCSVRfUlhTS19QRVJQS1RcdFx0QklUKDE1KVxuICNkZWZpbmUgQklUX0hUQ19MT0NfQ1RSTFx0QklUKDE0KVxuJiM0MzsjZGVmaW5lIEJJVF9BTUZcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBCSVRfUlBGTV9DQU1fRU5BQkxFXHRCSVQoMTIpXG4gI2RlZmluZSBCSVRfVEFfQkNOXHRcdEJJVCgxMSlcbiAjZGVmaW5lIEJJVF9SQ1JfQURGXHRcdEJJVCgxMSlcbkBAIC02MjgsNiAmIzQzOzYzMCw3IEBAXG4gI2RlZmluZSBSRUdfUFNEXHRcdFx0MHgwOTEwXG4gI2RlZmluZSBCSVRfUFNEX0lOSVx0XHRHRU5NQVNLKDIzLCAyMilcbiAjZGVmaW5lIFJFR19TSU5HTEVfVE9ORV9DT05UX1RYXHQweDA5MTRcbiYjNDM7I2RlZmluZSBSRUdfQkJfU0VMX0JUR184NzIzQlx0MHgwOTQ4XG4gI2RlZmluZSBSRUdfQUdDX1RBQkxFXHRcdDB4MDk1OFxuICNkZWZpbmUgUkVHX1JGRV9DVFJMX0VcdFx0MHgwOTc0XG4gI2RlZmluZSBSRUdfMk5EX0NDQV9DVFJMXHQweDA5NzZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmU5Li41MzAzOTc1ZDAwYTJhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LyogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuJiM0MztcdCAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LlxuIFx0ICovXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiBcdTAwMjZcdTAwMjYgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4mIzQzO1x0aWYgKChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8XG4mIzQzO1x0ICAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiBcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXCYjMzQ7emVybyBsZW5ndGggcGFja2V0XCYjMzQ7KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwOC4uYjI5NGJjYzRkODI4MDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbkBAIC0yMCw2ICYjNDM7MjAsMTYgQEBcbiAjaW5jbHVkZSBcJiMzNDt0eC5oXCYjMzQ7XG4gXG4gI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTXHRcdFx0NTBcbiYjNDM7I2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuJiM0MztcbiYjNDM7LyogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbiYjNDM7ICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZVxuJiM0MzsgKiBUWCBkcmFpbiBwYXRoIG9uY2UgaXQgZmFsbHMgYmFjayB0byB0aGUgbG93IG9uZS4gQm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5XG4mIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVJcdFx0XHQxNlxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoMSlcbiBcbiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcilcbiB7XG5AQCAtNTQ4LDEyICYjNDM7NTU4LDkxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0X2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xuJiM0MztcdHUzMiBmcmVlX3R4cGc7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC0gcGdfdGJsLVx1MDAzZWxxX251bSAtXG4mIzQzO1x0XHQgICBwZ190YmwtXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVx1MDAzZWV4cV9udW0gLSBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4mIzQzO1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZykge1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgZnJlZV90eHBnIFx1MDAyNiAweGZmKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmcmVlX3R4cGcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIGZyZWVfdHhwZyBcdTAwMjYgMHhmZik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweGZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHF1ZXVlKSB7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0gyQzpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WTzpcbiYjNDM7XHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCk7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4mIzQzO1x0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCk7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4mIzQzO1x0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdyk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRcdGludCBkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZWRpY2F0ZWQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBkZWRpY2F0ZWQ7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gZGVkaWNhdGVkICYjNDM7IGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0aWYgKHBhZ2VzX25lZWRlZCBcdTAwM2M9IHBhZ2VzX2ZyZWUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdFx0cGFnZXNfZnJlZSA9IGRlZGljYXRlZCAmIzQzOyBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDQ0ICYjNDM7NzIxLDEzMSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBpO1xuJiM0MztcdHU4IGZyZWU7XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XHRpbnQgZnJlZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChxdWV1ZSkge1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuJiM0MztcdFx0ZGVkaWNhdGVkID0gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuJiM0MztcdFx0ZGVkaWNhdGVkID0gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XG4mIzQzO1x0aWYgKHBhZ2VzIFx1MDAzYz0gZnJlZSkge1xuJiM0MztcdFx0YXRvbWljX3N1YihwYWdlcywgZGVkaWNhdGVkKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0YXRvbWljX3NldChkZWRpY2F0ZWQsIDApO1xuJiM0MztcdFx0YXRvbWljX3N1YihwYWdlcyAtIGZyZWUsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZXM7XG4gXHRib29sIGJ1c19jbGFpbTtcbiBcdHNpemVfdCB0eHNpemU7XG4mIzQzO1x0c2l6ZV90IHdyaXRlX3NpemU7XG4gXHR1MzIgdHhhZGRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLVx1MDAzZWxlbiwgcXVldWUpO1xuLVx0aWYgKCF0eGFkZHIpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTtcbiYjNDM7XHRcdHdyaXRlX3NpemUgPSB0eHNpemUgXHUwMDNlIFJUV19TRElPX0JMT0NLX1NJWkUgP1xuJiM0MztcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgb3JpZ19sZW4pO1xuJiM0MztcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XG4gXG4tXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0aWYgKHNrYl90YWlscm9vbShza2IpIFx1MDAzYyBwYWRkaW5nKSB7XG4mIzQzO1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuJiM0MztcdGlmICghdHhhZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XHR9XG4gXG4gXHRyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdHJldCA9IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtHb3QgdW5hbGlnbmVkIFNLQiBpbiAlcygpIGZvciBxdWV1ZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbiYjNDM7XHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgd3JpdGVfc2l6ZSk7XG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4gXG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJ0bDg3MjNicykge1xuJiM0MztcdFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4mIzQzO1x0fVxuIFx0aWYgKHJldClcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwmIzM0Oyxcbi1cdFx0XHQgdHhzaXplLCB0eGFkZHIpO1xuJiM0MztcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbiBcbiYjNDM7b3V0X3RyaW06XG4mIzQzO1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKVxuJiM0MztcdFx0c2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NzcsNyAmIzQzOzg1MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XG4mIzQzO1x0XHRcdFx0ICAgICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTY4NSw2ICYjNDM7ODY1LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHR1OCBzaXplLCB0aW1lb3V0O1xuIFxuIFx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuJiM0MztcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcbkBAIC03MTIsNiAmIzQzOzg5Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHQgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpO1xuIFxuIFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgMyBcdTAwM2NcdTAwM2MgMik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSAmIzQzOzkzMiw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi1cdTAwM2VjaGlwO1xuJiM0MztcdHN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWZpZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4mIzQzO1x0dTMyIGZyZWVfdHhwZztcbiYjNDM7XHR1MTYgcHVicV9udW07XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcGdfdGJsLVx1MDAzZWhxX251bSAmIzQzOyBwZ190YmwtXHUwMDNlbHFfbnVtICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgIHBnX3RibC1cdTAwM2VucV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZWV4cV9udW0gJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgcGdfdGJsLVx1MDAzZWdhcHFfbnVtKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHBnX3RibC1cdTAwM2VocV9udW0gLSBwZ190YmwtXHUwMDNlbHFfbnVtIC1cbiYjNDM7XHRcdCAgIHBnX3RibC1cdTAwM2VucV9udW0gLSBwZ190YmwtXHUwMDNlZXhxX251bSAtIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbiYjNDM7XHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuJiM0MztcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiYjNDM7XHR1MzIgY2xlYXI7XG4mIzQzO1xuJiM0MztcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1x0cnR3X3NkaW9faW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjZcbiYjNDM7XHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcdFx0aWYgKGNsZWFyKVxuJiM0MztcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODE1LDcgJiM0MzsxMDM5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRxdWV1ZV93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4mIzQzO1x0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXG5AQCAtODMxLDYgJiM0MzsxMDU1LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xuIH1cbiBcbkBAIC05MzcsNiAmIzQzOzExNjMsMTggQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4mIzQzO1x0LyogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4mIzQzO1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzO1x0ICogaGFuZGluZyB1cyBmcmFtZXMsIGJvdW5kaW5nIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBSZXN1bWVkIGZyb20gdGhlIFRYXG4mIzQzO1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTY1LDYgJiM0MzsxMjAzLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3J4X3NrYihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cnR3X3VwZGF0ZV9yeF9mcmVxX2Zvcl9pbnZhbGlkKHJ0d2Rldiwgc2tiLCByeF9zdGF0dXMsIHBrdF9zdGF0KTtcbiBcdHJ0d19yeF9zdGF0cyhydHdkZXYsIHBrdF9zdGF0LVx1MDAzZXZpZiwgc2tiKTtcbiBcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpXG4mIzQzO1x0XHRydHc4NzIzYnNfYXV0aF9zeW5jX3J4KHJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHNrYi1cdTAwM2VsZW4sIHBrdF9zdGF0LCByeF9zdGF0dXMpO1xuJiM0MztcbiBcdGllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0d2Rldi1cdTAwM2Vodywgc2tiKTtcbiB9XG4gXG5AQCAtMTA5NSw2ICYjNDM7MTMzOCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4mIzQzO1x0LyogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4mIzQzO1x0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxuJiM0MztcdCAqIGJvdGggZGVmaW5lZCBhbmQgdW5tYXNrZWQuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0aGlzciBcdTAwMjY9IHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgXHUwMDI2IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcbiYjNDM7XG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDMyICYjNDM7MTQ4MSw0OCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuLVx0XHRcdFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLFxuJiM0MztcdFx0XHRcdCAgICAgYm9vbCAqcHJvY2Vzc2VkKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHQqcHJvY2Vzc2VkID0gZmFsc2U7XG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0KnByb2Nlc3NlZCA9IHRydWU7XG4mIzQzO1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNjPSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcbiYjNDM7XHRcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9XG4tXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTtcbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4mIzQzO1x0XHRcdCAgICAgd29yayk7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuJiM0MztcdGJvb2wgcHJvY2Vzc2VkO1xuIFx0aW50IGxpbWl0LCBxdWV1ZTtcbiBcbiBcdHJ0d2RldiA9IHdvcmtfZGF0YS1cdTAwM2VydHdkZXY7XG5AQCAtMTI2Nyw3ICYjNDM7MTUzMywyNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIFx1MDAyNnByb2Nlc3NlZCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiByZXQgPT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdFx0XHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcbiYjNDM7XHRcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVCBcdTAwMjZcdTAwMjYgcHJvY2Vzc2VkKSB7XG4mIzQzO1x0XHRcdFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgJiM0MzsxNTc3LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW2ldKTtcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xuJiM0MztcdH1cbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcdGlmICghcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpXG4gXHRcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XG4gXG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2VydHdkZXYgPSBydHdkZXY7XG4tXHRJTklUX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMzE1LDYgJiM0MzsxNjAwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVx1MDAzZXR4d3EpO1xuIFx0a2ZyZWUocnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbmluZGV4IDQ1N2U4YjAyMzgwZTViLi5mMWY1OWY4MzAxYjhmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gXG4gLyogU0RJTyBUeCBDb250cm9sICovXG4gI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMClcbiYjNDM7I2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMilcbkBAIC03Nyw2ICYjNDM7NzgsMTQgQEBcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcdFx0QklUKDI5KVxuJiM0MzsjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuJiM0MztcdChSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVClcbiBcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTVx0XHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxOSlcbkBAIC0xNDMsNyAmIzQzOzE1Miw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2RldjtcbiB9O1xuIFxuQEAgLTE1OSw2ICYjNDM7MTY4LDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4mIzQzO1xuJiM0MztcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2xvdztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcbiYjNDM7XHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbmluZGV4IGVmY2Y0NTQzMzk5OWFmLi43M2YyYWY2NmVmZmU4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNkZWZpbmUgUlRXX1NFQ19SWF9ERUNfRU5cdFx0QklUKDMpXG4gI2RlZmluZSBSVFdfU0VDX1RYX0JDX1VTRV9ES1x0XHRCSVQoNilcbiAjZGVmaW5lIFJUV19TRUNfUlhfQkNfVVNFX0RLXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUV19TRUNfQ0hLX0tFWUlEXHRcdEJJVCg4KVxuIFxuICNkZWZpbmUgUlRXX1NFQ19FTkdJTkVfRU5cdFx0QklUKDkpXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBXaUZpL0JsdWV0b290aCBjb2V4aXN0ZW5jZSBhbmQgbW9kaWZpZXMgU0RJTy1zcGVjaWZpYyBUWC9SWCBoYW5kbGluZy4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGNvbmZpbmVkIHRvIHRoZSBTRElPIGludGVyZmFjZSAoc2Rpby5jKSBvciBleHBsaWNpdGx5IGd1YXJkZWQgYnkgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIHdoaWNoIGNoZWNrcyBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHVzZWQgYnkgc3l6a2FsbGVyIGRvIG5vdCBlbXVsYXRlIHBoeXNpY2FsIFNESU8gV2lGaSBjYXJkcywgdGhpcyBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUwODliN2Q1OWFiOWQ5M2VhNTFhNzE0MmYyZTQ5MWUwYzBjZjUxNmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMKaW5kZXggMzdjMzM2ZGVmNDE5MTUuLjMxNGIyYTM2OGE4ZjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYwpAQCAtMTQ0Myw2ICYjNDM7MTQ0MywxOTEgQEAgc3RhdGljIHZvaWQgcnR3X2NvZXhfc2V0X2FudF9wYXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UsIHU4IHBoYXNlKQogI2RlZmluZSBjYXNlX0FMR08oc3JjKSBcCiAJY2FzZSBDT0VYX0FMR09fIyNzcmM6IHJldHVybiAjc3JjCiAKJiM0MzsvKiA4NzIzQlMgU0RJTyBXaUZpL0JUIGNvZXhpc3RlbmNlIGFudGVubmEgaGFuZGxpbmcuIE9uIEJULWRpc2FibGVkIGJvYXJkcyB0aGUKJiM0MzsgKiBzY2FuL2F1dGggd2luZG93IHN0aWxsIHJvdXRlcyB0aHJvdWdoIHRoZSBQVEEgbXV4OyB0aGVzZSBoZWxwZXJzIGZvcmNlIHRoZQomIzQzOyAqIHZlbmRvci1zaGFwZWQgV2lGaS1vd25lZCBhbnRlbm5hIHBhdGggc28gZGlyZWN0ZWQgbWFuYWdlbWVudCBUWCByZWFjaGVzIGFpci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQlRfQ09FWF9DVFJMCQkweDAwMzkKJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0NGRwkJMHgwOTMwCiYjNDM7I2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkcxCQkweDA5NDQKJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0JVRgkJMHgwOTc0CiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFCTB4MTgwMDEwMWIKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYW50X2lzX2F1eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHJ0d2Rldi0mZ3Q7ZWZ1c2UuYnRfc2V0dGluZyAmYW1wOyBCSVQoNikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBydHdkZXYtJmd0O2NvZXguc3RhdC5idF9kaXNhYmxlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcHRhX2FudF9wYXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnR3X2NvZXhfODcyM2JzX2FudF9pc19hdXgocnR3ZGV2KSA/IDB4ODAgOiAweDIwMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogV3JpdGUgQkJfU0VMX0JURywgcmV0cnlpbmcgb25jZSB3aXRoIFNZU19GVU5DIEJCIHJlc2V0IGlmIHRoZSBmaXJzdAomIzQzOyAqIHdyaXRlIGRvZXMgbm90IHN0aWNrIChSRi9CQiBjbG9jayBtYXkgaGF2ZSBiZWVuIGdhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXU4IHN5c19mdW5jX2JlZm9yZTsKJiM0MzsJdTMyIHJlYWRiYWNrOwomIzQzOwomIzQzOwlzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pOwomIzQzOwlpZiAoKHN5c19mdW5jX2JlZm9yZSAmYW1wOyAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHsKJiM0MzsJCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpOwomIzQzOwkJdXNsZWVwX3JhbmdlKDEwLCAxMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQiwgdmFsdWUpOwomIzQzOwlyZWFkYmFjayA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQik7CiYjNDM7CWlmIChyZWFkYmFjayA9PSB2YWx1ZSkKJiM0MzsJCXJldHVybiByZWFkYmFjazsKJiM0MzsKJiM0MzsJdXNsZWVwX3JhbmdlKDEwLCAxMSk7CiYjNDM7CXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX0JCX1NFTF9CVEdfODcyM0IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnR3X2NvZXhfODcyM2JzX3dyaXRlX2JiX3NlbF9idGcocnR3ZGV2LAomIzQzOwkJCQkJCXJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGhpZ2gpCiYjNDM7ewomIzQzOwlpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoaGlnaCkgewomIzQzOwkJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQlRfQ09FWF9UQUJMRV9ILAomIzQzOwkJCSAgICBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfVFhfQ0NLLCBmYWxzZSk7CiYjNDM7CQlydHdfY29leF9zZXRfd2xfcHJpX21hc2socnR3ZGV2LCBDT0VYX1dMUFJJX1JYX0NDSywgZmFsc2UpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgIGJvb2wga2VlcF9wdGFfb3duZXIpCiYjNDM7ewomIzQzOwl1MzIgYmVmb3JlLCBhZnRlcjsKJiM0MzsKJiM0MzsJYmVmb3JlID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19QQURfQ1RSTDEpOwomIzQzOwlhZnRlciA9IGJlZm9yZSAmYW1wOyB+KEJJVF9MTkFPTl9XTEJUX1NFTCB8IEJJVF9TV19EUERUX1NFTF9EQVRBKTsKJiM0MzsJaWYgKGtlZXBfcHRhX293bmVyKQomIzQzOwkJYWZ0ZXIgfD0gQklUX1BBUEVfV0xCVF9TRUw7CiYjNDM7CWVsc2UKJiM0MzsJCWFmdGVyICZhbXA7PSB+QklUX1BBUEVfV0xCVF9TRUw7CiYjNDM7CWlmIChhZnRlciAhPSBiZWZvcmUpCiYjNDM7CQlydHdfd3JpdGUzMihydHdkZXYsIFJFR19QQURfQ1RSTDEsIGFmdGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3coc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CWlmICghcnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChydHdfcmVhZDgocnR3ZGV2LCBSRUdfR05UX0JUKSA9PSAweDAwICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19CVF9DT0VYX0VOSF9JTlRSX0NUUkwpID09IDB4MGMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJ0d19md19zZXRfZ250X2J0KHJ0d2RldiwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwl1MzIgYW50X3RhcmdldDsKJiM0MzsKJiM0MzsJaWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYW50X3RhcmdldCA9IHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KTsKJiM0MzsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTsKJiM0MzsJcnR3X2NvZXhfc2V0X2FudF9zd2l0Y2gocnR3ZGV2LCBDT0VYX1NXSVRDSF9DVFJMX0JZX1BUQSwKJiM0MzsJCQkJQ09FWF9TV0lUQ0hfVE9fTk9DQVJFKTsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7CiYjNDM7CXJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHJ0d2RldiwgYW50X3RhcmdldCk7CiYjNDM7CXJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHJ0d2RldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwl1OCBzeXNfZnVuY19iZWZvcmU7CiYjNDM7CiYjNDM7CXN5c19mdW5jX2JlZm9yZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TWVNfRlVOQ19FTik7CiYjNDM7CWlmICgoc3lzX2Z1bmNfYmVmb3JlICZhbXA7IChCSVQoMCkgfCBCSVQoMSkpKSAhPSAoQklUKDApIHwgQklUKDEpKSkgewomIzQzOwkJcnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAsIDExKTsKJiM0MzsJfQomIzQzOwomIzQzOwlydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfODcyM0JTX0JUX0NPRVhfQ1RSTCwgQklUKDMpLCAweDEpOwomIzQzOwlydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQlVGLCAweGZmKTsKJiM0MzsJcnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMSwgMHgzLCAweDMpOwomIzQzOwlydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHLCAweDc3KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJ0d2Rldi0mZ3Q7Y29leC5kbS5jdXJfdGFibGUgPSAyOwomIzQzOwlydHdfY29leF9zZXRfdGFibGUocnR3ZGV2LCB0cnVlLCAweDVhNWE1YTVhLCAweDVhNWE1YTVhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm9uLWNvbm5lY3RlZCBzY2FuL2F1dGggd29ya2Fyb3VuZDogUFMtVERNQSB0eXBlIDggb2ZmLCBQVEEgYW50ZW5uYSBwYXRoLAomIzQzOyAqIGNvZXggdGFibGUgdHlwZSAyIChtYXRjaGVzIHRoZSB2ZW5kb3Igbm9uLWNvbm5lY3RlZCBhcmJpdHJhdGlvbikuCiYjNDM7ICovCiYjNDM7dm9pZCBydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2NvZXhfZG0gKmNvZXhfZG0gPSAmYW1wO3J0d2Rldi0mZ3Q7Y29leC5kbTsKJiM0MzsJc3RydWN0IHJ0d19jb2V4X3N0YXQgKmNvZXhfc3RhdCA9ICZhbXA7cnR3ZGV2LSZndDtjb2V4LnN0YXQ7CiYjNDM7CiYjNDM7CWlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljb2V4X2RtLSZndDtjdXJfcHNfdGRtYV9vbiA9IGZhbHNlOwomIzQzOwljb2V4X2RtLSZndDtjdXJfcHNfdGRtYSA9IDg7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVswXSA9IDB4MDg7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVsxXSA9IDB4MDA7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVsyXSA9IDB4MDA7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVszXSA9IDB4MDA7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVs0XSA9IDB4MDA7CiYjNDM7CiYjNDM7CXJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwomIzQzOwlydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhydHdkZXYpOwomIzQzOwlydHdfY29leF9zZXRfYW50X3BhdGgocnR3ZGV2LCB0cnVlLCBDT0VYX1NFVF9BTlRfMkcpOwomIzQzOwlydHdfY29leF84NzIzYnNfcmVhc3NlcnRfYW50X2J1ZmZlcihydHdkZXYpOwomIzQzOwlydHdfY29leF84NzIzYnNfYXBwbHlfc2Nhbl90YWJsZShydHdkZXYpOwomIzQzOwlpZiAoY29leF9zdGF0LSZndDtidF9kaXNhYmxlZCkKJiM0MzsJCXJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShydHdkZXYsIHRydWUpOwomIzQzOwlydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChydHdkZXYpOwomIzQzOwlydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChydHdkZXYsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXBsYXllZCBpbW1lZGlhdGVseSBiZWZvcmUgc3RhcnRfY2xudF9qb2luKCkvYXV0aDogQlRfSU5GTyAmIzQzOyBQUy1URE1BIHR5cGUgOAomIzQzOyAqIHRoZW4gdGhlIGZvcmNlZCBXaUZpIFBUQSBhbnRlbm5hIHBhdGgsIHNvIHRoZSBhdXRoIHdpbmRvdyBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtydHdkZXYtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnR3X2Z3X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTsKJiM0MzsJcnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7CiYjNDM7CXJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwomIzQzOwlydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX2ZvcmNlX2Fzc29jX3B0YV9hbnQocnR3ZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3QgY2hhciAqcnR3X2NvZXhfZ2V0X2FsZ29fc3RyaW5nKHU4IGFsZ28pCiB7CiAJc3dpdGNoIChhbGdvKSB7CkBAIC0yNzcwLDcgJiM0MzsyOTU1LDcgQEAgdm9pZCBydHdfY29leF9wb3dlcl9vbl9zZXR0aW5nKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJY29leC0mZ3Q7c3RvcF9kbSA9IHRydWU7CiAJY29leC0mZ3Q7d2xfcmZfb2ZmID0gZmFsc2U7CiAKLQkvKiBlbmFibGUgQkIsIHdlIGNhbiB3cml0ZSAweDk0OCAqLwomIzQzOwkvKiBlbmFibGUgQkIsIHNvIEJCX1NFTF9CVEcgaXMgd3JpdGFibGUgKi8KIAlydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19TWVNfRlVOQ19FTiwKIAkJICAgICAgIEJJVF9GRU5fQkJfR0xCX1JTVCB8IEJJVF9GRU5fQkJfUlNUQik7CiAKQEAgLTI4NzcsNiAmIzQzOzMwNjIsMzMgQEAgdm9pZCBydHdfY29leF9zY2FuX25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKQogCWNvZXgtJmd0O2ZyZWV6ZSA9IGZhbHNlOwogCXJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTsKIAomIzQzOwkvKiA4NzIzQlMgU0RJTyBCVC1kaXNhYmxlZDoga2VlcCB0aGUgc2Nhbi9hdXRoIFBUQSBhbnRlbm5hIHN0YXRlIHRoZQomIzQzOwkgKiB2ZW5kb3IgdXNlcyBhbmQgc2tpcCB0aGUgZ2VuZXJpYyBjb2V4IHJ1bi4gQXQgc2NhbiBzdGFydCAoZmlybXdhcmUKJiM0MzsJICogaGFzIGJlZW4gdXAgbG9uZyBlbm91Z2ggZm9yIHN0YWJsZSBSWCBETUEpIHJlcGxheSB0aGUgdmVuZG9yIEJUX01QIC8KJiM0MzsJICogQlRfSU5GTyBxdWVyaWVzLCB0aGVuIHJlLWVzdGFibGlzaCB0aGUgc2Nhbi1wYXRoIFBUQSBzZXR1cC4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkgewomIzQzOwkJaWYgKHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUXzJHIHx8IHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUKSB7CiYjNDM7CQkJc3RydWN0IHJ0d19jb2V4X2luZm9fcmVxIHJlcSA9IHt9OwomIzQzOwomIzQzOwkJCWNvZXhfc3RhdC0mZ3Q7Y250X3dsW0NPRVhfQ05UX1dMX1NDQU5BUF0gPSAwOwomIzQzOwkJCWNvZXhfc3RhdC0mZ3Q7d2xfaGlfcHJpX3Rhc2syID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCQlyZXEuc2VxID0gMHgwZTsKJiM0MzsJCQlyZXEub3BfY29kZSA9IEJUX01QX0lORk9fT1BfU1VQUF9WRVI7CiYjNDM7CQkJcnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCAmYW1wO3JlcSk7CiYjNDM7CQkJcmVxLnNlcSA9IDB4MGY7CiYjNDM7CQkJcmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1BBVENIX1ZFUjsKJiM0MzsJCQlydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsICZhbXA7cmVxKTsKJiM0MzsJCQlydHdfZndfcXVlcnlfYnRfaW5mbyhydHdkZXYpOwomIzQzOwomIzQzOwkJCXJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQocnR3ZGV2KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY29leF9zdGF0LSZndDt3bF9oaV9wcmlfdGFzazIgPSBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICh0eXBlID09IENPRVhfU0NBTl9TVEFSVF81RykgewogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19DT0VYLAogCQkJJiMzNDtbQlRDb2V4XSwgU0NBTiBTVEFSVCBub3RpZnkgKDVHKVxuJiMzNDspOwpAQCAtMjkzOCw2ICYjNDM7MzE1MCwxNyBAQCB2b2lkIHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpCiAJaWYgKGNvZXgtJmd0O21hbnVhbF9jb250cm9sIHx8IGNvZXgtJmd0O3N0b3BfZG0pCiAJCXJldHVybjsKIAomIzQzOwkvKiA4NzIzQlMgU0RJTyBCVC1kaXNhYmxlZDogdGhlIHZlbmRvciBDb25uZWN0Tm90aWZ5KCkgZWFybHktcmV0dXJucwomIzQzOwkgKiB3aXRob3V0IHNlbmRpbmcgSDJDczsgc2Nhbl93b3JrYXJvdW5kIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhlIFBUQQomIzQzOwkgKiBwYXRoIC8gY29leCB0YWJsZSAvIFBTLVRETUEuIEtlZXAgb25seSB0aGUgcmVnaXN0ZXItbGV2ZWwgUFRBCiYjNDM7CSAqIHJlYXNzZXJ0aW9uIGF0IGFzc29jaWF0ZS1zdGFydC4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkgewomIzQzOwkJaWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpCiYjNDM7CQkJcnR3X2NvZXhfODcyM2JzX2ZvcmNlX2Fzc29jX3B0YV9hbnQocnR3ZGV2KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTsKIAogCWlmICh0eXBlID09IENPRVhfQVNTT0NJQVRFXzVHX1NUQVJUKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oCmluZGV4IGMzOThiZTgzOTFmN2IwLi5jNThhZTBhNTBiMzBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmgKQEAgLTQzMCw0ICYjNDM7NDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19jb2V4X2FjdGl2ZV9xdWVyeV9idF9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCXJ0d19jb2V4X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTsKIH0KIAomIzQzO3ZvaWQgcnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTsKJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYwppbmRleCA5NDVmZWRjZDM3NWI2Mi4uN2MxNzA4NmNhYzMyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMKQEAgLTc4Niw2ICYjNDM7Nzg2LDE3IEBAIHZvaWQgcnR3X2Z3X21lZGlhX3N0YXR1c19yZXBvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkLCBib29sIGNvbm5lY3QpCiAJcnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTsKIH0KIAomIzQzOy8qIDg3MjNCUyBTRElPOiBzZXQgdGhlIGZpcm13YXJlIEdOVF9CVCBzdGF0ZSAoMCA9IFdpRmkgb3ducyB0aGUgYW50ZW5uYSkuICovCiYjNDM7dm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXU4IGgyY19wa3RbSDJDX1BLVF9TSVpFXSA9IHswfTsKJiM0MzsKJiM0MzsJU0VUX0gyQ19DTURfSURfQ0xBU1MoaDJjX3BrdCwgSDJDX0NNRF9HTlRfQlQpOwomIzQzOwlTRVRfR05UX0JUX1NUQVRFKGgyY19wa3QsIHN0YXRlKTsKJiM0MzsKJiM0MzsJcnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJ0d19md191cGRhdGVfd2xfcGh5X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3RyYWZmaWNfc3RhdHMgKnN0YXRzID0gJmFtcDtydHdkZXYtJmd0O3N0YXRzOwpAQCAtMTQ2NiwxMCAmIzQzOzE0NzcsMTQgQEAgdm9pZCBydHdfYWRkX3JzdmRfcGFnZV9zdGEoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAlydHdfYWRkX3JzdmRfcGFnZShydHdkZXYsIHJ0d3ZpZiwgUlNWRF9MUFNfUEdfSU5GTywgdHJ1ZSk7CiB9CiAKJiM0MzsvKiBSRUdfRFdCQ04xX0NUUkwgYml0IDIwIChTV19CQ05fU0VMIGZvciBwb3J0IDApLCByZWxhdGl2ZSB0byBieXRlICYjNDM7MiAqLwomIzQzOyNkZWZpbmUgQklUX09GRlNFVF9EV0JDTjFfU1dfQkNOX1NFTF9QT1JUMAkoMjAgLSAxNikKJiM0MzsKIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsCiAJCQkJdTggKmJ1ZiwgdTMyIHNpemUpCiB7Ci0JdTggYmNrcFszXTsKJiM0MzsJY29uc3QgYm9vbCBpc184NzIzYnNfc2RpbyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTsKJiM0MzsJdTggYmNrcFs0XTsKIAl1OCB2YWw7CiAJdTE2IHJzdmRfcGdfaGVhZDsKIAl1MzIgYmNuX3ZhbGlkX2FkZHI7CkBAIC0xNDk5LDEzICYjNDM7MTUxNCwyOCBAQCBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLAogCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsCiAJCSAgIChiY2twWzJdICZhbXA7IH5CSVRfRU5fQkNOX0ZVTkNUSU9OKSB8IEJJVF9ESVNfVFNGX1VEVCk7CiAKLQlpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUpIHsKJiM0MzsJLyogQ2xlYXIgQklUX0VOX0JDTlFfREwgc28gdGhlIGNoaXAgZG9lcyBub3QgdHJlYXQgdGhlIHJlc2VydmVkLXBhZ2UKJiM0MzsJICogdXBsb2FkIGFzIGEgcmVhbCBiZWFjb247IG90aGVyd2lzZSBCSVRfQkNOX1ZBTElEIG5ldmVyIGFzc2VydHMuIFRoZQomIzQzOwkgKiB2ZW5kb3IgcnRsODcyM2JzIGRyaXZlciBkb2VzIHRoaXMgdW5jb25kaXRpb25hbGx5OyBydHc4OCBvbmx5IGRpZCBpdAomIzQzOwkgKiBmb3IgUENJZSwgd2hpY2ggbGVmdCA4NzIzQlMgU0RJTyYjMzk7cyBCQ05fVkFMSUQgaGFuZHNoYWtlIGZhaWxpbmcuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pIHsKIAkJdmFsID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgJiM0MzsgMik7CiAJCWJja3BbMV0gPSB2YWw7CiAJCXZhbCAmYW1wOz0gfihCSVRfRU5fQkNOUV9ETCAmZ3Q7Jmd0OyAxNik7CiAJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyLCB2YWwpOwogCX0KIAomIzQzOwkvKiA4NzIzQlMgU0RJTzogcG9pbnQgdGhlIFNXIGJlYWNvbiBkb3dubG9hZCBwYXRoIGF0IHBvcnQgMCwgZWxzZQomIzQzOwkgKiBCSVRfQkNOX1ZBTElEIGlzIG5ldmVyIGFzc2VydGVkIGFmdGVyIHRoZSBTRElPIHVwbG9hZCBjb21wbGV0ZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfODcyM2JzX3NkaW8pIHsKJiM0MzsJCXZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCAmIzQzOyAyKTsKJiM0MzsJCWJja3BbM10gPSB2YWw7CiYjNDM7CQl2YWwgJmFtcDs9IH5CSVQoQklUX09GRlNFVF9EV0JDTjFfU1dfQkNOX1NFTF9QT1JUMCk7CiYjNDM7CQlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0RXQkNOMV9DVFJMICYjNDM7IDIsIHZhbCk7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBydHdfaGNpX3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHJ0d2RldiwgYnVmLCBzaXplKTsKIAlpZiAocmV0KSB7CiAJCXJ0d19lcnIocnR3ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSBkYXRhIHRvIHJzdmQgcGFnZVxuJiMzNDspOwpAQCAtMTUyNiwxMSAmIzQzOzE1NTYsMTMgQEAgaW50IHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgcGdfYWRkciwKIAl9CiAKIHJlc3RvcmU6CiYjNDM7CWlmIChpc184NzIzYnNfc2RpbykKJiM0MzsJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgJiM0MzsgMiwgYmNrcFszXSk7CiAJcnN2ZF9wZ19oZWFkID0gcnR3ZGV2LSZndDtmaWZvLnJzdmRfYm91bmRhcnk7CiAJcnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfRklGT1BBR0VfQ1RSTF8yLAogCQkgICAgcnN2ZF9wZ19oZWFkIHwgQklUX0JDTl9WQUxJRF9WMSk7CiAJcnR3X3dyaXRlOChydHdkZXYsIFJFR19CQ05fQ1RSTCwgYmNrcFsyXSk7Ci0JaWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKQomIzQzOwlpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pCiAJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyLCBiY2twWzFdKTsKIAlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0NSICYjNDM7IDEsIGJja3BbMF0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmgKaW5kZXggNDhhZDljZWFiNmVhMTIuLmY1ZWQ2NWM0NjM1MGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oCkBAIC01NzIsNiAmIzQzOzU3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydHdfaDJjX3BrdF9zZXRfaGVhZGVyKHU4ICpoMmNfcGt0LCB1OCBzdWJfaWQpCiAjZGVmaW5lIEgyQ19DTURfUVVFUllfQlRfTVBfSU5GTwkweDY3CiAjZGVmaW5lIEgyQ19DTURfQlRfV0lGSV9DT05UUk9MCQkweDY5CiAjZGVmaW5lIEgyQ19DTURfV0lGSV9DQUxJQlJBVElPTgkweDZkCiYjNDM7I2RlZmluZSBIMkNfQ01EX0dOVF9CVAkJCTB4NmUKICNkZWZpbmUgSDJDX0NNRF9RVUVSWV9CVF9ISURfSU5GTwkweDczCiAKICNkZWZpbmUgSDJDX0NNRF9LRUVQX0FMSVZFCQkweDAzCkBAIC02ODQsNiAmIzQzOzY4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydHdfaDJjX3BrdF9zZXRfaGVhZGVyKHU4ICpoMmNfcGt0LCB1OCBzdWJfaWQpCiAJbGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgJiM0MzsgMHgwMSwgdmFsdWUsIEdFTk1BU0soMzEsIDI0KSkKICNkZWZpbmUgU0VUX1FVRVJZX0JUX0lORk8oaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJbGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgJiM0MzsgMHgwMCwgdmFsdWUsIEJJVCg4KSkKJiM0MzsjZGVmaW5lIFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAomIzQzOwlsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgQklUKDgpKQogI2RlZmluZSBTRVRfV0xfQ0hfSU5GT19MSU5LKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgR0VOTUFTSygxNSwgOCkpCiAjZGVmaW5lIFNFVF9XTF9DSF9JTkZPX0NITkwoaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODQ5LDYgJiM0Mzs4NTIsNyBAQCB2b2lkIHJ0d19md19zZW5kX3Jzc2lfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSk7CiB2b2lkIHJ0d19md19zZW5kX3JhX2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHJ0d19zdGFfaW5mbyAqc2ksCiAJCQkgYm9vbCByZXNldF9yYV9tYXNrKTsKIHZvaWQgcnR3X2Z3X21lZGlhX3N0YXR1c19yZXBvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkLCBib29sIGNvbm4pOwomIzQzO3ZvaWQgcnR3X2Z3X3NldF9nbnRfYnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggc3RhdGUpOwogdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpOwogdm9pZCBydHdfZndfYmVhY29uX2ZpbHRlcl9jb25maWcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBjb25uZWN0LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuYwppbmRleCA3NjZmMjJkMzEwNzllZS4uOTEwMTRhOGUyNDJiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmMKQEAgLTE1LDYgJiM0MzsxNSw0NjMgQEAKICNpbmNsdWRlICYjMzQ7d293LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzYXIuaCYjMzQ7CiAKJiM0MzsvKiA4NzIzQlMgU0RJTzogcmVjb3JkIGEgYmVhY29uL3Byb2JlLXJlc3Agc2VlbiBmcm9tIHRoZSB0YXJnZXQgQlNTSUQgZHVyaW5nCiYjNDM7ICogdGhlIHByZS1hdXRoIHdpbmRvdyBzbyB0aGUgam9pbiBzZXF1ZW5jZSAobWdkX3ByZXBhcmVfdHgpIGNhbiB3YWl0IGZvciBpdCwKJiM0MzsgKiBtaXJyb3JpbmcgdGhlIHZlbmRvciBzdGFydF9jbG50X2pvaW4oKS4gQ2FsbGVkIGZyb20gdGhlIFNESU8gUlggcGF0aC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ0dzg3MjNic19hdXRoX3N5bmNfcngoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHJ0d19yeF9wa3Rfc3RhdCAqcGt0X3N0YXQsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CV9fbGUxNiBmYyA9IGhkci0mZ3Q7ZnJhbWVfY29udHJvbDsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtJmd0O2ZsYWdzKSB8fAomIzQzOwkgICAgcGt0X3N0YXQtJmd0O2NyY19lcnIgfHwgcGt0X3N0YXQtJmd0O2ljdl9lcnIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihmYykgJmFtcDsmYW1wOyAhaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N5bmMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKHN5bmMtJmd0O2FjdGl2ZSAmYW1wOyZhbXA7IGV0aGVyX2FkZHJfZXF1YWwoaGRyLSZndDthZGRyMywgc3luYy0mZ3Q7YnNzaWQpKSB7CiYjNDM7CQlzeW5jLSZndDtzZWVuID0gdHJ1ZTsKJiM0MzsJCXN5bmMtJmd0O3NlZW5fY291bnQmIzQzOyYjNDM7OwomIzQzOwkJd2FrZV91cCgmYW1wO3N5bmMtJmd0O3dhaXQpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzeW5jLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocnR3ODcyM2JzX2F1dGhfc3luY19yeCk7CiYjNDM7CiYjNDM7LyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqLwomIzQzOwomIzQzOyNkZWZpbmUgUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVQJCTB4MzAKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9GQUxMQkFDS19NUwkxMjAKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVMJCTgwCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TCQkxNjAKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQJCUJJVCg3KQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRQkJOQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX0xPTkdfU0xPVF9USU1FCQkyMAomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMU0JCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJNCQkJQklUKDEpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81XzVNCQkJQklUKDIpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xMU0JCQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzZNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl85TQkJCUJJVCg1KQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMTJNCQkJQklUKDYpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xOE0JCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzI0TQkJCUJJVCg4KQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMzZNCQkJQklUKDkpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl80OE0JCQlCSVQoMTApCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81NE0JCQlCSVQoMTEpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl9DQ0tfUkFURVMgXAomIzQzOwkoUlRXODcyM0JTX1JSU1JfMU0gfCBSVFc4NzIzQlNfUlJTUl8yTSB8IFwKJiM0MzsJIFJUVzg3MjNCU19SUlNSXzVfNU0gfCBSVFc4NzIzQlNfUlJTUl8xMU0pCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRQkJCVJUVzg3MjNCU19SUlNSX0NDS19SQVRFUwomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMkdfQUxMT1cgXAomIzQzOwkoUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIHwgUlRXODcyM0JTX1JSU1JfNk0gfCBcCiYjNDM7CSBSVFc4NzIzQlNfUlJTUl8xMk0gfCBSVFc4NzIzQlNfUlJTUl8yNE0pCiYjNDM7CiYjNDM7LyogS2VlcCB0aGUgUkNSIGF0IHRoZSB2ZW5kb3IgdGFyZ2V0LW9ubHkgc3RhdGUgKEFNRiAmIzQzOyBDQlNTSUQpIGFjcm9zcyB0aGUgd2hvbGUKJiM0MzsgKiBjb25uZWN0IHdpbmRvdywgbWF0Y2hpbmcgdGhlIHZlbmRvciBTVEEgcGF0aC4gYWNjZXB0X2FsbCBpcyBrZXB0IG9ubHkgZm9yIHRoZQomIzQzOyAqIGNhbGxlciYjMzk7cyBpbnRlbnQ7IGJvdGggcGF0aHMgY29udmVyZ2UgdGhlIGZpbHRlciB0byB0YXJnZXQtb25seS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBhY2NlcHRfYWxsKQomIzQzO3sKJiM0MzsJcnR3ZGV2LSZndDtoYWwucmNyIHw9IEJJVF9BTUYgfCBCSVRfQ0JTU0lEX0RBVEEgfCBCSVRfQ0JTU0lEX0JDTjsKJiM0MzsJcnR3ZGV2LSZndDtoYWwucmNyICZhbXA7PSB+QklUX0FBUDsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUkNSLCBydHdkZXYtJmd0O2hhbC5yY3IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29uZmlnX3NlY19jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXUxNiBzZWMgPSBydHdfcmVhZDE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcpOwomIzQzOwomIzQzOwlzZWMgfD0gUlRXX1NFQ19DSEtfS0VZSUQgfCBSVFdfU0VDX1RYX0RFQ19FTiB8IFJUV19TRUNfUlhfREVDX0VOOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJUV19TRUNfQ09ORklHLCBzZWMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkJCWJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJdTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7CiYjNDM7CiYjNDM7CWlmIChlbmFibGUpCiYjNDM7CQlzZWMgfD0gUlRXX1NFQ19UWF9CQ19VU0VfREsgfCBSVFdfU0VDX1RYX1VOSV9VU0VfREsgfAomIzQzOwkJICAgICAgIFJUV19TRUNfUlhfVU5JX1VTRV9ESzsKJiM0MzsJZWxzZQomIzQzOwkJc2VjICZhbXA7PSB+KFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8IFJUV19TRUNfUlhfVU5JX1VTRV9ESyB8CiYjNDM7CQkJIFJUV19TRUNfVFhfQkNfVVNFX0RLIHwgUlRXX1NFQ19SWF9CQ19VU0VfREspOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJUV19TRUNfQ09ORklHLCBzZWMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfZW5hYmxlX3RzZl91cGRhdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJ0d193cml0ZThfY2xyKHJ0d2RldiwgUkVHX0JDTl9DVFJMLCBCSVRfRElTX1RTRl9VRFQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgICAgYm9vbCBzaG9ydF9wcmVhbWJsZSkKJiM0Mzt7CiYjNDM7CXU4IHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19SUlNSICYjNDM7IDIpICZhbXA7IH5SVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUOwomIzQzOwomIzQzOwlpZiAoc2hvcnRfcHJlYW1ibGUpCiYjNDM7CQl2YWwgfD0gUlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVDsKJiM0MzsJcnR3X3dyaXRlOChydHdkZXYsIFJFR19SUlNSICYjNDM7IDIsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgc2hvcnRfc2xvdCkKJiM0Mzt7CiYjNDM7CXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfU0xPVCwKJiM0MzsJCSAgIHNob3J0X3Nsb3QgPyBSVFc4NzIzQlNfU0hPUlRfU0xPVF9USU1FIDoKJiM0MzsJCQkJUlRXODcyM0JTX0xPTkdfU0xPVF9USU1FKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUxNiBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUodTggcmF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocmF0ZSAmYW1wOyAweDdmKSB7CiYjNDM7CWNhc2UgMjogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMU07CiYjNDM7CWNhc2UgNDogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMk07CiYjNDM7CWNhc2UgMTE6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNV81TTsKJiM0MzsJY2FzZSAyMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMU07CiYjNDM7CWNhc2UgMTI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNk07CiYjNDM7CWNhc2UgMTg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfOU07CiYjNDM7CWNhc2UgMjQ6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMTJNOwomIzQzOwljYXNlIDM2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzE4TTsKJiM0MzsJY2FzZSA0ODogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8yNE07CiYjNDM7CWNhc2UgNzI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMzZNOwomIzQzOwljYXNlIDk2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzQ4TTsKJiM0MzsJY2FzZSAxMDg6IHJldHVybiBSVFc4NzIzQlNfUlJTUl81NE07CiYjNDM7CWRlZmF1bHQ6ICByZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhjb25zdCB1OCAqaWUsIHUxNiAqYmFzaWNfcmF0ZXMsCiYjNDM7CQkJCQkgIGJvb2wgKnZhbGlkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghaWUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZVsxXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUxNiByOwomIzQzOwomIzQzOwkJaWYgKCEoaWVbaSAmIzQzOyAyXSAmYW1wOyAweDgwKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXIgPSBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUoaWVbaSAmIzQzOyAyXSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkqYmFzaWNfcmF0ZXMgfD0gcjsKJiM0MzsJCSp2YWxpZCA9IHRydWU7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX3Jlc2V0X3Jlc3BvbnNlX3JhdGVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUlNSLCAweGZmZmYxKTsKJiM0MzsJcnR3ZGV2LSZndDtkbV9pbmZvLnJyc3JfdmFsX2luaXQgPSAweGZmZmYxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXBwbHlfYmFzaWNfcmF0ZXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiYjNDM7CQkJCQljb25zdCB1OCAqYnNzaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJmFtcDt2aWYtJmd0O2Jzc19jb25mOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpsb29rdXBfYnNzID0gTlVMTDsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKJiM0MzsJYm9vbCB2YWxpZCA9IGZhbHNlOwomIzQzOwl1MTYgYmFzaWNfcmF0ZXMgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtJmd0O3R5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGNvbmYtJmd0O2JzcykgewomIzQzOwkJYnNzID0gY29uZi0mZ3Q7YnNzOwomIzQzOwl9IGVsc2UgaWYgKGJzc2lkICZhbXA7JmFtcDsgaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKJiM0MzsJCWxvb2t1cF9ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHJ0d2Rldi0mZ3Q7aHctJmd0O3dpcGh5LCBOVUxMLAomIzQzOwkJCQkJICAgICAgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCQkgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAomIzQzOwkJCQkJICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJCWJzcyA9IGxvb2t1cF9ic3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJzcykgewomIzQzOwkJY29uc3QgdTggKnJhdGVzLCAqZXh0OwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJcmF0ZXMgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpOwomIzQzOwkJZXh0ID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUyk7CiYjNDM7CQlydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhyYXRlcywgJmFtcDtiYXNpY19yYXRlcywgJmFtcDt2YWxpZCk7CiYjNDM7CQlydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhleHQsICZhbXA7YmFzaWNfcmF0ZXMsICZhbXA7dmFsaWQpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZhbGlkKSB7CiYjNDM7CQliYXNpY19yYXRlcyB8PSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRTsKJiM0MzsJCWJhc2ljX3JhdGVzICZhbXA7PSBSVFc4NzIzQlNfUlJTUl8yR19BTExPVzsKJiM0MzsJCXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JSU1IsIGJhc2ljX3JhdGVzKTsKJiM0MzsJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfUlJTUiAmIzQzOyAyLAomIzQzOwkJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19SUlNSICYjNDM7IDIpICZhbXA7IDB4ZjApOwomIzQzOwkJcnR3ZGV2LSZndDtkbV9pbmZvLnJyc3JfdmFsX2luaXQgPSBiYXNpY19yYXRlczsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobG9va3VwX2JzcykKJiM0MzsJCWNmZzgwMjExX3B1dF9ic3MocnR3ZGV2LSZndDtody0mZ3Q7d2lwaHksIGxvb2t1cF9ic3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQcm9ncmFtIHJlc3BvbnNlIHNsb3QgdGltZSAoYW5kLCB3aGVuIHNldF9wcmVhbWJsZSwgdGhlIEFDSyBwcmVhbWJsZSkgZnJvbQomIzQzOyAqIHRoZSBzZWxlY3RlZCBzY2FuIEJTUyBjYXBhYmlsaXRpZXM7IHRoZSBBUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCB5ZXQgaW4KJiM0MzsgKiBic3NfY29uZiBhdCBtZ2RfcHJlcGFyZV90eCgpIHRpbWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiYjNDM7CQkJCSAgICBjb25zdCB1OCAqYnNzaWQsIGJvb2wgc2V0X3ByZWFtYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZhbXA7dmlmLSZndDtic3NfY29uZjsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7CiYjNDM7CWJvb2wgc2hvcnRfcHJlYW1ibGUsIHNob3J0X3Nsb3Q7CiYjNDM7CXUxNiBjYXAgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtJmd0O3R5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGNvbmYtJmd0O2JzcykgewomIzQzOwkJYnNzID0gY29uZi0mZ3Q7YnNzOwomIzQzOwl9IGVsc2UgaWYgKGJzc2lkICZhbXA7JmFtcDsgaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKJiM0MzsJCWxvb2t1cF9ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHJ0d2Rldi0mZ3Q7aHctJmd0O3dpcGh5LCBOVUxMLAomIzQzOwkJCQkJICAgICAgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCQkgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAomIzQzOwkJCQkJICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJCWJzcyA9IGxvb2t1cF9ic3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJzcykgewomIzQzOwkJY2FwID0gYnNzLSZndDtjYXBhYmlsaXR5OwomIzQzOwl9IGVsc2UgaWYgKGNvbmYtJmd0O2Fzc29jX2NhcGFiaWxpdHkpIHsKJiM0MzsJCWNhcCA9IGNvbmYtJmd0O2Fzc29jX2NhcGFiaWxpdHk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzaG9ydF9wcmVhbWJsZSA9IGNvbmYtJmd0O3VzZV9zaG9ydF9wcmVhbWJsZTsKJiM0MzsJCXNob3J0X3Nsb3QgPSBjb25mLSZndDt1c2Vfc2hvcnRfc2xvdDsKJiM0MzsJCWdvdG8gcHJvZ3JhbTsKJiM0MzsJfQomIzQzOwlzaG9ydF9wcmVhbWJsZSA9ICEhKGNhcCAmYW1wOyBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpOwomIzQzOwlzaG9ydF9zbG90ID0gISEoY2FwICZhbXA7IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpOwomIzQzOwomIzQzO3Byb2dyYW06CiYjNDM7CWlmIChzZXRfcHJlYW1ibGUpCiYjNDM7CQlydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTsKJiM0MzsJcnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBzaG9ydF9zbG90KTsKJiM0MzsKJiM0MzsJaWYgKGxvb2t1cF9ic3MpCiYjNDM7CQljZmc4MDIxMV9wdXRfYnNzKHJ0d2Rldi0mZ3Q7aHctJmd0O3dpcGh5LCBsb29rdXBfYnNzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKJiM0Mzt7CiYjNDM7CXUxNiBiZWFjb25faW50ID0gdmlmLSZndDtic3NfY29uZi5iZWFjb25faW50OwomIzQzOwl1bnNpZ25lZCBpbnQgd2FpdF9tczsKJiM0MzsKJiM0MzsJaWYgKCFiZWFjb25faW50KQomIzQzOwkJcmV0dXJuIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9GQUxMQkFDS19NUzsKJiM0MzsKJiM0MzsJd2FpdF9tcyA9IERJVl9ST1VORF9VUChiZWFjb25faW50ICogMTAyNCwgMTAwMCkgJiM0MzsgMjA7CiYjNDM7CXJldHVybiBjbGFtcF90KHVuc2lnbmVkIGludCwgd2FpdF9tcywgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX01JTl9NUywKJiM0MzsJCSAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3luYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoc3luYy0mZ3Q7YnNzaWQsIGJzc2lkKTsKJiM0MzsJc3luYy0mZ3Q7c2VlbiA9IGZhbHNlOwomIzQzOwlzeW5jLSZndDtzZWVuX2NvdW50ID0gMDsKJiM0MzsJc3luYy0mZ3Q7YWN0aXZlID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N5bmMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdG9wKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3luYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlzeW5jLSZndDthY3RpdmUgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N5bmMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnR3ODcyM2JzX2F1dGhfc3luY19zZWVuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgc2VlbjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzeW5jLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXNlZW4gPSBzeW5jLSZndDtzZWVuOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3luYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnR3ODcyM2JzX2F1dGhfc3luY193YWl0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgaW50IHdhaXRfbXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CiYjNDM7CXJldHVybiB3YWl0X2V2ZW50X3RpbWVvdXQoc3luYy0mZ3Q7d2FpdCwgcnR3ODcyM2JzX2F1dGhfc3luY19zZWVuKHJ0d2RldiksCiYjNDM7CQkJCSAgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSkgJmd0OyAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfaXNfYXV0aChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXJldHVybiBydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBpbmZvICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGluZm8tJmd0O3N1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0FVVEg7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlcGxpY2F0ZSB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIHJlZ2lzdGVyIHByb2dyYW1taW5nIHJpZ2h0IGJlZm9yZQomIzQzOyAqIGF1dGguIFJldHVybnMgdHJ1ZSBmb3IgYSBmcmVzaCBqb2luIChCU1NJRCBjaGFuZ2VkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfam9pbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfdmlmICpydHd2aWYgPSAoc3RydWN0IHJ0d192aWYgKil2aWYtJmd0O2Rydl9wcml2OwomIzQzOwlib29sIGZyZXNoX2pvaW47CiYjNDM7CXUxNiByZXRyeV9saW1pdDsKJiM0MzsKJiM0MzsJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZnJlc2hfam9pbiA9ICFldGhlcl9hZGRyX2VxdWFsKHJ0d3ZpZi0mZ3Q7YnNzaWQsIGJzc2lkKTsKJiM0MzsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KHJ0d3ZpZi0mZ3Q7YnNzaWQsIGJzc2lkKTsKJiM0MzsJcnR3dmlmLSZndDthaWQgPSAwOwomIzQzOwlydHd2aWYtJmd0O25ldF90eXBlID0gUlRXX05FVF9NR0RfTElOS0VEOwomIzQzOwlydHdfdmlmX3BvcnRfY29uZmlnKHJ0d2RldiwgcnR3dmlmLAomIzQzOwkJCSAgICBQT1JUX1NFVF9CU1NJRCB8IFBPUlRfU0VUX0FJRCB8IFBPUlRfU0VUX05FVF9UWVBFKTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IG5hcnJvdyBSUlNSIG9yIHN3aXRjaCB0byBzaG9ydC1wcmVhbWJsZSByZXNwb25zZXMgYmVmb3JlIHRoZQomIzQzOwkgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXQKJiM0MzsJICogKDB4ZmZmZjEsIGxvbmcgcHJlYW1ibGUpLiBPbmx5IHNsb3QgdGltZSBpcyBwcm9ncmFtbWVkIGVhcmx5LgomIzQzOwkgKi8KJiM0MzsJcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJ0d19md19iZWFjb25fZmlsdGVyX2NvbmZpZyhydHdkZXYsIGZhbHNlLCB2aWYpOwomIzQzOwomIzQzOwkvKiBNYXRjaCB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIFRYIHN0YXRlIChzZXRfbXNyIGRpcmVjdGx5LCBrZWVwCiYjNDM7CSAqIEJDTl9DVFJMIC8gQkNOUV9ETCBzZXQsIHJlYXNzZXJ0IFRCVFQvUkVTUF9TSUZTIGV2ZXJ5IGpvaW4pLgomIzQzOwkgKi8KJiM0MzsJcnR3X3dyaXRlOChydHdkZXYsIFJFR19CQ05fQ1RSTCwKJiM0MzsJCSAgIEJJVF9ESVNfVFNGX1VEVCB8IEJJVF9FTl9CQ05fRlVOQ1RJT04pOwomIzQzOwlydHdfd3JpdGUzMl9zZXQocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCwgQklUX0VOX0JDTlFfREwpOwomIzQzOwlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgJiM0MzsgMSwgMHg2NCAmYW1wOyAweGZmKTsKJiM0MzsJcnR3X3dyaXRlOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICYjNDM7IDIsCiYjNDM7CQkgICAocnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgJiM0MzsgMikgJmFtcDsgMHhmMCkgfCAoMHg2NCAmZ3Q7Jmd0OyA4KSk7CiYjNDM7CXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFU1BfU0lGU19DQ0ssIDB4MDgwOCk7CiYjNDM7CXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFU1BfU0lGU19PRkRNLCAweDBhMGEpOwomIzQzOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJFR19SWEZMVE1BUDAsIDB4ZmZmZik7CiYjNDM7CXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JYRkxUTUFQMiwgMHhmZmZmKTsKJiM0MzsJcnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHJ0d2RldiwgdHJ1ZSk7CiYjNDM7CiYjNDM7CXJldHJ5X2xpbWl0ID0gKFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUICZsdDsmbHQ7IDgpIHwKJiM0MzsJCSAgICAgIFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVRSWV9MSU1JVCwgcmV0cnlfbGltaXQpOwomIzQzOwomIzQzOwlydHc4NzIzYnNfY29uZmlnX3NlY19jZmcocnR3ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZXNoX2pvaW47CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSB2ZW5kb3Igc2VuZHMgYSBkZWF1dGggdG8gdGhlIHRhcmdldCBiZWZvcmUgYXV0aCB0byBjbGVhciBzdGFsZSBBUC1zaWRlCiYjNDM7ICogc3RhdGU7IHN5bnRoZXNpemUgYW5kIFRYIG9uZSwgdGhlbiBsZXQgdGhlIEFQIHNldHRsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfdHhfcHJlX2F1dGhfZGVhdXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkJCSBjb25zdCB1OCAqYnNzaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbCA9IHt9OwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdW5zaWduZWQgaW50IGZyYW1lX2xlbiwgaGVhZHJvb207CiYjNDM7CiYjNDM7CWZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgJiM0Mzsgc2l6ZW9mKG1nbXQtJmd0O3UuZGVhdXRoKTsKJiM0MzsJaGVhZHJvb20gPSBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3BrdF9kZXNjX3N6ICYjNDM7IDg7CiYjNDM7CiYjNDM7CXNrYiA9IGRldl9hbGxvY19za2IoaGVhZHJvb20gJiM0MzsgZnJhbWVfbGVuKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pOwomIzQzOwltZ210ID0gc2tiX3B1dF96ZXJvKHNrYiwgZnJhbWVfbGVuKTsKJiM0MzsJbWdtdC0mZ3Q7ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKJiM0MzsJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCk7CiYjNDM7CW1lbWNweShtZ210LSZndDtkYSwgYnNzaWQsIEVUSF9BTEVOKTsKJiM0MzsJbWVtY3B5KG1nbXQtJmd0O3NhLCB2aWYtJmd0O2FkZHIsIEVUSF9BTEVOKTsKJiM0MzsJbWVtY3B5KG1nbXQtJmd0O2Jzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwomIzQzOwltZ210LSZndDt1LmRlYXV0aC5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKJiM0MzsKJiM0MzsJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKJiM0MzsJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwomIzQzOwlpbmZvLSZndDtjb250cm9sLnZpZiA9IHZpZjsKJiM0MzsKJiM0MzsJcnR3X3R4KHJ0d2RldiwgJmFtcDtjb250cm9sLCBza2IpOwomIzQzOwltc2xlZXAoMTAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT3JjaGVzdHJhdGUgdGhlIHByZS1hdXRoIGpvaW46IHByb2dyYW0gdGhlIHZlbmRvciBqb2luIHN0YXRlLCBzZW5kIHRoZQomIzQzOyAqIHByZS1hdXRoIGRlYXV0aCwgd2FpdCBmb3IgYSBiZWFjb24gZnJvbSB0aGUgdGFyZ2V0LCB0aGVuIHJlcGxheSB0aGUKJiM0MzsgKiBwcmUtYXV0aCBjb2V4IEgyQ3MgLSBvbmNlIHBlciBmcmVzaCBCU1NJRC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfdmlmICpydHd2aWY7CiYjNDM7CWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CiYjNDM7CWJvb2wgZnJlc2hfam9pbjsKJiM0MzsKJiM0MzsJaWYgKCFydHc4NzIzYnNfbWdkX3ByZXBhcmVfaXNfYXV0aChydHdkZXYsIGluZm8pIHx8ICF2aWYgfHwKJiM0MzsJICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnR3dmlmID0gKHN0cnVjdCBydHdfdmlmICopdmlmLSZndDtkcnZfcHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIodmlmLSZndDtjZmcuYXBfYWRkcikpCiYjNDM7CQlic3NpZCA9IHZpZi0mZ3Q7Y2ZnLmFwX2FkZHI7CiYjNDM7CWVsc2UgaWYgKHZpZi0mZ3Q7YnNzX2NvbmYuYnNzaWQgJmFtcDsmYW1wOyAhaXNfemVyb19ldGhlcl9hZGRyKHZpZi0mZ3Q7YnNzX2NvbmYuYnNzaWQpKQomIzQzOwkJYnNzaWQgPSB2aWYtJmd0O2Jzc19jb25mLmJzc2lkOwomIzQzOwomIzQzOwlpZiAoIWJzc2lkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmcmVzaF9qb2luID0gcnR3ODcyM2JzX21nZF9wcmVwYXJlX2pvaW4ocnR3ZGV2LCB2aWYsIGJzc2lkKTsKJiM0MzsKJiM0MzsJaWYgKGZyZXNoX2pvaW4gfHwgIXJ0d3ZpZi0mZ3Q7cHJlX2F1dGhfam9pbl9kb25lKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgd2FpdF9tcyA9IHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdF9tcyh2aWYpOwomIzQzOwomIzQzOwkJcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChydHdkZXYsIGJzc2lkKTsKJiM0MzsJCXJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgocnR3ZGV2LCB2aWYsIGJzc2lkKTsKJiM0MzsJCXJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChydHdkZXYsIHdhaXRfbXMpOwomIzQzOwkJcnR3ODcyM2JzX2F1dGhfc3luY19zdG9wKHJ0d2Rldik7CiYjNDM7CQlydHd2aWYtJmd0O3ByZV9hdXRoX2pvaW5fZG9uZSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFydHd2aWYtJmd0O3ByZV9hdXRoX2gyY19zZW50KSB7CiYjNDM7CQlydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7CiYjNDM7CQlydHd2aWYtJmd0O3ByZV9hdXRoX2gyY19zZW50ID0gdHJ1ZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0d19vcHNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzg3LDYgJiM0Mzs4NDQsMTMgQEAgc3RhdGljIHZvaWQgcnR3X29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0FTU09DKSB7CiAJCXJ0d192aWZfYXNzb2NfY2hhbmdlZChydHd2aWYsIGNvbmYpOwogCQlpZiAodmlmLSZndDtjZmcuYXNzb2MpIHsKJiM0MzsJCQlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKJiM0MzsJCQkJcnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHJ0d2RldiwgZmFsc2UpOwomIzQzOwkJCQlydHc4NzIzYnNfYXBwbHlfYmFzaWNfcmF0ZXMocnR3ZGV2LCB2aWYsIE5VTEwpOwomIzQzOwkJCQlydHc4NzIzYnNfZW5hYmxlX3RzZl91cGRhdGUocnR3ZGV2KTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX0ZJTklTSCk7CiAKIAkJCXJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTsKQEAgLTQwOCw2ICYjNDM7ODcyLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCWlmICh0ZXN0X2JpdChSVFdfRkxBR19TQ0FOTklORywgcnR3ZGV2LSZndDtmbGFncykpCiAJCQkJcnR3X2h3X3NjYW5fYWJvcnQocnR3ZGV2KTsKIAomIzQzOwkJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOwomIzQzOwkJCSAgICB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewomIzQzOwkJCQlydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCBmYWxzZSk7CiYjNDM7CQkJCXJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhydHdkZXYpOwomIzQzOwkJCQlydHd2aWYtJmd0O3ByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7CiYjNDM7CQkJCXJ0d3ZpZi0mZ3Q7cHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7CiYjNDM7CQkJfQogCQl9CiAKIAkJY29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFOwpAQCAtNDE1LDggJiM0Mzs4ODYsMjYgQEAgc3RhdGljIHZvaWQgcnR3X29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JTU0lEKSB7CiYjNDM7CQlib29sIGJzc2lkX2NsZWFyZWQgPSBpc196ZXJvX2V0aGVyX2FkZHIoY29uZi0mZ3Q7YnNzaWQpOwomIzQzOwkJYm9vbCBic3NpZF9jaGFuZ2VkID0gIWV0aGVyX2FkZHJfZXF1YWwocnR3dmlmLSZndDtic3NpZCwKJiM0MzsJCQkJCQkgICAgICAgY29uZi0mZ3Q7YnNzaWQpOwomIzQzOwomIzQzOwkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJmFtcDsmYW1wOyBic3NpZF9jaGFuZ2VkKSB7CiYjNDM7CQkJcnR3dmlmLSZndDtwcmVfYXV0aF9oMmNfc2VudCA9IGZhbHNlOwomIzQzOwkJCXJ0d3ZpZi0mZ3Q7cHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7CiYjNDM7CQl9CiAJCWV0aGVyX2FkZHJfY29weShydHd2aWYtJmd0O2Jzc2lkLCBjb25mLSZndDtic3NpZCk7CiAJCWNvbmZpZyB8PSBQT1JUX1NFVF9CU1NJRDsKJiM0MzsJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICZhbXA7JmFtcDsgYnNzaWRfY2xlYXJlZCkgewomIzQzOwkJCXJ0d3ZpZi0mZ3Q7YWlkID0gMDsKJiM0MzsJCQlydHd2aWYtJmd0O25ldF90eXBlID0gUlRXX05FVF9OT19MSU5LOwomIzQzOwkJCWNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRSB8IFBPUlRfU0VUX0FJRDsKJiM0MzsJCQlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLAomIzQzOwkJCQkgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OIHwKJiM0MzsJCQkJICAgQklUX0RJU19BVElNKTsKJiM0MzsJCX0KIAkJaWYgKCFydHdfY29yZV9jaGVja19zdGFfYWN0aXZlKHJ0d2RldikpCiAJCQlydHdfY2xlYXJfb3BfY2hhbihydHdkZXYpOwogCQllbHNlCkBAIC00NDgsOCAmIzQzOzkzNywxNyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfTVVfR1JPVVBTKQogCQlydHdfY2hpcF9zZXRfZ2lkX3RhYmxlKHJ0d2RldiwgdmlmLCBjb25mKTsKIAotCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0VSUF9TTE9UKQomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUgJmFtcDsmYW1wOwomIzQzOwkgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQomIzQzOwkJcnR3ODcyM2JzX3NldF9hY2tfcHJlYW1ibGUocnR3ZGV2LCBjb25mLSZndDt1c2Vfc2hvcnRfcHJlYW1ibGUpOwomIzQzOwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgewomIzQzOwkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiYjNDM7CQkJcnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBjb25mLSZndDt1c2Vfc2hvcnRfc2xvdCk7CiAJCXJ0d19jb25mX3R4KHJ0d2RldiwgcnR3dmlmKTsKJiM0MzsJfQogCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfUFMpCiAJCXJ0d19yZWNhbGNfbHBzKHJ0d2RldiwgTlVMTCk7CkBAIC02MDksMTEgJiM0MzsxMTA3LDE5IEBAIHN0YXRpYyBpbnQgcnR3X29wc19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKIAkJa2V5LSZndDtod19rZXlfaWR4ID0gaHdfa2V5X2lkeDsKIAkJcnR3X3NlY193cml0ZV9jYW0ocnR3ZGV2LCBzZWMsIHN0YSwga2V5LAogCQkJCSAgaHdfa2V5X3R5cGUsIGh3X2tleV9pZHgpOwomIzQzOwkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7IHZpZiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJmFtcDsmYW1wOwomIzQzOwkJICAgICEoa2V5LSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKQomIzQzOwkJCXJ0dzg3MjNic19jb25maWdfZGVmYXVsdF9rZXlfc2VhcmNoKHJ0d2RldiwgdHJ1ZSk7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6CiAJCXJ0d19oY2lfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTsKIAkJcnR3X21hY19mbHVzaF9hbGxfcXVldWVzKHJ0d2RldiwgZmFsc2UpOwogCQlydHdfc2VjX2NsZWFyX2NhbShydHdkZXYsIHNlYywga2V5LSZndDtod19rZXlfaWR4KTsKJiM0MzsJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyB2aWYgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGtleS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkKJiM0MzsJCQlydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIGZhbHNlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC03MDMsOCAmIzQzOzEyMDksMjMgQEAgc3RhdGljIHZvaWQgcnR3X29wc19tZ2RfcHJlcGFyZV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAogCW11dGV4X2xvY2soJmFtcDtydHdkZXYtJmd0O211dGV4KTsKIAlydHdfbGVhdmVfbHBzX2RlZXAocnR3ZGV2KTsKLQlydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTsKLQlydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCS8qIFdha2UgZnJvbSBzb2Z0IElQUyBhbmQgcnVuIHRoZSB2ZW5kb3Igam9pbiBzZXF1ZW5jZS4gVGhlIFJGSwomIzQzOwkJICogaXMgaGFuZGxlZCBieSB0aGUgb25jZS1vbmx5IHBvd2VyLW9uIElRSyBwbHVzIHRoZSBwcy5jCiYjNDM7CQkgKiBwb3N0LUlQUyBSRi1idXMgcmVjb3ZlcnksIG5vdCBhIGZyZXNoIGNhbGlicmF0aW9uIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChydHdfbGVhdmVfaXBzKHJ0d2RldikpIHsKJiM0MzsJCQlydHdfZXJyKHJ0d2RldiwgJiMzNDtmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0ZSBmb3IgbWdkIHR4XG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTsKJiM0MzsJCXJ0dzg3MjNic19tZ2RfcHJlcGFyZV9hdXRoX2pvaW4ocnR3ZGV2LCB2aWYsIGluZm8pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcnR3X2NvZXhfY29ubmVjdF9ub3RpZnkocnR3ZGV2LCBDT0VYX0FTU09DSUFURV9TVEFSVCk7CiYjNDM7CQlydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7CiYjNDM7CX0KJiM0MztvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cnR3ZGV2LSZndDttdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmMKaW5kZXggY2Q5MjU0MzcwZmNjNzIuLjE2MjI4Y2FlMjUyZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYwpAQCAtMjE3NCwxMSAmIzQzOzIxNzQsMTMgQEAgaW50IHJ0d19jb3JlX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cnR3ZGV2LSZndDt0eHFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtydHdkZXYtJmd0O3R4X3JlcG9ydC5xX2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3J0d2Rldi0mZ3Q7YXV0aF9zeW5jLmxvY2spOwogCiAJbXV0ZXhfaW5pdCgmYW1wO3J0d2Rldi0mZ3Q7bXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtydHdkZXYtJmd0O2hhbC50eF9wb3dlcl9tdXRleCk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cnR3ZGV2LSZndDtjb2V4LndhaXQpOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmMud2FpdCk7CiAJaW5pdF9jb21wbGV0aW9uKCZhbXA7cnR3ZGV2LSZndDtscHNfbGVhdmVfY2hlY2spOwogCWluaXRfY29tcGxldGlvbigmYW1wO3J0d2Rldi0mZ3Q7Zndfc2Nhbl9kZW5zaXR5KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaAppbmRleCA5YzBiNzQ2NTQwYjBlZS4uOTliOTlhYTNkNjAwZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC04MjgsNiAmIzQzOzgyOSw4IEBAIHN0cnVjdCBydHdfdmlmIHsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggcG9ydDsKIAl1OCBiY25fY3RybDsKJiM0MzsJYm9vbCBwcmVfYXV0aF9oMmNfc2VudDsKJiM0MzsJYm9vbCBwcmVfYXV0aF9qb2luX2RvbmU7CiAJc3RydWN0IGxpc3RfaGVhZCByc3ZkX3BhZ2VfbGlzdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB0eF9wYXJhbXNbSUVFRTgwMjExX05VTV9BQ1NdOwogCWNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7CkBAIC0yMDU2LDYgJiM0MzsyMDU5LDIwIEBAIHN0cnVjdCBydHdfaHdfc2Nhbl9pbmZvIHsKIAl1OCBvcF9idzsKIH07CiAKJiM0MzsvKgomIzQzOyAqIFN5bmNocm9uaXNlcyB0aGUgcHJlLWF1dGggd2FpdCBvbiBhIGJlYWNvbiBvciBwcm9iZSByZXNwb25zZSBmcm9tIHRoZQomIzQzOyAqIHRhcmdldCBCU1NJRCBiZWZvcmUgdGhlIGpvaW4gc2VxdWVuY2UgY29udGludWVzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBydHdfYXV0aF9zeW5jIHsKJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKJiM0MzsJLyogUHJvdGVjdHMgdGhlIGZpZWxkcyBiZWxvdy4gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwl1OCBic3NpZFtFVEhfQUxFTl07CiYjNDM7CWJvb2wgYWN0aXZlOwomIzQzOwlib29sIHNlZW47CiYjNDM7CXUzMiBzZWVuX2NvdW50OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcnR3X2RldiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwpAQCAtMjEzMiw2ICYjNDM7MjE0OSw4IEBAIHN0cnVjdCBydHdfZGV2IHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBmd19zY2FuX2RlbnNpdHk7CiAJYm9vbCBhcF9hY3RpdmU7CiAKJiM0MzsJc3RydWN0IHJ0d19hdXRoX3N5bmMgYXV0aF9zeW5jOwomIzQzOwogCWJvb2wgbGVkX3JlZ2lzdGVyZWQ7CiAJY2hhciBsZWRfbmFtZVszMl07CiAJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfY2RldjsKQEAgLTIxOTMsNiAmIzQzOzIyMTIsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7dHhfc3RiYzsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXVuc2lnbmVkIGxvbmcgbWFjX2lkOwpAQCAtMjI4Myw0ICYjNDM7MjMwOCw4IEBAIGJvb2wgcnR3X2NvcmVfY2hlY2tfc3RhX2FjdGl2ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTsKIHZvaWQgcnR3X2NvcmVfZW5hYmxlX2JlYWNvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVuYWJsZSk7CiB2b2lkIHJ0d19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKTsKJiM0Mzt2b2lkIHJ0dzg3MjNic19hdXRoX3N5bmNfcngoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHJ0d19yeF9wa3Rfc3RhdCAqcGt0X3N0YXQsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaAppbmRleCAwOGU5NDk0OTc3ZTA2YS4uYjZkNGU4ZWQ5OGM3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaApAQCAtNDc5LDYgJiM0Mzs0NzksNyBAQAogI2RlZmluZSBCSVRfRElTX1RTRl9VRFQJCUJJVCg0KQogI2RlZmluZSBCSVRfRU5fQkNOX0ZVTkNUSU9OCUJJVCgzKQogI2RlZmluZSBCSVRfRU5fVFhCQ05fUlBUCUJJVCgyKQomIzQzOyNkZWZpbmUgQklUX0RJU19BVElNCQlCSVQoMCkKICNkZWZpbmUgUkVHX0JDTl9DVFJMX0NMSU5UMAkweDA1NTEKICNkZWZpbmUgUkVHX0RSVkVSTFlJTlQJCTB4MDU1OAogI2RlZmluZSBSRUdfQkNORE1BVElNCQkweDA1NTkKQEAgLTUxOCw2ICYjNDM7NTE5LDcgQEAKICNkZWZpbmUgQklUX1VDX01EX0VOCQlCSVQoMTYpCiAjZGVmaW5lIEJJVF9SWFNLX1BFUlBLVAkJQklUKDE1KQogI2RlZmluZSBCSVRfSFRDX0xPQ19DVFJMCUJJVCgxNCkKJiM0MzsjZGVmaW5lIEJJVF9BTUYJCQlCSVQoMTMpCiAjZGVmaW5lIEJJVF9SUEZNX0NBTV9FTkFCTEUJQklUKDEyKQogI2RlZmluZSBCSVRfVEFfQkNOCQlCSVQoMTEpCiAjZGVmaW5lIEJJVF9SQ1JfQURGCQlCSVQoMTEpCkBAIC02MjgsNiAmIzQzOzYzMCw3IEBACiAjZGVmaW5lIFJFR19QU0QJCQkweDA5MTAKICNkZWZpbmUgQklUX1BTRF9JTkkJCUdFTk1BU0soMjMsIDIyKQogI2RlZmluZSBSRUdfU0lOR0xFX1RPTkVfQ09OVF9UWAkweDA5MTQKJiM0MzsjZGVmaW5lIFJFR19CQl9TRUxfQlRHXzg3MjNCCTB4MDk0OAogI2RlZmluZSBSRUdfQUdDX1RBQkxFCQkweDA5NTgKICNkZWZpbmUgUkVHX1JGRV9DVFJMX0UJCTB4MDk3NAogI2RlZmluZSBSRUdfMk5EX0NDQV9DVFJMCTB4MDk3NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCmluZGV4IDAxZmQyOTlhYmI3ZmU5Li41MzAzOTc1ZDAwYTJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwpAQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJcnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTsKIAotCS8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplICZsdDsgMTQgb3Igc2l6ZSAmZ3Q7IDgxOTIgYW5kCi0JICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuCiYjNDM7CS8qIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MgomIzQzOwkgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC4KIAkgKi8KLQlpZiAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCICZhbXA7JmFtcDsgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewomIzQzOwlpZiAoKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fAomIzQzOwkgICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwOC4uYjI5NGJjYzRkODI4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jCkBAIC0yMCw2ICYjNDM7MjAsMTYgQEAKICNpbmNsdWRlICYjMzQ7dHguaCYjMzQ7CiAKICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFUwkJCTUwCiYjNDM7I2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NUwkJCQkxMDAwCiYjNDM7CiYjNDM7LyogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OCw5MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDsKJiM0MzsJdTMyIGZyZWVfdHhwZzsKJiM0MzsJdTE2IHB1YnFfbnVtOwomIzQzOwomIzQzOwlpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGdfdGJsID0gJmFtcDtydHdkZXYtJmd0O2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXB1YnFfbnVtID0gcnR3ZGV2LSZndDtmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtJmd0O2hxX251bSAtIHBnX3RibC0mZ3Q7bHFfbnVtIC0KJiM0MzsJCSAgIHBnX3RibC0mZ3Q7bnFfbnVtIC0gcGdfdGJsLSZndDtleHFfbnVtIC0gcGdfdGJsLSZndDtnYXBxX251bTsKJiM0MzsJZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CWlmIChmcmVlX3R4cGcpIHsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2hpZ2gsIGZyZWVfdHhwZyAmYW1wOyAweGZmKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2xvdywgKGZyZWVfdHhwZyAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZik7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsIChmcmVlX3R4cGcgJmd0OyZndDsgMjQpICZhbXA7IDB4ZmYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwl1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CiYjNDM7CWlmICghZnJlZV90eHBnKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoLCBmcmVlX3R4cGcgJmFtcDsgMHhmZik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93LCAoZnJlZV90eHBnICZndDsmZ3Q7IDE2KSAmYW1wOyAweGZmKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCAoZnJlZV90eHBnICZndDsmZ3Q7IDI0KSAmYW1wOyAweGZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJc3dpdGNoIChxdWV1ZSkgewomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CQ046CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0gyQzoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSEkwOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9NR01UOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9WTzoKJiM0MzsJCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCk7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZJOgomIzQzOwkJcmV0dXJuIGF0b21pY19yZWFkKCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwpOwomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CRToKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQks6CiYjNDM7CQlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2xvdyk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAogCQkJCSAgICBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDsKIAotCWlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkgewomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwkJaW50IGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CiYjNDM7CQlpZiAoZGVkaWNhdGVkICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gZGVkaWNhdGVkOwomIzQzOwkJcGFnZXNfZnJlZSA9IGRlZGljYXRlZCAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fc3luY19mcmVlX3R4cGcocnR3ZGV2KTsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlwYWdlc19mcmVlID0gZGVkaWNhdGVkICYjNDM7IGF0b21pY19yZWFkKCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzcyMSwxMzEgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgaTsKJiM0MzsJdTggZnJlZTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIC0xLCAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpOwomIzQzOwkJaWYgKGZyZWUpIHsKJiM0MzsJCQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIGZyZWUgLSAxKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBwYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHF1ZXVlKSB7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZJOgomIzQzOwkJZGVkaWNhdGVkID0gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CRToKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQks6CiYjNDM7CQlkZWRpY2F0ZWQgPSAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZWRpY2F0ZWQgPSAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpOwomIzQzOwlpZiAocGFnZXMgJmx0Oz0gZnJlZSkgewomIzQzOwkJYXRvbWljX3N1YihwYWdlcywgZGVkaWNhdGVkKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWF0b21pY19zZXQoZGVkaWNhdGVkLCAwKTsKJiM0MzsJCWF0b21pY19zdWIocGFnZXMgLSBmcmVlLCAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZXM7CiAJYm9vbCBidXNfY2xhaW07CiAJc2l6ZV90IHR4c2l6ZTsKJiM0MzsJc2l6ZV90IHdyaXRlX3NpemU7CiAJdTMyIHR4YWRkcjsKIAlpbnQgcmV0OwogCi0JdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItJmd0O2xlbiwgcXVldWUpOwotCWlmICghdHhhZGRyKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJdHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpOwomIzQzOwkJd3JpdGVfc2l6ZSA9IHR4c2l6ZSAmZ3Q7IFJUV19TRElPX0JMT0NLX1NJWkUgPwomIzQzOwkJCSAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIG9yaWdfbGVuKTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikgewomIzQzOwkJdW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47CiAKLQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBza2ItJmd0O2xlbik7CiYjNDM7CQlpZiAoc2tiX3RhaWxyb29tKHNrYikgJmx0OyBwYWRkaW5nKSB7CiYjNDM7CQkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsCiYjNDM7CQkJCQkgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLAomIzQzOwkJCQkJICAgICAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwl0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpOwomIzQzOwlpZiAoIXR4YWRkcikgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCXJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwlyZXQgPSBydHdfc2Rpb193YWl0X3R4X29xdChydHdkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdHJpbTsKIAogCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItJmd0O2RhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSkKIAkJcnR3X3dhcm4ocnR3ZGV2LCAmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XG4mIzM0OywKIAkJCSBfX2Z1bmNfXywgcXVldWUpOwogCiAJYnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTsKLQogCWlmIChidXNfY2xhaW0pCiAJCXNkaW9fY2xhaW1faG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwotCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLCB0eHNpemUpOwotCiYjNDM7CXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCB0eGFkZHIsIHNrYi0mZ3Q7ZGF0YSwKJiM0MzsJCQkgICAgICAgd3JpdGVfc2l6ZSk7CiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jKTsKIAomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJ0bDg3MjNicykgewomIzQzOwkJcGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtJmd0O2NoaXAtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CQlydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTsKJiM0MzsJfQogCWlmIChyZXQpCiAJCXJ0d193YXJuKHJ0d2RldiwKIAkJCSAmIzM0O0ZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4JiMzNDssCi0JCQkgdHhzaXplLCB0eGFkZHIpOwomIzQzOwkJCSB3cml0ZV9zaXplLCB0eGFkZHIpOwogCiYjNDM7b3V0X3RyaW06CiYjNDM7CWlmICh3cml0ZV9zaXplICZndDsgb3JpZ19sZW4pCiYjNDM7CQlza2JfdHJpbShza2IsIG9yaWdfbGVuKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NzcsNyAmIzQzOzg1MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAotCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUOwomIzQzOwllbHNlCiYjNDM7CQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8CiYjNDM7CQkJCSAgICAgICBSRUdfU0RJT19ISU1SX0NQV00xOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTY4NSw2ICYjNDM7ODY1LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJdTggc2l6ZSwgdGltZW91dDsKIAogCXN3aXRjaCAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCkgewomIzQzOwljYXNlIFJUV19DSElQX1RZUEVfODcyM0I6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOgogCWNhc2UgUlRXX0NISVBfVFlQRV84ODIxQToKIAljYXNlIFJUV19DSElQX1RZUEVfODgxMkE6CkBAIC03MTIsNiAmIzQzOzg5Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQkgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpOwogCiAJcnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIDMgJmx0OyZsdDsgMik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTc0OSw5ICYjNDM7OTMyLDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi0mZ3Q7Y2hpcDsKJiM0MzsJc3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSAmYW1wO3J0d2Rldi0mZ3Q7ZmlmbzsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7CiYjNDM7CXUzMiBmcmVlX3R4cGc7CiYjNDM7CXUxNiBwdWJxX251bTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnIHx8ICFmaWZvLSZndDthY3FfcGdfbnVtKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CWlmIChmaWZvLSZndDthY3FfcGdfbnVtICZsdDs9IHBnX3RibC0mZ3Q7aHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bHFfbnVtICYjNDM7CiYjNDM7CQkJCSAgICBwZ190YmwtJmd0O25xX251bSAmIzQzOyBwZ190YmwtJmd0O2V4cV9udW0gJiM0MzsKJiM0MzsJCQkJICAgIHBnX3RibC0mZ3Q7Z2FwcV9udW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXB1YnFfbnVtID0gZmlmby0mZ3Q7YWNxX3BnX251bSAtIHBnX3RibC0mZ3Q7aHFfbnVtIC0gcGdfdGJsLSZndDtscV9udW0gLQomIzQzOwkJICAgcGdfdGJsLSZndDtucV9udW0gLSBwZ190YmwtJmd0O2V4cV9udW0gLSBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSwKJiM0MzsJCSAgICBCSVRfUlFQTl9ORShwZ190YmwtJmd0O25xX251bSwgcGdfdGJsLSZndDtleHFfbnVtKSk7CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sCiYjNDM7CQkgICAgQklUX1JRUE5fSExQKHBnX3RibC0mZ3Q7aHFfbnVtLCBwZ190YmwtJmd0O2xxX251bSwgcHVicV9udW0pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsJcnR3X3NkaW9faW5pdF9mcmVlX3R4cGcocnR3ZGV2KTsKIAlydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJY2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgJmFtcDsKJiM0MzsJCQlSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7CiYjNDM7CQlpZiAoY2xlYXIpCiYjNDM7CQkJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7CiYjNDM7CX0KJiM0MzsKIAlydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNSw3ICYjNDM7MTAzOSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAotCXF1ZXVlX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwomIzQzOwltb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKQpAQCAtODMxLDYgJiM0MzsxMDU1LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCiAJdmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpOwogCXZhbCAmYW1wOz0gMHhmZmY4OwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJdmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTsKIAlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7CiB9CiAKQEAgLTkzNyw2ICYjNDM7MTE2MywxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlza2JfcXVldWVfdGFpbCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKIAomIzQzOwkvKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBGSUZPIGZpbGxzIHBhc3QKJiM0MzsJICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzCiYjNDM7CSAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWAomIzQzOwkgKiBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZHJhaW5zIGJlbG93IHRoZSBsb3cgd2F0ZXJtYXJrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7IHF1ZXVlICZsdDsgUlRXX1RYX1FVRVVFX0JDTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gJmFtcDsmYW1wOwomIzQzOwkgICAgc2tiX3F1ZXVlX2xlbigmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSkgJmd0Oz0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7CiYjNDM7CQlpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtJmd0O2h3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTY1LDYgJiM0MzsxMjAzLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3J4X3NrYihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJ0d191cGRhdGVfcnhfZnJlcV9mb3JfaW52YWxpZChydHdkZXYsIHNrYiwgcnhfc3RhdHVzLCBwa3Rfc3RhdCk7CiAJcnR3X3J4X3N0YXRzKHJ0d2RldiwgcGt0X3N0YXQtJmd0O3ZpZiwgc2tiKTsKIAomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmd0Oz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkKJiM0MzsJCXJ0dzg3MjNic19hdXRoX3N5bmNfcngocnR3ZGV2LAomIzQzOwkJCQkgICAgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhLAomIzQzOwkJCQkgICAgICAgc2tiLSZndDtsZW4sIHBrdF9zdGF0LCByeF9zdGF0dXMpOwomIzQzOwogCWllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0d2Rldi0mZ3Q7aHcsIHNrYik7CiB9CiAKQEAgLTEwOTUsNiAmIzQzOzEzMzgsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpCiAJCXJ0d19zZGlvX3J4X2lzcihydHdkZXYpOwogCX0KIAomIzQzOwkvKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWQKJiM0MzsJICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZQomIzQzOwkgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJaGlzciAmYW1wOz0gcnR3c2Rpby0mZ3Q7aXJxX21hc2sgJmFtcDsgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7CiAKIAlydHdzZGlvLSZndDtpcnFfdGhyZWFkID0gTlVMTDsKQEAgLTEyMzEsMzIgJiM0MzsxNDgxLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAotCQkJCSAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiYjNDM7c3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCSAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJICAgICBib29sICpwcm9jZXNzZWQpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgcV9tYXA7CiAJaW50IHJldDsKIAomIzQzOwkqcHJvY2Vzc2VkID0gZmFsc2U7CiAJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pOwogCWlmICghc2tiKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAomIzQzOwkqcHJvY2Vzc2VkID0gdHJ1ZTsKJiM0MzsJcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7CiAJaWYgKHJldCkgewogCQlza2JfcXVldWVfaGVhZCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAKIAlydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsgcXVldWUgJmx0OyBSVFdfVFhfUVVFVUVfQkNOICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDs9IFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikgewomIzQzOwkJcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTsKJiM0MzsJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi0mZ3Q7aHcsIHFfbWFwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspOwomIzQzOwkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwKJiM0MzsJCQkgICAgIHdvcmspOwogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbzsKIAlzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2OwomIzQzOwlib29sIHByb2Nlc3NlZDsKIAlpbnQgbGltaXQsIHF1ZXVlOwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CkBAIC0xMjY3LDcgJiM0MzsxNTMzLDI0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJZm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgJmd0Oz0gMDsgcXVldWUtLSkgewogCQlmb3IgKGxpbWl0ID0gMDsgbGltaXQgJmx0OyAxMDAwOyBsaW1pdCYjNDM7JiM0MzspIHsKLQkJCXJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsICZhbXA7cHJvY2Vzc2VkKTsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyByZXQgPT0gLUVCVVNZKSB7CiYjNDM7CQkJCQltb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJCSAmYW1wO3dvcmtfZGF0YS0mZ3Q7d29yaywKJiM0MzsJCQkJCQkJIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTsKJiM0MzsJCQkJCXJldHVybjsKJiM0MzsJCQkJfQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UICZhbXA7JmFtcDsgcHJvY2Vzc2VkKSB7CiYjNDM7CQkJCW1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIDApOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQogCiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSkKIAkJCQlicmVhazsKQEAgLTEyOTQsMTQgJiM0MzsxNTc3LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtpXSk7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7CiYjNDM7CX0KIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIAlpZiAoIXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSkKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7cnR3ZGV2ID0gcnR3ZGV2OwotCUlOSVRfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzE1LDYgJiM0MzsxNjAwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlpbnQgaTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tJmd0O3R4d3EpOwogCWtmcmVlKHJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKaW5kZXggNDU3ZThiMDIzODBlNWIuLmYxZjU5ZjgzMDFiOGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogLyogU0RJTyBUeCBDb250cm9sICovCiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkwJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKQomIzQzOyNkZWZpbmUgQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFCUJJVCg0KQogCiAvKlNESU8gc3RhdHVzIHRpbWVvdXQqLwogI2RlZmluZSBSRUdfU0RJT19USU1FT1VUCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMikKQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQAogLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqLwogI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlIJCQlCSVQoMjgpCiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRQkJQklUKDI5KQomIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLCQlcCiYjNDM7CShSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVCkKIAogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTQkJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KQpAQCAtMTQzLDcgJiM0MzsxNTIsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7CiB9OwogCiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7CiB9OwogCkBAIC0xNTksNiAmIzQzOzE2OCwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8gewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxOwogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsJYm9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19oaWdoOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX25vcm1hbDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19sb3c7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfcHViOwomIzQzOwlhdG9taWNfdCB0eF9vcXRfZnJlZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NlYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaAppbmRleCBlZmNmNDU0MzM5OTlhZi4uNzNmMmFmNjZlZmZlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNkZWZpbmUgUlRXX1NFQ19SWF9ERUNfRU4JCUJJVCgzKQogI2RlZmluZSBSVFdfU0VDX1RYX0JDX1VTRV9ESwkJQklUKDYpCiAjZGVmaW5lIFJUV19TRUNfUlhfQkNfVVNFX0RLCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUV19TRUNfQ0hLX0tFWUlECQlCSVQoOCkKIAogI2RlZmluZSBSVFdfU0VDX0VOR0lORV9FTgkJQklUKDkpCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0ODgKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMjAwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCBmb2N1c2luZyBvbiB0aGUgUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBXaUZpL0JUIGNvZXhpc3RlbmNlLCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1NESU8uLi4gdGhhdCYjMzk7cyBhIHByb2JsZW0uJiMzNDsgIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBjb2V4LmNgLCBgZncuY2AsIGBtYWM4MDIxMS5jYCwgYG1haW4uY2AsIGByeC5jYCwgYW5kLCBjcnVjaWFsbHksIGBzZGlvLmNgLiAgVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYW4gU0RJTyBkcml2ZXIsIGFuZCBtZW50aW9ucyB0aGUgODcyM0JTIFNESU8gaGFyZHdhcmUuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjb2RlIGV2ZW4gKnJ1bnMqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGlzIGRyaXZlciwgYHJ0dzg4YCwgaXMgYSBSZWFsdGVrIHdpcmVsZXNzIGRyaXZlciwgYW5kIHRoZSBjaGFuZ2VzIHRvIGBzZGlvLmNgIGltbWVkaWF0ZWx5IHN1Z2dlc3QgYW4gU0RJTyBpbnRlcmZhY2UgaXMgaW52b2x2ZWQuIFRoZSBpc3N1ZSBpcyB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgaGF2ZSBhIGdvb2QsIGdlbmVyaWMgU0RJTyBlbXVsYXRvciB0aGF0IHN5emthbGxlciBjYW4gdXNlLiAgU3l6a2FsbGVyIGRvZXMgYSBncmVhdCBqb2Igd2l0aCBQQ0kgYW5kIFVTQiwgdmlhIGBkdW1teV9oY2RgIGFuZCBgcmF3LWdhZGdldGAsIGJ1dCB0aGUgU0RJTyBpbnRlcmZhY2UgaGFzIG5vdCBiZWVuIHByaW9yaXRpemVkLgoKRG9lcyBzeXprYWxsZXIgZnV6eiBTRElPPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBObywgU0RJTyBpc24mIzM5O3QgZGlyZWN0bHkgc3VwcG9ydGVkLiAgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3Mgc29tZWhvdyByZWFjaGFibGUgdmlhIGBtYWM4MDIxMWAuIFRoZSBkcml2ZXIgKnJlZ2lzdGVycyogd2l0aCBtYWM4MDIxMSwgYnV0IHRvIGdldCB0byB0aGUgZHJpdmVyLXNwZWNpZmljIGNvZGUsIHlvdSBuZWVkIHRoZSBhY3R1YWwgaGFyZHdhcmUgdG8gYmUgcHJlc2VudCBhbmQgcHJvYmVkLiBJZiBubyBoYXJkd2FyZSwgbm8gcHJvYmUsIG5vIGRyaXZlciBjYWxsYmFja3MuCgpDYW4gdGhlcmUgYmUgYW55IGVtdWxhdGlvbiBmb3IgU0RJTyBkZXZpY2VzPyBMZXQmIzM5O3MgY2hlY2suIFN0YW5kYXJkIFFFTVUsIGFzIHN5emthbGxlciB1c2VzIGl0LCBkb2VzbiYjMzk7dCBoYXZlIGEgd2F5IHRvIGVtdWxhdGUgU0RJTy4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiAodmlhIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSBhbmQgUENJICh2aWEgc29tZSBiYXNpYyBQQ0kgZnV6emluZyBvciBqdXN0IHByb2JpbmcgaWYgUUVNVSBoYXMgdGhlIGRldmljZSkuIEJ1dCBTRElPIGlzIG5vdCBzdXBwb3J0ZWQuCgpMZXQmIzM5O3MgZG8gYSBrZXJuZWwgc2VhcmNoIGZvciBgcnR3ODhgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgaW50ZXJmYWNlcy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jYC4gT2theSwgbGV0IG1lIGNvbmZpcm0gaWYgYHJ0dzg4YCBoYXMgUENJIG9yIFVTQiBpbnRlcmZhY2VzLiBZZXMsIGl0IGRvZXMgc3VwcG9ydCBQQ0ksIFVTQiwgYW5kIFNESU8uIFRoZSBuZXcgY29kZSBoZWF2aWx5IHJlbGllcyBvbiBgcnR3X2lzXzg3MjNicyhydHdkZXYpYC4gVGhpcyBjaGVja3MgdGhlIGBydHdkZXYtJmd0O2NoaXAtJmd0O2lkYCBhbmQgYHJ0d2Rldi0mZ3Q7aGNpLnR5cGVgIHRvIGJlIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhbmQgYFJUV19IQ0lfVFlQRV9TRElPYC4gIEluIHNob3J0LCB0aGlzIGlzIFNESU8tc3BlY2lmaWMgY29kZS4KClNvLCBzaW5jZSBgcnR3X2lzXzg3MjNic2AgZGVtYW5kcyBgUlRXX0hDSV9UWVBFX1NESU9gLCB0aGUgc3BlY2lmaWMgY2hhbmdlcyBhcmUgb25seSByZWxldmFudCBpZiBhbiBTRElPIGRldmljZSBpcyBhY3R1YWxseSAqcHJvYmVkKi4KCkNhbiB3ZSBkbyB0aGF0IGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgU0RJTyBlbXVsYXRpb24uIEkgbmVlZCB0byBiZSBleHBsaWNpdDogdGhlIGNvZGUgZ3VhcmRlZCBieSBgcnR3X2lzXzg3MjNic2AgKmlzIHVucmVhY2hhYmxlKiBpbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50LgoKQnV0LCBhcmUgdGhlcmUgYW55IGNoYW5nZXMgdGhhdCBhcmUgKm5vdCogZ3VhcmRlZCBieSB0aGlzIHNwZWNpZmljIGNoZWNrPyBMZXQmIzM5O3MgYW5hbHl6ZSBgY29leC5jYCwgYGZ3LmNgLCBgbWFjODAyMTEuY2AsIGByeC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiBhbnkgY2hhbmdlcyBhcmUgdHJpZ2dlcmVkIGZvciBvdGhlciBoYXJkd2FyZSBpbnRlcmZhY2VzLgoKYGNvZXguY2AmIzM5O3MgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgQlQgY29leCBhbmQgc2NhbjsgYWxsIGFyZSBkZXBlbmRlbnQgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4KCmBmdy5jYCBoYXMgYSBuZXcgZnVuY3Rpb24sIGBydHdfZndfc2V0X2dudF9idGAuICBUaGF0JiMzOTtzIDg3MjNicy1zcGVjaWZpYy4gVGhlcmUgaXMgYSBjaGFuZ2UgaW4gIGBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2VgIHdoaWNoIGp1c3QgYWRkcyBgaXNfODcyM2JzX3NkaW9gIHRvIHRoZSBvciBjb25kaXRpb24uCgpgbWFjODAyMTEuY2AgaGFzIHNvbWUgY2hhbmdlczogVGhlIGBhdXRoX3N5bmNfcnhgIGNvZGUgaGFzIGxvZ2ljIHRoYXQgYXZvaWRzIHJ1bm5pbmcgb24gdGhlIFNESU8gaGFyZHdhcmUuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBndWFyZGVkIGJ5IHRoaXMuCgpgcnguY2AgIGluY2x1ZGVzIHRoZSBzYW1lIGNvZGUgb24gODcwM0IgaGFyZHdhcmUsIGJ1dCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGNvbmRpdGlvbmVkIGJ5IHRoaXMgbmV3IGhhcmR3YXJlLgoKVGhlIFNESU8gZHJpdmVyIGl0c2VsZiwgYHNkaW8uY2AsIHdvbiYjMzk7dCBiZSB0cmlnZ2VyZWQuCgpUaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgY29uZmluZWQgdG8gYHNkaW8uY2Agb3IgZ2F0ZWQgYnkgdGhlIFNESU8gZGV2aWNlIGNoZWNrLCB3aGljaCByZXF1aXJlcyBhbgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBXaUZpL0JsdWV0b290aCBjb2V4aXN0ZW5jZSBhbmQgbW9kaWZpZXMgU0RJTy1zcGVjaWZpYyBUWC9SWCBoYW5kbGluZy4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGNvbmZpbmVkIHRvIHRoZSBTRElPIGludGVyZmFjZSAoc2Rpby5jKSBvciBleHBsaWNpdGx5IGd1YXJkZWQgYnkgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIHdoaWNoIGNoZWNrcyBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHVzZWQgYnkgc3l6a2FsbGVyIGRvIG5vdCBlbXVsYXRlIHBoeXNpY2FsIFNESU8gV2lGaSBjYXJkcywgdGhpcyBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMyOjQ1Ljg5MzU1NjAyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTYwNTExMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMyOjQ1Ljg5MzU2MzA3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNzg4ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTA4OWI3ZDU5YWI5ZDkzZWE1MWE3MTQyZjJlNDkxZTBjMGNmNTE2YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXFxuaW5kZXggMzdjMzM2ZGVmNDE5MTUuLjMxNGIyYTM2OGE4ZjE3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmNcXG5AQCAtMTQ0Myw2ICsxNDQzLDE5MSBAQCBzdGF0aWMgdm9pZCBydHdfY29leF9zZXRfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSwgdTggcGhhc2UpXFxuICNkZWZpbmUgY2FzZV9BTEdPKHNyYykgXFxcXFxcbiBcXHRjYXNlIENPRVhfQUxHT18jI3NyYzogcmV0dXJuICNzcmNcXG4gXFxuKy8qIDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UgYW50ZW5uYSBoYW5kbGluZy4gT24gQlQtZGlzYWJsZWQgYm9hcmRzIHRoZVxcbisgKiBzY2FuL2F1dGggd2luZG93IHN0aWxsIHJvdXRlcyB0aHJvdWdoIHRoZSBQVEEgbXV4OyB0aGVzZSBoZWxwZXJzIGZvcmNlIHRoZVxcbisgKiB2ZW5kb3Itc2hhcGVkIFdpRmktb3duZWQgYW50ZW5uYSBwYXRoIHNvIGRpcmVjdGVkIG1hbmFnZW1lbnQgVFggcmVhY2hlcyBhaXIuXFxuKyAqL1xcbisjZGVmaW5lIFJFR184NzIzQlNfQlRfQ09FWF9DVFJMXFx0XFx0MHgwMDM5XFxuKyNkZWZpbmUgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHXFx0XFx0MHgwOTMwXFxuKyNkZWZpbmUgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMVxcdFxcdDB4MDk0NFxcbisjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0JVRlxcdFxcdDB4MDk3NFxcbisjZGVmaW5lIFJUVzg3MjNCU19DT0VYX0hfV0xBTl9BQ1RJVkVcXHQweDE4MDAxMDFiXFxuK1xcbitzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYW50X2lzX2F1eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiAhIShydHdkZXYtXFx1MDAzZWVmdXNlLmJ0X3NldHRpbmcgXFx1MDAyNiBCSVQoNikpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2IHJ0d2Rldi1cXHUwMDNlY29leC5zdGF0LmJ0X2Rpc2FibGVkO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRyZXR1cm4gcnR3X2NvZXhfODcyM2JzX2FudF9pc19hdXgocnR3ZGV2KSA/IDB4ODAgOiAweDIwMDtcXG4rfVxcbitcXG4rLyogV3JpdGUgQkJfU0VMX0JURywgcmV0cnlpbmcgb25jZSB3aXRoIFNZU19GVU5DIEJCIHJlc2V0IGlmIHRoZSBmaXJzdFxcbisgKiB3cml0ZSBkb2VzIG5vdCBzdGljayAoUkYvQkIgY2xvY2sgbWF5IGhhdmUgYmVlbiBnYXRlZCkuXFxuKyAqL1xcbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiB2YWx1ZSlcXG4re1xcbitcXHR1OCBzeXNfZnVuY19iZWZvcmU7XFxuK1xcdHUzMiByZWFkYmFjaztcXG4rXFxuK1xcdHN5c19mdW5jX2JlZm9yZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TWVNfRlVOQ19FTik7XFxuK1xcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFxcdTAwMjYgKEJJVCgwKSB8IEJJVCgxKSkpICE9IChCSVQoMCkgfCBCSVQoMSkpKSB7XFxuK1xcdFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAsIDExKTtcXG4rXFx0fVxcbitcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQiwgdmFsdWUpO1xcbitcXHRyZWFkYmFjayA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQik7XFxuK1xcdGlmIChyZWFkYmFjayA9PSB2YWx1ZSlcXG4rXFx0XFx0cmV0dXJuIHJlYWRiYWNrO1xcbitcXG4rXFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XFxuK1xcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XFxuK1xcbitcXHRyZXR1cm4gcnR3X3JlYWQzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCKTtcXG4rfVxcbitcXG4rc3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdfY29leF84NzIzYnNfd3JpdGVfYmJfc2VsX2J0ZyhydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGhpZ2gpXFxuK3tcXG4rXFx0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGhpZ2gpIHtcXG4rXFx0XFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQlRfQ09FWF9UQUJMRV9ILFxcbitcXHRcXHRcXHQgICAgUlRXODcyM0JTX0NPRVhfSF9XTEFOX0FDVElWRSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfVFhfQ0NLLCBmYWxzZSk7XFxuK1xcdFxcdHJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfUlhfQ0NLLCBmYWxzZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGtlZXBfcHRhX293bmVyKVxcbit7XFxuK1xcdHUzMiBiZWZvcmUsIGFmdGVyO1xcbitcXG4rXFx0YmVmb3JlID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19QQURfQ1RSTDEpO1xcbitcXHRhZnRlciA9IGJlZm9yZSBcXHUwMDI2IH4oQklUX0xOQU9OX1dMQlRfU0VMIHwgQklUX1NXX0RQRFRfU0VMX0RBVEEpO1xcbitcXHRpZiAoa2VlcF9wdGFfb3duZXIpXFxuK1xcdFxcdGFmdGVyIHw9IEJJVF9QQVBFX1dMQlRfU0VMO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFmdGVyIFxcdTAwMjY9IH5CSVRfUEFQRV9XTEJUX1NFTDtcXG4rXFx0aWYgKGFmdGVyICE9IGJlZm9yZSlcXG4rXFx0XFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUEFEX0NUUkwxLCBhZnRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHJ0d19yZWFkOChydHdkZXYsIFJFR19HTlRfQlQpID09IDB4MDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19CVF9DT0VYX0VOSF9JTlRSX0NUUkwpID09IDB4MGMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0d19md19zZXRfZ250X2J0KHJ0d2RldiwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGFudF90YXJnZXQ7XFxuK1xcbitcXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhbnRfdGFyZ2V0ID0gcnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChydHdkZXYpO1xcbitcXG4rXFx0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcXG4rXFx0cnR3X2NvZXhfc2V0X2FudF9zd2l0Y2gocnR3ZGV2LCBDT0VYX1NXSVRDSF9DVFJMX0JZX1BUQSxcXG4rXFx0XFx0XFx0XFx0Q09FWF9TV0lUQ0hfVE9fTk9DQVJFKTtcXG4rXFx0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHJ0d2RldiwgYW50X3RhcmdldCk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHJ0d2RldiwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTggc3lzX2Z1bmNfYmVmb3JlO1xcbitcXG4rXFx0c3lzX2Z1bmNfYmVmb3JlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOKTtcXG4rXFx0aWYgKChzeXNfZnVuY19iZWZvcmUgXFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcXG4rXFx0XFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMCwgMTEpO1xcbitcXHR9XFxuK1xcbitcXHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfODcyM0JTX0JUX0NPRVhfQ1RSTCwgQklUKDMpLCAweDEpO1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQlVGLCAweGZmKTtcXG4rXFx0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMSwgMHgzLCAweDMpO1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHLCAweDc3KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRydHdkZXYtXFx1MDAzZWNvZXguZG0uY3VyX3RhYmxlID0gMjtcXG4rXFx0cnR3X2NvZXhfc2V0X3RhYmxlKHJ0d2RldiwgdHJ1ZSwgMHg1YTVhNWE1YSwgMHg1YTVhNWE1YSk7XFxuK31cXG4rXFxuKy8qIE5vbi1jb25uZWN0ZWQgc2Nhbi9hdXRoIHdvcmthcm91bmQ6IFBTLVRETUEgdHlwZSA4IG9mZiwgUFRBIGFudGVubmEgcGF0aCxcXG4rICogY29leCB0YWJsZSB0eXBlIDIgKG1hdGNoZXMgdGhlIHZlbmRvciBub24tY29ubmVjdGVkIGFyYml0cmF0aW9uKS5cXG4rICovXFxuK3ZvaWQgcnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfY29leF9kbSAqY29leF9kbSA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWNvZXguZG07XFxuK1xcdHN0cnVjdCBydHdfY29leF9zdGF0ICpjb2V4X3N0YXQgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2Vjb2V4LnN0YXQ7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y29leF9kbS1cXHUwMDNlY3VyX3BzX3RkbWFfb24gPSBmYWxzZTtcXG4rXFx0Y29leF9kbS1cXHUwMDNlY3VyX3BzX3RkbWEgPSA4O1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbMF0gPSAweDA4O1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbMV0gPSAweDAwO1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbMl0gPSAweDAwO1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbM10gPSAweDAwO1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbNF0gPSAweDAwO1xcbitcXG4rXFx0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHJ0d2Rldik7XFxuK1xcdHJ0d19jb2V4X3NldF9hbnRfcGF0aChydHdkZXYsIHRydWUsIENPRVhfU0VUX0FOVF8yRyk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHJ0d2Rldik7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19hcHBseV9zY2FuX3RhYmxlKHJ0d2Rldik7XFxuK1xcdGlmIChjb2V4X3N0YXQtXFx1MDAzZWJ0X2Rpc2FibGVkKVxcbitcXHRcXHRydHdfY29leF84NzIzYnNfc2V0X2Nja19wcmkocnR3ZGV2LCB0cnVlKTtcXG4rXFx0cnR3X2NvZXhfODcyM2JzX3JlYXNzZXJ0X3B0YV9hbnQocnR3ZGV2KTtcXG4rXFx0cnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwocnR3ZGV2LCB0cnVlKTtcXG4rfVxcbitcXG4rLyogUmVwbGF5ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHN0YXJ0X2NsbnRfam9pbigpL2F1dGg6IEJUX0lORk8gKyBQUy1URE1BIHR5cGUgOFxcbisgKiB0aGVuIHRoZSBmb3JjZWQgV2lGaSBQVEEgYW50ZW5uYSBwYXRoLCBzbyB0aGUgYXV0aCB3aW5kb3cgaXMgY2xlYW4uXFxuKyAqL1xcbit2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZydHdkZXYtXFx1MDAzZW11dGV4KTtcXG4rXFxuK1xcdGlmICghcnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0d19md19xdWVyeV9idF9pbmZvKHJ0d2Rldik7XFxuK1xcdHJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApO1xcbitcXHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcXG4rXFx0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHJ0d2Rldik7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBjaGFyICpydHdfY29leF9nZXRfYWxnb19zdHJpbmcodTggYWxnbylcXG4ge1xcbiBcXHRzd2l0Y2ggKGFsZ28pIHtcXG5AQCAtMjc3MCw3ICsyOTU1LDcgQEAgdm9pZCBydHdfY29leF9wb3dlcl9vbl9zZXR0aW5nKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdGNvZXgtXFx1MDAzZXN0b3BfZG0gPSB0cnVlO1xcbiBcXHRjb2V4LVxcdTAwM2V3bF9yZl9vZmYgPSBmYWxzZTtcXG4gXFxuLVxcdC8qIGVuYWJsZSBCQiwgd2UgY2FuIHdyaXRlIDB4OTQ4ICovXFxuK1xcdC8qIGVuYWJsZSBCQiwgc28gQkJfU0VMX0JURyBpcyB3cml0YWJsZSAqL1xcbiBcXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19TWVNfRlVOQ19FTixcXG4gXFx0XFx0ICAgICAgIEJJVF9GRU5fQkJfR0xCX1JTVCB8IEJJVF9GRU5fQkJfUlNUQik7XFxuIFxcbkBAIC0yODc3LDYgKzMwNjIsMzMgQEAgdm9pZCBydHdfY29leF9zY2FuX25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKVxcbiBcXHRjb2V4LVxcdTAwM2VmcmVlemUgPSBmYWxzZTtcXG4gXFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xcbiBcXG4rXFx0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IGtlZXAgdGhlIHNjYW4vYXV0aCBQVEEgYW50ZW5uYSBzdGF0ZSB0aGVcXG4rXFx0ICogdmVuZG9yIHVzZXMgYW5kIHNraXAgdGhlIGdlbmVyaWMgY29leCBydW4uIEF0IHNjYW4gc3RhcnQgKGZpcm13YXJlXFxuK1xcdCAqIGhhcyBiZWVuIHVwIGxvbmcgZW5vdWdoIGZvciBzdGFibGUgUlggRE1BKSByZXBsYXkgdGhlIHZlbmRvciBCVF9NUCAvXFxuK1xcdCAqIEJUX0lORk8gcXVlcmllcywgdGhlbiByZS1lc3RhYmxpc2ggdGhlIHNjYW4tcGF0aCBQVEEgc2V0dXAuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpIHtcXG4rXFx0XFx0aWYgKHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUXzJHIHx8IHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBydHdfY29leF9pbmZvX3JlcSByZXEgPSB7fTtcXG4rXFxuK1xcdFxcdFxcdGNvZXhfc3RhdC1cXHUwMDNlY250X3dsW0NPRVhfQ05UX1dMX1NDQU5BUF0gPSAwO1xcbitcXHRcXHRcXHRjb2V4X3N0YXQtXFx1MDAzZXdsX2hpX3ByaV90YXNrMiA9IHRydWU7XFxuK1xcbitcXHRcXHRcXHRyZXEuc2VxID0gMHgwZTtcXG4rXFx0XFx0XFx0cmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1NVUFBfVkVSO1xcbitcXHRcXHRcXHRydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsIFxcdTAwMjZyZXEpO1xcbitcXHRcXHRcXHRyZXEuc2VxID0gMHgwZjtcXG4rXFx0XFx0XFx0cmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1BBVENIX1ZFUjtcXG4rXFx0XFx0XFx0cnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCBcXHUwMDI2cmVxKTtcXG4rXFx0XFx0XFx0cnR3X2Z3X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTtcXG4rXFxuK1xcdFxcdFxcdHJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQocnR3ZGV2KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Y29leF9zdGF0LVxcdTAwM2V3bF9oaV9wcmlfdGFzazIgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0eXBlID09IENPRVhfU0NBTl9TVEFSVF81Rykge1xcbiBcXHRcXHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19DT0VYLFxcbiBcXHRcXHRcXHRcXFwiW0JUQ29leF0sIFNDQU4gU1RBUlQgbm90aWZ5ICg1RylcXFxcblxcXCIpO1xcbkBAIC0yOTM4LDYgKzMxNTAsMTcgQEAgdm9pZCBydHdfY29leF9jb25uZWN0X25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKVxcbiBcXHRpZiAoY29leC1cXHUwMDNlbWFudWFsX2NvbnRyb2wgfHwgY29leC1cXHUwMDNlc3RvcF9kbSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IHRoZSB2ZW5kb3IgQ29ubmVjdE5vdGlmeSgpIGVhcmx5LXJldHVybnNcXG4rXFx0ICogd2l0aG91dCBzZW5kaW5nIEgyQ3M7IHNjYW5fd29ya2Fyb3VuZCBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZSBQVEFcXG4rXFx0ICogcGF0aCAvIGNvZXggdGFibGUgLyBQUy1URE1BLiBLZWVwIG9ubHkgdGhlIHJlZ2lzdGVyLWxldmVsIFBUQVxcbitcXHQgKiByZWFzc2VydGlvbiBhdCBhc3NvY2lhdGUtc3RhcnQuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpIHtcXG4rXFx0XFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpXFxuK1xcdFxcdFxcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xcbiBcXG4gXFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfNUdfU1RBUlQpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxcbmluZGV4IGMzOThiZTgzOTFmN2IwLi5jNThhZTBhNTBiMzBiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oXFxuQEAgLTQzMCw0ICs0MzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2NvZXhfYWN0aXZlX3F1ZXJ5X2J0X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cnR3X2NvZXhfcXVlcnlfYnRfaW5mbyhydHdkZXYpO1xcbiB9XFxuIFxcbit2b2lkIHJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XFxuK3ZvaWQgcnR3X2NvZXhfODcyM2JzX3ByZV9hdXRoX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTtcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcXG5pbmRleCA5NDVmZWRjZDM3NWI2Mi4uN2MxNzA4NmNhYzMyYzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXFxuQEAgLTc4Niw2ICs3ODYsMTcgQEAgdm9pZCBydHdfZndfbWVkaWFfc3RhdHVzX3JlcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBtYWNfaWQsIGJvb2wgY29ubmVjdClcXG4gXFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcXG4gfVxcbiBcXG4rLyogODcyM0JTIFNESU86IHNldCB0aGUgZmlybXdhcmUgR05UX0JUIHN0YXRlICgwID0gV2lGaSBvd25zIHRoZSBhbnRlbm5hKS4gKi9cXG4rdm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSlcXG4re1xcbitcXHR1OCBoMmNfcGt0W0gyQ19QS1RfU0laRV0gPSB7MH07XFxuK1xcbitcXHRTRVRfSDJDX0NNRF9JRF9DTEFTUyhoMmNfcGt0LCBIMkNfQ01EX0dOVF9CVCk7XFxuK1xcdFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgc3RhdGUpO1xcbitcXG4rXFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcXG4rfVxcbitcXG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d190cmFmZmljX3N0YXRzICpzdGF0cyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZXN0YXRzO1xcbkBAIC0xNDY2LDEwICsxNDc3LDE0IEBAIHZvaWQgcnR3X2FkZF9yc3ZkX3BhZ2Vfc3RhKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcdHJ0d19hZGRfcnN2ZF9wYWdlKHJ0d2RldiwgcnR3dmlmLCBSU1ZEX0xQU19QR19JTkZPLCB0cnVlKTtcXG4gfVxcbiBcXG4rLyogUkVHX0RXQkNOMV9DVFJMIGJpdCAyMCAoU1dfQkNOX1NFTCBmb3IgcG9ydCAwKSwgcmVsYXRpdmUgdG8gYnl0ZSArMiAqL1xcbisjZGVmaW5lIEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDBcXHQoMjAgLSAxNilcXG4rXFxuIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXFxuIFxcdFxcdFxcdFxcdHU4ICpidWYsIHUzMiBzaXplKVxcbiB7XFxuLVxcdHU4IGJja3BbM107XFxuK1xcdGNvbnN0IGJvb2wgaXNfODcyM2JzX3NkaW8gPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XFxuK1xcdHU4IGJja3BbNF07XFxuIFxcdHU4IHZhbDtcXG4gXFx0dTE2IHJzdmRfcGdfaGVhZDtcXG4gXFx0dTMyIGJjbl92YWxpZF9hZGRyO1xcbkBAIC0xNDk5LDEzICsxNTE0LDI4IEBAIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXFxuIFxcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsXFxuIFxcdFxcdCAgIChiY2twWzJdIFxcdTAwMjYgfkJJVF9FTl9CQ05fRlVOQ1RJT04pIHwgQklUX0RJU19UU0ZfVURUKTtcXG4gXFxuLVxcdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSkge1xcbitcXHQvKiBDbGVhciBCSVRfRU5fQkNOUV9ETCBzbyB0aGUgY2hpcCBkb2VzIG5vdCB0cmVhdCB0aGUgcmVzZXJ2ZWQtcGFnZVxcbitcXHQgKiB1cGxvYWQgYXMgYSByZWFsIGJlYWNvbjsgb3RoZXJ3aXNlIEJJVF9CQ05fVkFMSUQgbmV2ZXIgYXNzZXJ0cy4gVGhlXFxuK1xcdCAqIHZlbmRvciBydGw4NzIzYnMgZHJpdmVyIGRvZXMgdGhpcyB1bmNvbmRpdGlvbmFsbHk7IHJ0dzg4IG9ubHkgZGlkIGl0XFxuK1xcdCAqIGZvciBQQ0llLCB3aGljaCBsZWZ0IDg3MjNCUyBTRElPJ3MgQkNOX1ZBTElEIGhhbmRzaGFrZSBmYWlsaW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFIHx8IGlzXzg3MjNic19zZGlvKSB7XFxuIFxcdFxcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMik7XFxuIFxcdFxcdGJja3BbMV0gPSB2YWw7XFxuIFxcdFxcdHZhbCBcXHUwMDI2PSB+KEJJVF9FTl9CQ05RX0RMIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4gXFx0XFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMiwgdmFsKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogODcyM0JTIFNESU86IHBvaW50IHRoZSBTVyBiZWFjb24gZG93bmxvYWQgcGF0aCBhdCBwb3J0IDAsIGVsc2VcXG4rXFx0ICogQklUX0JDTl9WQUxJRCBpcyBuZXZlciBhc3NlcnRlZCBhZnRlciB0aGUgU0RJTyB1cGxvYWQgY29tcGxldGVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzXzg3MjNic19zZGlvKSB7XFxuK1xcdFxcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCArIDIpO1xcbitcXHRcXHRiY2twWzNdID0gdmFsO1xcbitcXHRcXHR2YWwgXFx1MDAyNj0gfkJJVChCSVRfT0ZGU0VUX0RXQkNOMV9TV19CQ05fU0VMX1BPUlQwKTtcXG4rXFx0XFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCArIDIsIHZhbCk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IHJ0d19oY2lfd3JpdGVfZGF0YV9yc3ZkX3BhZ2UocnR3ZGV2LCBidWYsIHNpemUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHJ0d19lcnIocnR3ZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIGRhdGEgdG8gcnN2ZCBwYWdlXFxcXG5cXFwiKTtcXG5AQCAtMTUyNiwxMSArMTU1NiwxMyBAQCBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLFxcbiBcXHR9XFxuIFxcbiByZXN0b3JlOlxcbitcXHRpZiAoaXNfODcyM2JzX3NkaW8pXFxuK1xcdFxcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgKyAyLCBiY2twWzNdKTtcXG4gXFx0cnN2ZF9wZ19oZWFkID0gcnR3ZGV2LVxcdTAwM2VmaWZvLnJzdmRfYm91bmRhcnk7XFxuIFxcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX0ZJRk9QQUdFX0NUUkxfMixcXG4gXFx0XFx0ICAgIHJzdmRfcGdfaGVhZCB8IEJJVF9CQ05fVkFMSURfVjEpO1xcbiBcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLCBiY2twWzJdKTtcXG4tXFx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKVxcbitcXHRpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pXFxuIFxcdFxcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCArIDIsIGJja3BbMV0pO1xcbiBcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0NSICsgMSwgYmNrcFswXSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcXG5pbmRleCA0OGFkOWNlYWI2ZWExMi4uZjVlZDY1YzQ2MzUwZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuQEAgLTU3Miw2ICs1NzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2gyY19wa3Rfc2V0X2hlYWRlcih1OCAqaDJjX3BrdCwgdTggc3ViX2lkKVxcbiAjZGVmaW5lIEgyQ19DTURfUVVFUllfQlRfTVBfSU5GT1xcdDB4NjdcXG4gI2RlZmluZSBIMkNfQ01EX0JUX1dJRklfQ09OVFJPTFxcdFxcdDB4NjlcXG4gI2RlZmluZSBIMkNfQ01EX1dJRklfQ0FMSUJSQVRJT05cXHQweDZkXFxuKyNkZWZpbmUgSDJDX0NNRF9HTlRfQlRcXHRcXHRcXHQweDZlXFxuICNkZWZpbmUgSDJDX0NNRF9RVUVSWV9CVF9ISURfSU5GT1xcdDB4NzNcXG4gXFxuICNkZWZpbmUgSDJDX0NNRF9LRUVQX0FMSVZFXFx0XFx0MHgwM1xcbkBAIC02ODQsNiArNjg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19oMmNfcGt0X3NldF9oZWFkZXIodTggKmgyY19wa3QsIHU4IHN1Yl9pZClcXG4gXFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAxLCB2YWx1ZSwgR0VOTUFTSygzMSwgMjQpKVxcbiAjZGVmaW5lIFNFVF9RVUVSWV9CVF9JTkZPKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiBcXHRsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSArIDB4MDAsIHZhbHVlLCBCSVQoOCkpXFxuKyNkZWZpbmUgU0VUX0dOVF9CVF9TVEFURShoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuK1xcdGxlMzJwX3JlcGxhY2VfYml0cygoX19sZTMyICopKGgyY19wa3QpICsgMHgwMCwgdmFsdWUsIEJJVCg4KSlcXG4gI2RlZmluZSBTRVRfV0xfQ0hfSU5GT19MSU5LKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gXFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgR0VOTUFTSygxNSwgOCkpXFxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fQ0hOTChoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuQEAgLTg0OSw2ICs4NTIsNyBAQCB2b2lkIHJ0d19md19zZW5kX3Jzc2lfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSk7XFxuIHZvaWQgcnR3X2Z3X3NlbmRfcmFfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSxcXG4gXFx0XFx0XFx0IGJvb2wgcmVzZXRfcmFfbWFzayk7XFxuIHZvaWQgcnR3X2Z3X21lZGlhX3N0YXR1c19yZXBvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkLCBib29sIGNvbm4pO1xcbit2b2lkIHJ0d19md19zZXRfZ250X2J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHN0YXRlKTtcXG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xcbiB2b2lkIHJ0d19md19iZWFjb25fZmlsdGVyX2NvbmZpZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGNvbm5lY3QsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jXFxuaW5kZXggNzY2ZjIyZDMxMDc5ZWUuLjkxMDE0YThlMjQyYjMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xcbkBAIC0xNSw2ICsxNSw0NjMgQEBcXG4gI2luY2x1ZGUgXFxcIndvdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic2FyLmhcXFwiXFxuIFxcbisvKiA4NzIzQlMgU0RJTzogcmVjb3JkIGEgYmVhY29uL3Byb2JlLXJlc3Agc2VlbiBmcm9tIHRoZSB0YXJnZXQgQlNTSUQgZHVyaW5nXFxuKyAqIHRoZSBwcmUtYXV0aCB3aW5kb3cgc28gdGhlIGpvaW4gc2VxdWVuY2UgKG1nZF9wcmVwYXJlX3R4KSBjYW4gd2FpdCBmb3IgaXQsXFxuKyAqIG1pcnJvcmluZyB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpLiBDYWxsZWQgZnJvbSB0aGUgU0RJTyBSWCBwYXRoLlxcbisgKi9cXG4rdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3J4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MzIgbGVuLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHJ0d19yeF9wa3Rfc3RhdCAqcGt0X3N0YXQsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRfX2xlMTYgZmMgPSBoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2w7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cXHUwMDNlZmxhZ3MpIHx8XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlY3JjX2VyciB8fCBwa3Rfc3RhdC1cXHUwMDNlaWN2X2VycilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGZjKSBcXHUwMDI2XFx1MDAyNiAhaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoc3luYy1cXHUwMDNlYWN0aXZlIFxcdTAwMjZcXHUwMDI2IGV0aGVyX2FkZHJfZXF1YWwoaGRyLVxcdTAwM2VhZGRyMywgc3luYy1cXHUwMDNlYnNzaWQpKSB7XFxuK1xcdFxcdHN5bmMtXFx1MDAzZXNlZW4gPSB0cnVlO1xcbitcXHRcXHRzeW5jLVxcdTAwM2VzZWVuX2NvdW50Kys7XFxuK1xcdFxcdHdha2VfdXAoXFx1MDAyNnN5bmMtXFx1MDAzZXdhaXQpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN5bmMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHJ0dzg3MjNic19hdXRoX3N5bmNfcngpO1xcbitcXG4rLyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqL1xcbitcXG4rI2RlZmluZSBSVFc4NzIzQlNfSk9JTl9SRVRSWV9MSU1JVFxcdFxcdDB4MzBcXG4rI2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfRkFMTEJBQ0tfTVNcXHQxMjBcXG4rI2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUlOX01TXFx0XFx0ODBcXG4rI2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TXFx0XFx0MTYwXFxuKyNkZWZpbmUgUlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lIFJUVzg3MjNCU19TSE9SVF9TTE9UX1RJTUVcXHRcXHQ5XFxuKyNkZWZpbmUgUlRXODcyM0JTX0xPTkdfU0xPVF9USU1FXFx0XFx0MjBcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xTVxcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJNXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNV81TVxcdFxcdFxcdEJJVCgyKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzExTVxcdFxcdFxcdEJJVCgzKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzZNXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfOU1cXHRcXHRcXHRCSVQoNSlcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xMk1cXHRcXHRcXHRCSVQoNilcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xOE1cXHRcXHRcXHRCSVQoNylcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yNE1cXHRcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8zNk1cXHRcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl80OE1cXHRcXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNTRNXFx0XFx0XFx0QklUKDExKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSX0NDS19SQVRFUyBcXFxcXFxuK1xcdChSVFc4NzIzQlNfUlJTUl8xTSB8IFJUVzg3MjNCU19SUlNSXzJNIHwgXFxcXFxcbitcXHQgUlRXODcyM0JTX1JSU1JfNV81TSB8IFJUVzg3MjNCU19SUlNSXzExTSlcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRVxcdFxcdFxcdFJUVzg3MjNCU19SUlNSX0NDS19SQVRFU1xcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJHX0FMTE9XIFxcXFxcXG4rXFx0KFJUVzg3MjNCU19SUlNSX0NDS19SQVRFUyB8IFJUVzg3MjNCU19SUlNSXzZNIHwgXFxcXFxcbitcXHQgUlRXODcyM0JTX1JSU1JfMTJNIHwgUlRXODcyM0JTX1JSU1JfMjRNKVxcbitcXG4rLyogS2VlcCB0aGUgUkNSIGF0IHRoZSB2ZW5kb3IgdGFyZ2V0LW9ubHkgc3RhdGUgKEFNRiArIENCU1NJRCkgYWNyb3NzIHRoZSB3aG9sZVxcbisgKiBjb25uZWN0IHdpbmRvdywgbWF0Y2hpbmcgdGhlIHZlbmRvciBTVEEgcGF0aC4gYWNjZXB0X2FsbCBpcyBrZXB0IG9ubHkgZm9yIHRoZVxcbisgKiBjYWxsZXIncyBpbnRlbnQ7IGJvdGggcGF0aHMgY29udmVyZ2UgdGhlIGZpbHRlciB0byB0YXJnZXQtb25seS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGFjY2VwdF9hbGwpXFxuK3tcXG4rXFx0cnR3ZGV2LVxcdTAwM2VoYWwucmNyIHw9IEJJVF9BTUYgfCBCSVRfQ0JTU0lEX0RBVEEgfCBCSVRfQ0JTU0lEX0JDTjtcXG4rXFx0cnR3ZGV2LVxcdTAwM2VoYWwucmNyIFxcdTAwMjY9IH5CSVRfQUFQO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SQ1IsIHJ0d2Rldi1cXHUwMDNlaGFsLnJjcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHUxNiBzZWMgPSBydHdfcmVhZDE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcpO1xcbitcXG4rXFx0c2VjIHw9IFJUV19TRUNfQ0hLX0tFWUlEIHwgUlRXX1NFQ19UWF9ERUNfRU4gfCBSVFdfU0VDX1JYX0RFQ19FTjtcXG4rXFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2goc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBlbmFibGUpXFxuK3tcXG4rXFx0dTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7XFxuK1xcbitcXHRpZiAoZW5hYmxlKVxcbitcXHRcXHRzZWMgfD0gUlRXX1NFQ19UWF9CQ19VU0VfREsgfCBSVFdfU0VDX1RYX1VOSV9VU0VfREsgfFxcbitcXHRcXHQgICAgICAgUlRXX1NFQ19SWF9VTklfVVNFX0RLO1xcbitcXHRlbHNlXFxuK1xcdFxcdHNlYyBcXHUwMDI2PSB+KFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8IFJUV19TRUNfUlhfVU5JX1VTRV9ESyB8XFxuK1xcdFxcdFxcdCBSVFdfU0VDX1RYX0JDX1VTRV9ESyB8IFJUV19TRUNfUlhfQkNfVVNFX0RLKTtcXG4rXFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0cnR3X3dyaXRlOF9jbHIocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIEJJVF9ESVNfVFNGX1VEVCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIHNob3J0X3ByZWFtYmxlKVxcbit7XFxuK1xcdHU4IHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19SUlNSICsgMikgXFx1MDAyNiB+UlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVDtcXG4rXFxuK1xcdGlmIChzaG9ydF9wcmVhbWJsZSlcXG4rXFx0XFx0dmFsIHw9IFJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQ7XFxuK1xcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfUlJTUiArIDIsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgc2hvcnRfc2xvdClcXG4re1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1NMT1QsXFxuK1xcdFxcdCAgIHNob3J0X3Nsb3QgPyBSVFc4NzIzQlNfU0hPUlRfU0xPVF9USU1FIDpcXG4rXFx0XFx0XFx0XFx0UlRXODcyM0JTX0xPTkdfU0xPVF9USU1FKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUodTggcmF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKHJhdGUgXFx1MDAyNiAweDdmKSB7XFxuK1xcdGNhc2UgMjogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMU07XFxuK1xcdGNhc2UgNDogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMk07XFxuK1xcdGNhc2UgMTE6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNV81TTtcXG4rXFx0Y2FzZSAyMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMU07XFxuK1xcdGNhc2UgMTI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNk07XFxuK1xcdGNhc2UgMTg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfOU07XFxuK1xcdGNhc2UgMjQ6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMTJNO1xcbitcXHRjYXNlIDM2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzE4TTtcXG4rXFx0Y2FzZSA0ODogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8yNE07XFxuK1xcdGNhc2UgNzI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMzZNO1xcbitcXHRjYXNlIDk2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzQ4TTtcXG4rXFx0Y2FzZSAxMDg6IHJldHVybiBSVFc4NzIzQlNfUlJTUl81NE07XFxuK1xcdGRlZmF1bHQ6ICByZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhjb25zdCB1OCAqaWUsIHUxNiAqYmFzaWNfcmF0ZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYm9vbCAqdmFsaWQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIWllKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaWVbMV07IGkrKykge1xcbitcXHRcXHR1MTYgcjtcXG4rXFxuK1xcdFxcdGlmICghKGllW2kgKyAyXSBcXHUwMDI2IDB4ODApKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0ciA9IHJ0dzg3MjNic19ycnNyX2Zyb21faWVfcmF0ZShpZVtpICsgMl0pO1xcbitcXHRcXHRpZiAoIXIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHQqYmFzaWNfcmF0ZXMgfD0gcjtcXG4rXFx0XFx0KnZhbGlkID0gdHJ1ZTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfcmVzZXRfcmVzcG9uc2VfcmF0ZXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUlNSLCAweGZmZmYxKTtcXG4rXFx0cnR3ZGV2LVxcdTAwM2VkbV9pbmZvLnJyc3JfdmFsX2luaXQgPSAweGZmZmYxO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXBwbHlfYmFzaWNfcmF0ZXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgdTggKmJzc2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcXHUwMDI2dmlmLVxcdTAwM2Vic3NfY29uZjtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7XFxuK1xcdGJvb2wgdmFsaWQgPSBmYWxzZTtcXG4rXFx0dTE2IGJhc2ljX3JhdGVzID0gMDtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHZpZi1cXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoY29uZi1cXHUwMDNlYnNzKSB7XFxuK1xcdFxcdGJzcyA9IGNvbmYtXFx1MDAzZWJzcztcXG4rXFx0fSBlbHNlIGlmIChic3NpZCBcXHUwMDI2XFx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xcbitcXHRcXHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XFxuK1xcdFxcdGJzcyA9IGxvb2t1cF9ic3M7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChic3MpIHtcXG4rXFx0XFx0Y29uc3QgdTggKnJhdGVzLCAqZXh0O1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRyYXRlcyA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfU1VQUF9SQVRFUyk7XFxuK1xcdFxcdGV4dCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfRVhUX1NVUFBfUkFURVMpO1xcbitcXHRcXHRydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhyYXRlcywgXFx1MDAyNmJhc2ljX3JhdGVzLCBcXHUwMDI2dmFsaWQpO1xcbitcXHRcXHRydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhleHQsIFxcdTAwMjZiYXNpY19yYXRlcywgXFx1MDAyNnZhbGlkKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YWxpZCkge1xcbitcXHRcXHRiYXNpY19yYXRlcyB8PSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRTtcXG4rXFx0XFx0YmFzaWNfcmF0ZXMgXFx1MDAyNj0gUlRXODcyM0JTX1JSU1JfMkdfQUxMT1c7XFxuK1xcdFxcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JSU1IsIGJhc2ljX3JhdGVzKTtcXG4rXFx0XFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19SUlNSICsgMixcXG4rXFx0XFx0XFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1JSU1IgKyAyKSBcXHUwMDI2IDB4ZjApO1xcbitcXHRcXHRydHdkZXYtXFx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IGJhc2ljX3JhdGVzO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobG9va3VwX2JzcylcXG4rXFx0XFx0Y2ZnODAyMTFfcHV0X2JzcyhydHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSwgbG9va3VwX2Jzcyk7XFxuK31cXG4rXFxuKy8qIFByb2dyYW0gcmVzcG9uc2Ugc2xvdCB0aW1lIChhbmQsIHdoZW4gc2V0X3ByZWFtYmxlLCB0aGUgQUNLIHByZWFtYmxlKSBmcm9tXFxuKyAqIHRoZSBzZWxlY3RlZCBzY2FuIEJTUyBjYXBhYmlsaXRpZXM7IHRoZSBBUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCB5ZXQgaW5cXG4rICogYnNzX2NvbmYgYXQgbWdkX3ByZXBhcmVfdHgoKSB0aW1lLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCB1OCAqYnNzaWQsIGJvb2wgc2V0X3ByZWFtYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcXHUwMDI2dmlmLVxcdTAwM2Vic3NfY29uZjtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7XFxuK1xcdGJvb2wgc2hvcnRfcHJlYW1ibGUsIHNob3J0X3Nsb3Q7XFxuK1xcdHUxNiBjYXAgPSAwO1xcbitcXG4rXFx0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgdmlmLVxcdTAwM2V0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChjb25mLVxcdTAwM2Vic3MpIHtcXG4rXFx0XFx0YnNzID0gY29uZi1cXHUwMDNlYnNzO1xcbitcXHR9IGVsc2UgaWYgKGJzc2lkIFxcdTAwMjZcXHUwMDI2IGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7XFxuK1xcdFxcdGxvb2t1cF9ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHJ0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0VTUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcXG4rXFx0XFx0YnNzID0gbG9va3VwX2JzcztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGJzcykge1xcbitcXHRcXHRjYXAgPSBic3MtXFx1MDAzZWNhcGFiaWxpdHk7XFxuK1xcdH0gZWxzZSBpZiAoY29uZi1cXHUwMDNlYXNzb2NfY2FwYWJpbGl0eSkge1xcbitcXHRcXHRjYXAgPSBjb25mLVxcdTAwM2Vhc3NvY19jYXBhYmlsaXR5O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzaG9ydF9wcmVhbWJsZSA9IGNvbmYtXFx1MDAzZXVzZV9zaG9ydF9wcmVhbWJsZTtcXG4rXFx0XFx0c2hvcnRfc2xvdCA9IGNvbmYtXFx1MDAzZXVzZV9zaG9ydF9zbG90O1xcbitcXHRcXHRnb3RvIHByb2dyYW07XFxuK1xcdH1cXG4rXFx0c2hvcnRfcHJlYW1ibGUgPSAhIShjYXAgXFx1MDAyNiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpO1xcbitcXHRzaG9ydF9zbG90ID0gISEoY2FwIFxcdTAwMjYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSk7XFxuK1xcbitwcm9ncmFtOlxcbitcXHRpZiAoc2V0X3ByZWFtYmxlKVxcbitcXHRcXHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTtcXG4rXFx0cnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBzaG9ydF9zbG90KTtcXG4rXFxuK1xcdGlmIChsb29rdXBfYnNzKVxcbitcXHRcXHRjZmc4MDIxMV9wdXRfYnNzKHJ0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LCBsb29rdXBfYnNzKTtcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4re1xcbitcXHR1MTYgYmVhY29uX2ludCA9IHZpZi1cXHUwMDNlYnNzX2NvbmYuYmVhY29uX2ludDtcXG4rXFx0dW5zaWduZWQgaW50IHdhaXRfbXM7XFxuK1xcbitcXHRpZiAoIWJlYWNvbl9pbnQpXFxuK1xcdFxcdHJldHVybiBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfRkFMTEJBQ0tfTVM7XFxuK1xcbitcXHR3YWl0X21zID0gRElWX1JPVU5EX1VQKGJlYWNvbl9pbnQgKiAxMDI0LCAxMDAwKSArIDIwO1xcbitcXHRyZXR1cm4gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHdhaXRfbXMsIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVMsXFxuK1xcdFxcdCAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VhdXRoX3N5bmM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRldGhlcl9hZGRyX2NvcHkoc3luYy1cXHUwMDNlYnNzaWQsIGJzc2lkKTtcXG4rXFx0c3luYy1cXHUwMDNlc2VlbiA9IGZhbHNlO1xcbitcXHRzeW5jLVxcdTAwM2VzZWVuX2NvdW50ID0gMDtcXG4rXFx0c3luYy1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3N0b3Aoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWF1dGhfc3luYztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzeW5jLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdHN5bmMtXFx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzeW5jLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJ0dzg3MjNic19hdXRoX3N5bmNfc2VlbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIHNlZW47XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRzZWVuID0gc3luYy1cXHUwMDNlc2VlbjtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIHNlZW47XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCB3YWl0X21zKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jO1xcbitcXG4rXFx0cmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChzeW5jLVxcdTAwM2V3YWl0LCBydHc4NzIzYnNfYXV0aF9zeW5jX3NlZW4ocnR3ZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSBcXHUwMDNlIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9pc19hdXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGllZWU4MDIxMV9wcmVwX3R4X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0cmV0dXJuIHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBpbmZvIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpbmZvLVxcdTAwM2VzdWJ0eXBlID09IElFRUU4MDIxMV9TVFlQRV9BVVRIO1xcbit9XFxuK1xcbisvKiBSZXBsaWNhdGUgdGhlIHZlbmRvciBzdGFydF9jbG50X2pvaW4oKSByZWdpc3RlciBwcm9ncmFtbWluZyByaWdodCBiZWZvcmVcXG4rICogYXV0aC4gUmV0dXJucyB0cnVlIGZvciBhIGZyZXNoIGpvaW4gKEJTU0lEIGNoYW5nZWQpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcnR3ODcyM2JzX21nZF9wcmVwYXJlX2pvaW4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCAqYnNzaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d192aWYgKnJ0d3ZpZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi1cXHUwMDNlZHJ2X3ByaXY7XFxuK1xcdGJvb2wgZnJlc2hfam9pbjtcXG4rXFx0dTE2IHJldHJ5X2xpbWl0O1xcbitcXG4rXFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0ZnJlc2hfam9pbiA9ICFldGhlcl9hZGRyX2VxdWFsKHJ0d3ZpZi1cXHUwMDNlYnNzaWQsIGJzc2lkKTtcXG4rXFxuK1xcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXFx1MDAzZWJzc2lkLCBic3NpZCk7XFxuK1xcdHJ0d3ZpZi1cXHUwMDNlYWlkID0gMDtcXG4rXFx0cnR3dmlmLVxcdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTUdEX0xJTktFRDtcXG4rXFx0cnR3X3ZpZl9wb3J0X2NvbmZpZyhydHdkZXYsIHJ0d3ZpZixcXG4rXFx0XFx0XFx0ICAgIFBPUlRfU0VUX0JTU0lEIHwgUE9SVF9TRVRfQUlEIHwgUE9SVF9TRVRfTkVUX1RZUEUpO1xcbitcXG4rXFx0LyogRG8gbm90IG5hcnJvdyBSUlNSIG9yIHN3aXRjaCB0byBzaG9ydC1wcmVhbWJsZSByZXNwb25zZXMgYmVmb3JlIHRoZVxcbitcXHQgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXRcXG4rXFx0ICogKDB4ZmZmZjEsIGxvbmcgcHJlYW1ibGUpLiBPbmx5IHNsb3QgdGltZSBpcyBwcm9ncmFtbWVkIGVhcmx5LlxcbitcXHQgKi9cXG4rXFx0cnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7XFxuK1xcbitcXHRydHdfZndfYmVhY29uX2ZpbHRlcl9jb25maWcocnR3ZGV2LCBmYWxzZSwgdmlmKTtcXG4rXFxuK1xcdC8qIE1hdGNoIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkgVFggc3RhdGUgKHNldF9tc3IgZGlyZWN0bHksIGtlZXBcXG4rXFx0ICogQkNOX0NUUkwgLyBCQ05RX0RMIHNldCwgcmVhc3NlcnQgVEJUVC9SRVNQX1NJRlMgZXZlcnkgam9pbikuXFxuK1xcdCAqL1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxcbitcXHRcXHQgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OKTtcXG4rXFx0cnR3X3dyaXRlMzJfc2V0KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwsIEJJVF9FTl9CQ05RX0RMKTtcXG4rXFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHg2NCBcXHUwMDI2IDB4ZmYpO1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgKyAyLFxcbitcXHRcXHQgICAocnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgKyAyKSBcXHUwMDI2IDB4ZjApIHwgKDB4NjQgXFx1MDAzZVxcdTAwM2UgOCkpO1xcbitcXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfQ0NLLCAweDA4MDgpO1xcbitcXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfT0ZETSwgMHgwYTBhKTtcXG4rXFxuK1xcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JYRkxUTUFQMCwgMHhmZmZmKTtcXG4rXFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUlhGTFRNQVAyLCAweGZmZmYpO1xcbitcXHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCB0cnVlKTtcXG4rXFxuK1xcdHJldHJ5X2xpbWl0ID0gKFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUIFxcdTAwM2NcXHUwMDNjIDgpIHxcXG4rXFx0XFx0ICAgICAgUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVQ7XFxuK1xcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFVFJZX0xJTUlULCByZXRyeV9saW1pdCk7XFxuK1xcbitcXHRydHc4NzIzYnNfY29uZmlnX3NlY19jZmcocnR3ZGV2KTtcXG4rXFxuK1xcdHJldHVybiBmcmVzaF9qb2luO1xcbit9XFxuK1xcbisvKiBUaGUgdmVuZG9yIHNlbmRzIGEgZGVhdXRoIHRvIHRoZSB0YXJnZXQgYmVmb3JlIGF1dGggdG8gY2xlYXIgc3RhbGUgQVAtc2lkZVxcbisgKiBzdGF0ZTsgc3ludGhlc2l6ZSBhbmQgVFggb25lLCB0aGVuIGxldCB0aGUgQVAgc2V0dGxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX3R4X3ByZV9hdXRoX2RlYXV0aChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHU4ICpic3NpZClcXG4re1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbCA9IHt9O1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dW5zaWduZWQgaW50IGZyYW1lX2xlbiwgaGVhZHJvb207XFxuK1xcbitcXHRmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgc2l6ZW9mKG1nbXQtXFx1MDAzZXUuZGVhdXRoKTtcXG4rXFx0aGVhZHJvb20gPSBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXR4X3BrdF9kZXNjX3N6ICsgODtcXG4rXFxuK1xcdHNrYiA9IGRldl9hbGxvY19za2IoaGVhZHJvb20gKyBmcmFtZV9sZW4pO1xcbitcXHRpZiAoIXNrYilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XFxuK1xcdG1nbXQgPSBza2JfcHV0X3plcm8oc2tiLCBmcmFtZV9sZW4pO1xcbitcXHRtZ210LVxcdTAwM2VmcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfFxcbitcXHRcXHRcXHRcXHRcXHQgIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpO1xcbitcXHRtZW1jcHkobWdtdC1cXHUwMDNlZGEsIGJzc2lkLCBFVEhfQUxFTik7XFxuK1xcdG1lbWNweShtZ210LVxcdTAwM2VzYSwgdmlmLVxcdTAwM2VhZGRyLCBFVEhfQUxFTik7XFxuK1xcdG1lbWNweShtZ210LVxcdTAwM2Vic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcXG4rXFx0bWdtdC1cXHUwMDNldS5kZWF1dGgucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7XFxuK1xcbitcXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbitcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuK1xcdGluZm8tXFx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xcbitcXG4rXFx0cnR3X3R4KHJ0d2RldiwgXFx1MDAyNmNvbnRyb2wsIHNrYik7XFxuK1xcdG1zbGVlcCgxMDApO1xcbit9XFxuK1xcbisvKiBPcmNoZXN0cmF0ZSB0aGUgcHJlLWF1dGggam9pbjogcHJvZ3JhbSB0aGUgdmVuZG9yIGpvaW4gc3RhdGUsIHNlbmQgdGhlXFxuKyAqIHByZS1hdXRoIGRlYXV0aCwgd2FpdCBmb3IgYSBiZWFjb24gZnJvbSB0aGUgdGFyZ2V0LCB0aGVuIHJlcGxheSB0aGVcXG4rICogcHJlLWF1dGggY29leCBIMkNzIC0gb25jZSBwZXIgZnJlc2ggQlNTSUQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9wcmVwX3R4X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0d192aWYgKnJ0d3ZpZjtcXG4rXFx0Y29uc3QgdTggKmJzc2lkID0gTlVMTDtcXG4rXFx0Ym9vbCBmcmVzaF9qb2luO1xcbitcXG4rXFx0aWYgKCFydHc4NzIzYnNfbWdkX3ByZXBhcmVfaXNfYXV0aChydHdkZXYsIGluZm8pIHx8ICF2aWYgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnR3dmlmID0gKHN0cnVjdCBydHdfdmlmICopdmlmLVxcdTAwM2VkcnZfcHJpdjtcXG4rXFxuK1xcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cXHUwMDNlY2ZnLmFwX2FkZHIpKVxcbitcXHRcXHRic3NpZCA9IHZpZi1cXHUwMDNlY2ZnLmFwX2FkZHI7XFxuK1xcdGVsc2UgaWYgKHZpZi1cXHUwMDNlYnNzX2NvbmYuYnNzaWQgXFx1MDAyNlxcdTAwMjYgIWlzX3plcm9fZXRoZXJfYWRkcih2aWYtXFx1MDAzZWJzc19jb25mLmJzc2lkKSlcXG4rXFx0XFx0YnNzaWQgPSB2aWYtXFx1MDAzZWJzc19jb25mLmJzc2lkO1xcbitcXG4rXFx0aWYgKCFic3NpZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlc2hfam9pbiA9IHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9qb2luKHJ0d2RldiwgdmlmLCBic3NpZCk7XFxuK1xcbitcXHRpZiAoZnJlc2hfam9pbiB8fCAhcnR3dmlmLVxcdTAwM2VwcmVfYXV0aF9qb2luX2RvbmUpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHdhaXRfbXMgPSBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXModmlmKTtcXG4rXFxuK1xcdFxcdHJ0dzg3MjNic19hdXRoX3N5bmNfc3RhcnQocnR3ZGV2LCBic3NpZCk7XFxuK1xcdFxcdHJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgocnR3ZGV2LCB2aWYsIGJzc2lkKTtcXG4rXFx0XFx0cnR3ODcyM2JzX2F1dGhfc3luY193YWl0KHJ0d2Rldiwgd2FpdF9tcyk7XFxuK1xcdFxcdHJ0dzg3MjNic19hdXRoX3N5bmNfc3RvcChydHdkZXYpO1xcbitcXHRcXHRydHd2aWYtXFx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcnR3dmlmLVxcdTAwM2VwcmVfYXV0aF9oMmNfc2VudCkge1xcbitcXHRcXHRydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7XFxuK1xcdFxcdHJ0d3ZpZi1cXHUwMDNlcHJlX2F1dGhfaDJjX3NlbnQgPSB0cnVlO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0d19vcHNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0zODcsNiArODQ0LDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9BU1NPQykge1xcbiBcXHRcXHRydHdfdmlmX2Fzc29jX2NoYW5nZWQocnR3dmlmLCBjb25mKTtcXG4gXFx0XFx0aWYgKHZpZi1cXHUwMDNlY2ZnLmFzc29jKSB7XFxuK1xcdFxcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XFxuK1xcdFxcdFxcdFxcdHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihydHdkZXYsIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0cnR3ODcyM2JzX2FwcGx5X2Jhc2ljX3JhdGVzKHJ0d2RldiwgdmlmLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0cnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHJ0d2Rldik7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfRklOSVNIKTtcXG4gXFxuIFxcdFxcdFxcdHJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTtcXG5AQCAtNDA4LDYgKzg3MiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdFxcdGlmICh0ZXN0X2JpdChSVFdfRkxBR19TQ0FOTklORywgcnR3ZGV2LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdFxcdHJ0d19od19zY2FuX2Fib3J0KHJ0d2Rldik7XFxuIFxcbitcXHRcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikge1xcbitcXHRcXHRcXHRcXHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhydHdkZXYpO1xcbitcXHRcXHRcXHRcXHRydHd2aWYtXFx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdHJ0d3ZpZi1cXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFO1xcbkBAIC00MTUsOCArODg2LDI2IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CU1NJRCkge1xcbitcXHRcXHRib29sIGJzc2lkX2NsZWFyZWQgPSBpc196ZXJvX2V0aGVyX2FkZHIoY29uZi1cXHUwMDNlYnNzaWQpO1xcbitcXHRcXHRib29sIGJzc2lkX2NoYW5nZWQgPSAhZXRoZXJfYWRkcl9lcXVhbChydHd2aWYtXFx1MDAzZWJzc2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uZi1cXHUwMDNlYnNzaWQpO1xcbitcXG4rXFx0XFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXFx1MDAyNlxcdTAwMjYgYnNzaWRfY2hhbmdlZCkge1xcbitcXHRcXHRcXHRydHd2aWYtXFx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJ0d3ZpZi1cXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KHJ0d3ZpZi1cXHUwMDNlYnNzaWQsIGNvbmYtXFx1MDAzZWJzc2lkKTtcXG4gXFx0XFx0Y29uZmlnIHw9IFBPUlRfU0VUX0JTU0lEO1xcbitcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNiBic3NpZF9jbGVhcmVkKSB7XFxuK1xcdFxcdFxcdHJ0d3ZpZi1cXHUwMDNlYWlkID0gMDtcXG4rXFx0XFx0XFx0cnR3dmlmLVxcdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTk9fTElOSztcXG4rXFx0XFx0XFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFIHwgUE9SVF9TRVRfQUlEO1xcbitcXHRcXHRcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OIHxcXG4rXFx0XFx0XFx0XFx0ICAgQklUX0RJU19BVElNKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoIXJ0d19jb3JlX2NoZWNrX3N0YV9hY3RpdmUocnR3ZGV2KSlcXG4gXFx0XFx0XFx0cnR3X2NsZWFyX29wX2NoYW4ocnR3ZGV2KTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC00NDgsOCArOTM3LDE3IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9NVV9HUk9VUFMpXFxuIFxcdFxcdHJ0d19jaGlwX3NldF9naWRfdGFibGUocnR3ZGV2LCB2aWYsIGNvbmYpO1xcbiBcXG4tXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfU0xPVClcXG4rXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXFxuK1xcdFxcdHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHJ0d2RldiwgY29uZi1cXHUwMDNldXNlX3Nob3J0X3ByZWFtYmxlKTtcXG4rXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHtcXG4rXFx0XFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXFxuK1xcdFxcdFxcdHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHJ0d2RldiwgY29uZi1cXHUwMDNldXNlX3Nob3J0X3Nsb3QpO1xcbiBcXHRcXHRydHdfY29uZl90eChydHdkZXYsIHJ0d3ZpZik7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfUFMpXFxuIFxcdFxcdHJ0d19yZWNhbGNfbHBzKHJ0d2RldiwgTlVMTCk7XFxuQEAgLTYwOSwxMSArMTEwNywxOSBAQCBzdGF0aWMgaW50IHJ0d19vcHNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsXFxuIFxcdFxcdGtleS1cXHUwMDNlaHdfa2V5X2lkeCA9IGh3X2tleV9pZHg7XFxuIFxcdFxcdHJ0d19zZWNfd3JpdGVfY2FtKHJ0d2Rldiwgc2VjLCBzdGEsIGtleSxcXG4gXFx0XFx0XFx0XFx0ICBod19rZXlfdHlwZSwgaHdfa2V5X2lkeCk7XFxuK1xcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjYgdmlmIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSlcXG4rXFx0XFx0XFx0cnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2gocnR3ZGV2LCB0cnVlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgRElTQUJMRV9LRVk6XFxuIFxcdFxcdHJ0d19oY2lfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTtcXG4gXFx0XFx0cnR3X21hY19mbHVzaF9hbGxfcXVldWVzKHJ0d2RldiwgZmFsc2UpO1xcbiBcXHRcXHRydHdfc2VjX2NsZWFyX2NhbShydHdkZXYsIHNlYywga2V5LVxcdTAwM2Vod19rZXlfaWR4KTtcXG4rXFx0XFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiB2aWYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKVxcbitcXHRcXHRcXHRydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIGZhbHNlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuQEAgLTcwMyw4ICsxMjA5LDIzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfbWdkX3ByZXBhcmVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZydHdkZXYtXFx1MDAzZW11dGV4KTtcXG4gXFx0cnR3X2xlYXZlX2xwc19kZWVwKHJ0d2Rldik7XFxuLVxcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xcbi1cXHRydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7XFxuK1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdC8qIFdha2UgZnJvbSBzb2Z0IElQUyBhbmQgcnVuIHRoZSB2ZW5kb3Igam9pbiBzZXF1ZW5jZS4gVGhlIFJGS1xcbitcXHRcXHQgKiBpcyBoYW5kbGVkIGJ5IHRoZSBvbmNlLW9ubHkgcG93ZXItb24gSVFLIHBsdXMgdGhlIHBzLmNcXG4rXFx0XFx0ICogcG9zdC1JUFMgUkYtYnVzIHJlY292ZXJ5LCBub3QgYSBmcmVzaCBjYWxpYnJhdGlvbiBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJ0d19sZWF2ZV9pcHMocnR3ZGV2KSkge1xcbitcXHRcXHRcXHRydHdfZXJyKHJ0d2RldiwgXFxcImZhaWxlZCB0byBsZWF2ZSBpZGxlIHN0YXRlIGZvciBtZ2QgdHhcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTtcXG4rXFx0XFx0cnR3ODcyM2JzX21nZF9wcmVwYXJlX2F1dGhfam9pbihydHdkZXYsIHZpZiwgaW5mbyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xcbitcXHRcXHRydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7XFxuK1xcdH1cXG4rb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnJ0d2Rldi1cXHUwMDNlbXV0ZXgpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXFxuaW5kZXggY2Q5MjU0MzcwZmNjNzIuLjE2MjI4Y2FlMjUyZWJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmNcXG5AQCAtMjE3NCwxMSArMjE3NCwxMyBAQCBpbnQgcnR3X2NvcmVfaW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNldHhxX2xvY2spO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cnR3ZGV2LVxcdTAwM2V0eF9yZXBvcnQucV9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jLmxvY2spO1xcbiBcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cnR3ZGV2LVxcdTAwM2VtdXRleCk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlaGFsLnR4X3Bvd2VyX211dGV4KTtcXG4gXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlY29leC53YWl0KTtcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cnR3ZGV2LVxcdTAwM2VhdXRoX3N5bmMud2FpdCk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cnR3ZGV2LVxcdTAwM2VscHNfbGVhdmVfY2hlY2spO1xcbiBcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnJ0d2Rldi1cXHUwMDNlZndfc2Nhbl9kZW5zaXR5KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG5pbmRleCA5YzBiNzQ2NTQwYjBlZS4uOTliOTlhYTNkNjAwZjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtODI4LDYgKzgyOSw4IEBAIHN0cnVjdCBydHdfdmlmIHtcXG4gXFx0dTggYnNzaWRbRVRIX0FMRU5dO1xcbiBcXHR1OCBwb3J0O1xcbiBcXHR1OCBiY25fY3RybDtcXG4rXFx0Ym9vbCBwcmVfYXV0aF9oMmNfc2VudDtcXG4rXFx0Ym9vbCBwcmVfYXV0aF9qb2luX2RvbmU7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcnN2ZF9wYWdlX2xpc3Q7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHR4X3BhcmFtc1tJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcdGNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7XFxuQEAgLTIwNTYsNiArMjA1OSwyMCBAQCBzdHJ1Y3QgcnR3X2h3X3NjYW5faW5mbyB7XFxuIFxcdHU4IG9wX2J3O1xcbiB9O1xcbiBcXG4rLypcXG4rICogU3luY2hyb25pc2VzIHRoZSBwcmUtYXV0aCB3YWl0IG9uIGEgYmVhY29uIG9yIHByb2JlIHJlc3BvbnNlIGZyb20gdGhlXFxuKyAqIHRhcmdldCBCU1NJRCBiZWZvcmUgdGhlIGpvaW4gc2VxdWVuY2UgY29udGludWVzLlxcbisgKi9cXG4rc3RydWN0IHJ0d19hdXRoX3N5bmMge1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xcbitcXHQvKiBQcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93LiAqL1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK1xcdHU4IGJzc2lkW0VUSF9BTEVOXTtcXG4rXFx0Ym9vbCBhY3RpdmU7XFxuK1xcdGJvb2wgc2VlbjtcXG4rXFx0dTMyIHNlZW5fY291bnQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgcnR3X2RldiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuQEAgLTIxMzIsNiArMjE0OSw4IEBAIHN0cnVjdCBydHdfZGV2IHtcXG4gXFx0c3RydWN0IGNvbXBsZXRpb24gZndfc2Nhbl9kZW5zaXR5O1xcbiBcXHRib29sIGFwX2FjdGl2ZTtcXG4gXFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jIGF1dGhfc3luYztcXG4rXFxuIFxcdGJvb2wgbGVkX3JlZ2lzdGVyZWQ7XFxuIFxcdGNoYXIgbGVkX25hbWVbMzJdO1xcbiBcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2O1xcbkBAIC0yMTkzLDYgKzIyMTIsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXR4X3N0YmM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgcnR3ZGV2LVxcdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xcbkBAIC0yMjgzLDQgKzIzMDgsOCBAQCBib29sIHJ0d19jb3JlX2NoZWNrX3N0YV9hY3RpdmUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XFxuIHZvaWQgcnR3X2NvcmVfZW5hYmxlX2JlYWNvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVuYWJsZSk7XFxuIHZvaWQgcnR3X3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZik7XFxuK3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaFxcbmluZGV4IDA4ZTk0OTQ5NzdlMDZhLi5iNmQ0ZThlZDk4Yzc1NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3JlZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaFxcbkBAIC00NzksNiArNDc5LDcgQEBcXG4gI2RlZmluZSBCSVRfRElTX1RTRl9VRFRcXHRcXHRCSVQoNClcXG4gI2RlZmluZSBCSVRfRU5fQkNOX0ZVTkNUSU9OXFx0QklUKDMpXFxuICNkZWZpbmUgQklUX0VOX1RYQkNOX1JQVFxcdEJJVCgyKVxcbisjZGVmaW5lIEJJVF9ESVNfQVRJTVxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFJFR19CQ05fQ1RSTF9DTElOVDBcXHQweDA1NTFcXG4gI2RlZmluZSBSRUdfRFJWRVJMWUlOVFxcdFxcdDB4MDU1OFxcbiAjZGVmaW5lIFJFR19CQ05ETUFUSU1cXHRcXHQweDA1NTlcXG5AQCAtNTE4LDYgKzUxOSw3IEBAXFxuICNkZWZpbmUgQklUX1VDX01EX0VOXFx0XFx0QklUKDE2KVxcbiAjZGVmaW5lIEJJVF9SWFNLX1BFUlBLVFxcdFxcdEJJVCgxNSlcXG4gI2RlZmluZSBCSVRfSFRDX0xPQ19DVFJMXFx0QklUKDE0KVxcbisjZGVmaW5lIEJJVF9BTUZcXHRcXHRcXHRCSVQoMTMpXFxuICNkZWZpbmUgQklUX1JQRk1fQ0FNX0VOQUJMRVxcdEJJVCgxMilcXG4gI2RlZmluZSBCSVRfVEFfQkNOXFx0XFx0QklUKDExKVxcbiAjZGVmaW5lIEJJVF9SQ1JfQURGXFx0XFx0QklUKDExKVxcbkBAIC02MjgsNiArNjMwLDcgQEBcXG4gI2RlZmluZSBSRUdfUFNEXFx0XFx0XFx0MHgwOTEwXFxuICNkZWZpbmUgQklUX1BTRF9JTklcXHRcXHRHRU5NQVNLKDIzLCAyMilcXG4gI2RlZmluZSBSRUdfU0lOR0xFX1RPTkVfQ09OVF9UWFxcdDB4MDkxNFxcbisjZGVmaW5lIFJFR19CQl9TRUxfQlRHXzg3MjNCXFx0MHgwOTQ4XFxuICNkZWZpbmUgUkVHX0FHQ19UQUJMRVxcdFxcdDB4MDk1OFxcbiAjZGVmaW5lIFJFR19SRkVfQ1RSTF9FXFx0XFx0MHgwOTc0XFxuICNkZWZpbmUgUkVHXzJORF9DQ0FfQ1RSTFxcdDB4MDk3NlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5pbmRleCAwMWZkMjk5YWJiN2ZlOS4uNTMwMzk3NWQwMGEyYTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXG4gXFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcXG4gXFxuLVxcdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTIgYW5kXFxuLVxcdCAqIHNpbXBseSBkcm9wcyB0aGUgcGFja2V0LlxcbitcXHQvKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTJcXG4rXFx0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFxcdTAwMjZcXHUwMDI2IHBrdF9zdGF0LVxcdTAwM2Vwa3RfbGVuID09IDApIHtcXG4rXFx0aWYgKChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHxcXG4rXFx0ICAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlcGt0X2xlbiA9PSAwKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTA4Li5iMjk0YmNjNGQ4MjgwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXFxuQEAgLTIwLDYgKzIwLDE2IEBAXFxuICNpbmNsdWRlIFxcXCJ0eC5oXFxcIlxcbiBcXG4gI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTXFx0XFx0XFx0NTBcXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1xcdFxcdFxcdFxcdDEwMDBcXG4rXFxuKy8qIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlXFxuKyAqIHRoZSBwZXItQUMgc29mdHdhcmUgRklGTyBmaWxscyBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgYW5kIHdha2UgaXQgZnJvbSB0aGVcXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxcbisgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS5cXG4rICovXFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXFx0XFx0XFx0MTZcXG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVJcXHRcXHRcXHQ4XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfUkVUUllfREVMQVlcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKDEpXFxuIFxcbiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcilcXG4ge1xcbkBAIC01NDgsMTIgKzU1OCw5MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XFxuK1xcdHUzMiBmcmVlX3R4cGc7XFxuK1xcdHUxNiBwdWJxX251bTtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRwdWJxX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtIC0gcGdfdGJsLVxcdTAwM2VocV9udW0gLSBwZ190YmwtXFx1MDAzZWxxX251bSAtXFxuK1xcdFxcdCAgIHBnX3RibC1cXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVxcdTAwM2VleHFfbnVtIC0gcGdfdGJsLVxcdTAwM2VnYXBxX251bTtcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcpIHtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLCBmcmVlX3R4cGcgXFx1MDAyNiAweGZmKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsIChmcmVlX3R4cGcgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3csIChmcmVlX3R4cGcgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhmZik7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCAoZnJlZV90eHBnIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4ZmYpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cXHUwMDNlaHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cXHUwMDNlbnFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cXHUwMDNlbHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcXG4rXFx0fVxcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsXFxuK1xcdFxcdCAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKCFmcmVlX3R4cGcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCwgZnJlZV90eHBnIFxcdTAwMjYgMHhmZik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsLCAoZnJlZV90eHBnIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4ZmYpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YiwgKGZyZWVfdHhwZyBcXHUwMDNlXFx1MDAzZSAyNCkgXFx1MDAyNiAweGZmKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCk7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsKTtcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93KTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdFxcdGludCBkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXG4rXFx0XFx0aWYgKGRlZGljYXRlZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBkZWRpY2F0ZWQ7XFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBkZWRpY2F0ZWQgKyBhdG9taWNfcmVhZChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBkZWRpY2F0ZWQgKyBhdG9taWNfcmVhZChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsNDQgKzcyMSwxMzEgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGk7XFxuK1xcdHU4IGZyZWU7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoYXRvbWljX2FkZF91bmxlc3MoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUV19TRElPX09RVF9USU1FT1VUX01TOyBpKyspIHtcXG4rXFx0XFx0ZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTtcXG4rXFx0XFx0aWYgKGZyZWUpIHtcXG4rXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsIGZyZWUgLSAxKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcdGludCBmcmVlO1xcbitcXG4rXFx0c3dpdGNoIChxdWV1ZSkge1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcXG4rXFx0XFx0ZGVkaWNhdGVkID0gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxcbitcXHRcXHRkZWRpY2F0ZWQgPSBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkZWRpY2F0ZWQgPSBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XFxuK1xcdGlmIChwYWdlcyBcXHUwMDNjPSBmcmVlKSB7XFxuK1xcdFxcdGF0b21pY19zdWIocGFnZXMsIGRlZGljYXRlZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGF0b21pY19zZXQoZGVkaWNhdGVkLCAwKTtcXG4rXFx0XFx0YXRvbWljX3N1YihwYWdlcyAtIGZyZWUsIFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbiBcXHRib29sIGJ1c19jbGFpbTtcXG4gXFx0c2l6ZV90IHR4c2l6ZTtcXG4rXFx0c2l6ZV90IHdyaXRlX3NpemU7XFxuIFxcdHUzMiB0eGFkZHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cXHUwMDNlbGVuLCBxdWV1ZSk7XFxuLVxcdGlmICghdHhhZGRyKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemUgXFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cXG4rXFx0XFx0XFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3cml0ZV9zaXplIFxcdTAwM2Ugb3JpZ19sZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XFxuIFxcbi1cXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHBhZGRpbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcXG4rXFx0aWYgKCF0eGFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcdHJldCA9IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHJ0d2Rldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuIFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVxcdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgX19mdW5jX18sIHF1ZXVlKTtcXG4gXFxuIFxcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XFxuLVxcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jKTtcXG4tXFxuLVxcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSwgdHhzaXplKTtcXG4tXFxuK1xcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHdyaXRlX3NpemUpO1xcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbiBcXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcnRsODcyM2JzKSB7XFxuK1xcdFxcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTtcXG4rXFx0fVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRydHdfd2FybihydHdkZXYsXFxuIFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcXFwiLFxcbi1cXHRcXHRcXHQgdHhzaXplLCB0eGFkZHIpO1xcbitcXHRcXHRcXHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcXG4gXFxuK291dF90cmltOlxcbitcXHRpZiAod3JpdGVfc2l6ZSBcXHUwMDNlIG9yaWdfbGVuKVxcbitcXHRcXHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjc3LDcgKzg1MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxcbitcXHRcXHRcXHRcXHQgICAgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuQEAgLTY4NSw2ICs4NjUsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0dTggc2l6ZSwgdGltZW91dDtcXG4gXFxuIFxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbitcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XFxuQEAgLTcxMiw2ICs4OTMsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcXG4gXFxuIFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIDMgXFx1MDAzY1xcdTAwM2MgMik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNzQ5LDkgKzkzMiw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVxcdTAwM2VjaGlwO1xcbitcXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWZpZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MzIgZnJlZV90eHBnO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcgfHwgIWZpZm8tXFx1MDAzZWFjcV9wZ19udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBnX3RibCA9IFxcdTAwMjZjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRpZiAoZmlmby1cXHUwMDNlYWNxX3BnX251bSBcXHUwMDNjPSBwZ190YmwtXFx1MDAzZWhxX251bSArIHBnX3RibC1cXHUwMDNlbHFfbnVtICtcXG4rXFx0XFx0XFx0XFx0ICAgIHBnX3RibC1cXHUwMDNlbnFfbnVtICsgcGdfdGJsLVxcdTAwM2VleHFfbnVtICtcXG4rXFx0XFx0XFx0XFx0ICAgIHBnX3RibC1cXHUwMDNlZ2FwcV9udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHB1YnFfbnVtID0gZmlmby1cXHUwMDNlYWNxX3BnX251bSAtIHBnX3RibC1cXHUwMDNlaHFfbnVtIC0gcGdfdGJsLVxcdTAwM2VscV9udW0gLVxcbitcXHRcXHQgICBwZ190YmwtXFx1MDAzZW5xX251bSAtIHBnX3RibC1cXHUwMDNlZXhxX251bSAtIHBnX3RibC1cXHUwMDNlZ2FwcV9udW07XFxuK1xcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxcbitcXHRcXHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVxcdTAwM2VucV9udW0sIHBnX3RibC1cXHUwMDNlZXhxX251bSkpO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxcbitcXHRcXHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cXHUwMDNlaHFfbnVtLCBwZ190YmwtXFx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuK1xcdHUzMiBjbGVhcjtcXG4rXFxuK1xcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XFxuK1xcdHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XFxuIFxcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcXHUwMDI2XFxuK1xcdFxcdFxcdFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFx0XFx0aWYgKGNsZWFyKVxcbitcXHRcXHRcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICsxMDM5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cXVldWVfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxcbkBAIC04MzEsNiArMTA1NSw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFxuIFxcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcXG4gXFx0dmFsIFxcdTAwMjY9IDB4ZmZmODtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xcbiB9XFxuIFxcbkBAIC05MzcsNiArMTE2MywxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xcbiBcXG4rXFx0LyogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XFxuK1xcdCAqIHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wc1xcbitcXHQgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFhcXG4rXFx0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cXG4rXFx0ICovXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjYgcXVldWUgXFx1MDAzYyBSVFdfVFhfUVVFVUVfQkNOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcXG4rXFx0XFx0aWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LVxcdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtOTY1LDYgKzEyMDMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fcnhfc2tiKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJ0d191cGRhdGVfcnhfZnJlcV9mb3JfaW52YWxpZChydHdkZXYsIHNrYiwgcnhfc3RhdHVzLCBwa3Rfc3RhdCk7XFxuIFxcdHJ0d19yeF9zdGF0cyhydHdkZXYsIHBrdF9zdGF0LVxcdTAwM2V2aWYsIHNrYik7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSlcXG4rXFx0XFx0cnR3ODcyM2JzX2F1dGhfc3luY19yeChydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBza2ItXFx1MDAzZWxlbiwgcGt0X3N0YXQsIHJ4X3N0YXR1cyk7XFxuK1xcbiBcXHRpZWVlODAyMTFfcnhfaXJxc2FmZShydHdkZXYtXFx1MDAzZWh3LCBza2IpO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzEzMzgsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxcbitcXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrIFxcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDMyICsxNDgxLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sICpwcm9jZXNzZWQpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTE2IHFfbWFwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0KnByb2Nlc3NlZCA9IGZhbHNlO1xcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHQqcHJvY2Vzc2VkID0gdHJ1ZTtcXG4rXFx0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0cmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcXG4rXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjYgcXVldWUgXFx1MDAzYyBSVFdfVFhfUVVFVUVfQkNOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBydHdzZGlvLVxcdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNjPSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuK1xcdGJvb2wgcHJvY2Vzc2VkO1xcbiBcXHRpbnQgbGltaXQsIHF1ZXVlO1xcbiBcXG4gXFx0cnR3ZGV2ID0gd29ya19kYXRhLVxcdTAwM2VydHdkZXY7XFxuQEAgLTEyNjcsNyArMTUzMywyNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBcXHUwMDI2cHJvY2Vzc2VkKTtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0XFx0XFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNndvcmtfZGF0YS1cXHUwMDNld29yayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVCBcXHUwMDI2XFx1MDAyNiBwcm9jZXNzZWQpIHtcXG4rXFx0XFx0XFx0XFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI5NCwxNCArMTU3NywxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xcbiBcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtpXSk7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcXG4rXFx0fVxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFx0aWYgKCFydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpXFxuIFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXJ0d2RldiA9IHJ0d2RldjtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTMxNSw2ICsxNjAwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVxcdTAwM2V0eHdxKTtcXG4gXFx0a2ZyZWUocnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5pbmRleCA0NTdlOGIwMjM4MGU1Yi4uZjFmNTlmODMwMWI4ZjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbkBAIC0yMiw2ICsyMiw3IEBAXFxuIFxcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAwKVxcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVxcdEJJVCg0KVxcbiBcXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxcbkBAIC03Nyw2ICs3OCwxNCBAQFxcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXFxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXFx0XFx0XFx0QklUKDI4KVxcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVxcdFxcdEJJVCgyOSlcXG4rI2RlZmluZSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0tcXHRcXHRcXFxcXFxuK1xcdChSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVClcXG4gXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcXG5AQCAtMTQzLDcgKzE1Miw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcXG4gfTtcXG4gXFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xcbiBcXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xcbiB9O1xcbiBcXG5AQCAtMTU5LDYgKzE2OCwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xcbiBcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqdHhfaGFuZGxlcl9kYXRhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFx0Ym9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFxuK1xcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbG93O1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcXG4rXFx0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XFxuIH07XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NlYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaFxcbmluZGV4IGVmY2Y0NTQzMzk5OWFmLi43M2YyYWY2NmVmZmU4NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NlYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaFxcbkBAIC0yMiw2ICsyMiw3IEBAXFxuICNkZWZpbmUgUlRXX1NFQ19SWF9ERUNfRU5cXHRcXHRCSVQoMylcXG4gI2RlZmluZSBSVFdfU0VDX1RYX0JDX1VTRV9ES1xcdFxcdEJJVCg2KVxcbiAjZGVmaW5lIFJUV19TRUNfUlhfQkNfVVNFX0RLXFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgUlRXX1NFQ19DSEtfS0VZSURcXHRcXHRCSVQoOClcXG4gXFxuICNkZWZpbmUgUlRXX1NFQ19FTkdJTkVfRU5cXHRcXHRCSVQoOSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMyOjQ2LjQ4NTIxMzg2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMzY4ODQ3Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUwODliN2Q1OWFiOWQ5M2VhNTFhNzE0MmYyZTQ5MWUwYzBjZjUxNmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmNcbmluZGV4IDM3YzMzNmRlZjQxOTE1Li4zMTRiMmEzNjhhOGYxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguY1xuQEAgLTE0NDMsNiArMTQ0MywxOTEgQEAgc3RhdGljIHZvaWQgcnR3X2NvZXhfc2V0X2FudF9wYXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UsIHU4IHBoYXNlKVxuICNkZWZpbmUgY2FzZV9BTEdPKHNyYykgXFxcbiBcdGNhc2UgQ09FWF9BTEdPXyMjc3JjOiByZXR1cm4gI3NyY1xuIFxuKy8qIDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UgYW50ZW5uYSBoYW5kbGluZy4gT24gQlQtZGlzYWJsZWQgYm9hcmRzIHRoZVxuKyAqIHNjYW4vYXV0aCB3aW5kb3cgc3RpbGwgcm91dGVzIHRocm91Z2ggdGhlIFBUQSBtdXg7IHRoZXNlIGhlbHBlcnMgZm9yY2UgdGhlXG4rICogdmVuZG9yLXNoYXBlZCBXaUZpLW93bmVkIGFudGVubmEgcGF0aCBzbyBkaXJlY3RlZCBtYW5hZ2VtZW50IFRYIHJlYWNoZXMgYWlyLlxuKyAqL1xuKyNkZWZpbmUgUkVHXzg3MjNCU19CVF9DT0VYX0NUUkxcdFx0MHgwMDM5XG4rI2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkdcdFx0MHgwOTMwXG4rI2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkcxXHRcdDB4MDk0NFxuKyNkZWZpbmUgUkVHXzg3MjNCU19CQl9BTlRfQlVGXHRcdDB4MDk3NFxuKyNkZWZpbmUgUlRXODcyM0JTX0NPRVhfSF9XTEFOX0FDVElWRVx0MHgxODAwMTAxYlxuK1xuK3N0YXRpYyBib29sIHJ0d19jb2V4Xzg3MjNic19hbnRfaXNfYXV4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cmV0dXJuICEhKHJ0d2Rldi1cdTAwM2VlZnVzZS5idF9zZXR0aW5nIFx1MDAyNiBCSVQoNikpO1xuK31cbitcbitzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBydHdkZXYtXHUwMDNlY29leC5zdGF0LmJ0X2Rpc2FibGVkO1xuK31cbitcbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3X2NvZXhfODcyM2JzX2FudF9pc19hdXgocnR3ZGV2KSA/IDB4ODAgOiAweDIwMDtcbit9XG4rXG4rLyogV3JpdGUgQkJfU0VMX0JURywgcmV0cnlpbmcgb25jZSB3aXRoIFNZU19GVU5DIEJCIHJlc2V0IGlmIHRoZSBmaXJzdFxuKyAqIHdyaXRlIGRvZXMgbm90IHN0aWNrIChSRi9CQiBjbG9jayBtYXkgaGF2ZSBiZWVuIGdhdGVkKS5cbisgKi9cbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiB2YWx1ZSlcbit7XG4rXHR1OCBzeXNfZnVuY19iZWZvcmU7XG4rXHR1MzIgcmVhZGJhY2s7XG4rXG4rXHRzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pO1xuK1x0aWYgKChzeXNfZnVuY19iZWZvcmUgXHUwMDI2IChCSVQoMCkgfCBCSVQoMSkpKSAhPSAoQklUKDApIHwgQklUKDEpKSkge1xuK1x0XHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19TWVNfRlVOQ19FTiwgQklUKDApIHwgQklUKDEpKTtcbitcdFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4rXHR9XG4rXG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XG4rXHRyZWFkYmFjayA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQik7XG4rXHRpZiAocmVhZGJhY2sgPT0gdmFsdWUpXG4rXHRcdHJldHVybiByZWFkYmFjaztcbitcbitcdHVzbGVlcF9yYW5nZSgxMCwgMTEpO1xuK1x0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XG4rXG4rXHRyZXR1cm4gcnR3X3JlYWQzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCKTtcbit9XG4rXG4rc3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHJldHVybiBydHdfY29leF84NzIzYnNfd3JpdGVfYmJfc2VsX2J0ZyhydHdkZXYsXG4rXHRcdFx0XHRcdFx0cnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChydHdkZXYpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgaGlnaClcbit7XG4rXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoaGlnaCkge1xuK1x0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CVF9DT0VYX1RBQkxFX0gsXG4rXHRcdFx0ICAgIFJUVzg3MjNCU19DT0VYX0hfV0xBTl9BQ1RJVkUpO1xuK1x0fSBlbHNlIHtcbitcdFx0cnR3X2NvZXhfc2V0X3dsX3ByaV9tYXNrKHJ0d2RldiwgQ09FWF9XTFBSSV9UWF9DQ0ssIGZhbHNlKTtcbitcdFx0cnR3X2NvZXhfc2V0X3dsX3ByaV9tYXNrKHJ0d2RldiwgQ09FWF9XTFBSSV9SWF9DQ0ssIGZhbHNlKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICBib29sIGtlZXBfcHRhX293bmVyKVxuK3tcbitcdHUzMiBiZWZvcmUsIGFmdGVyO1xuK1xuK1x0YmVmb3JlID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19QQURfQ1RSTDEpO1xuK1x0YWZ0ZXIgPSBiZWZvcmUgXHUwMDI2IH4oQklUX0xOQU9OX1dMQlRfU0VMIHwgQklUX1NXX0RQRFRfU0VMX0RBVEEpO1xuK1x0aWYgKGtlZXBfcHRhX293bmVyKVxuK1x0XHRhZnRlciB8PSBCSVRfUEFQRV9XTEJUX1NFTDtcbitcdGVsc2VcbitcdFx0YWZ0ZXIgXHUwMDI2PSB+QklUX1BBUEVfV0xCVF9TRUw7XG4rXHRpZiAoYWZ0ZXIgIT0gYmVmb3JlKVxuK1x0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19QQURfQ1RSTDEsIGFmdGVyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3coc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocnR3X3JlYWQ4KHJ0d2RldiwgUkVHX0dOVF9CVCkgPT0gMHgwMCBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfQlRfQ09FWF9FTkhfSU5UUl9DVFJMKSA9PSAweDBjKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydHdfZndfc2V0X2dudF9idChydHdkZXYsIDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfZm9yY2VfYXNzb2NfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHUzMiBhbnRfdGFyZ2V0O1xuK1xuK1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YW50X3RhcmdldCA9IHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KTtcbitcbitcdHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHJ0d2Rldik7XG4rXHRydHdfY29leF9zZXRfYW50X3N3aXRjaChydHdkZXYsIENPRVhfU1dJVENIX0NUUkxfQllfUFRBLFxuK1x0XHRcdFx0Q09FWF9TV0lUQ0hfVE9fTk9DQVJFKTtcbitcdHJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShydHdkZXYsIHRydWUpO1xuK1x0cnR3X2NvZXhfODcyM2JzX3dyaXRlX2JiX3NlbF9idGcocnR3ZGV2LCBhbnRfdGFyZ2V0KTtcbitcdHJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHJ0d2RldiwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTggc3lzX2Z1bmNfYmVmb3JlO1xuK1xuK1x0c3lzX2Z1bmNfYmVmb3JlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOKTtcbitcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcbitcdFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XG4rXHRcdHVzbGVlcF9yYW5nZSgxMCwgMTEpO1xuK1x0fVxuK1xuK1x0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CVF9DT0VYX0NUUkwsIEJJVCgzKSwgMHgxKTtcbitcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfODcyM0JTX0JCX0FOVF9CVUYsIDB4ZmYpO1xuK1x0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMSwgMHgzLCAweDMpO1xuK1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR184NzIzQlNfQkJfQU5UX0NGRywgMHg3Nyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19hcHBseV9zY2FuX3RhYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cnR3ZGV2LVx1MDAzZWNvZXguZG0uY3VyX3RhYmxlID0gMjtcbitcdHJ0d19jb2V4X3NldF90YWJsZShydHdkZXYsIHRydWUsIDB4NWE1YTVhNWEsIDB4NWE1YTVhNWEpO1xuK31cbitcbisvKiBOb24tY29ubmVjdGVkIHNjYW4vYXV0aCB3b3JrYXJvdW5kOiBQUy1URE1BIHR5cGUgOCBvZmYsIFBUQSBhbnRlbm5hIHBhdGgsXG4rICogY29leCB0YWJsZSB0eXBlIDIgKG1hdGNoZXMgdGhlIHZlbmRvciBub24tY29ubmVjdGVkIGFyYml0cmF0aW9uKS5cbisgKi9cbit2b2lkIHJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X2NvZXhfZG0gKmNvZXhfZG0gPSBcdTAwMjZydHdkZXYtXHUwMDNlY29leC5kbTtcbitcdHN0cnVjdCBydHdfY29leF9zdGF0ICpjb2V4X3N0YXQgPSBcdTAwMjZydHdkZXYtXHUwMDNlY29leC5zdGF0O1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybjtcbitcbitcdGNvZXhfZG0tXHUwMDNlY3VyX3BzX3RkbWFfb24gPSBmYWxzZTtcbitcdGNvZXhfZG0tXHUwMDNlY3VyX3BzX3RkbWEgPSA4O1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMF0gPSAweDA4O1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMV0gPSAweDAwO1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMl0gPSAweDAwO1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbM10gPSAweDAwO1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbNF0gPSAweDAwO1xuK1xuK1x0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XG4rXHRydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhydHdkZXYpO1xuK1x0cnR3X2NvZXhfc2V0X2FudF9wYXRoKHJ0d2RldiwgdHJ1ZSwgQ09FWF9TRVRfQU5UXzJHKTtcbitcdHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHJ0d2Rldik7XG4rXHRydHdfY29leF84NzIzYnNfYXBwbHlfc2Nhbl90YWJsZShydHdkZXYpO1xuK1x0aWYgKGNvZXhfc3RhdC1cdTAwM2VidF9kaXNhYmxlZClcbitcdFx0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XG4rXHRydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChydHdkZXYpO1xuK1x0cnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwocnR3ZGV2LCB0cnVlKTtcbit9XG4rXG4rLyogUmVwbGF5ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHN0YXJ0X2NsbnRfam9pbigpL2F1dGg6IEJUX0lORk8gKyBQUy1URE1BIHR5cGUgOFxuKyAqIHRoZW4gdGhlIGZvcmNlZCBXaUZpIFBUQSBhbnRlbm5hIHBhdGgsIHNvIHRoZSBhdXRoIHdpbmRvdyBpcyBjbGVhbi5cbisgKi9cbit2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4rXG4rXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydHdfZndfcXVlcnlfYnRfaW5mbyhydHdkZXYpO1xuK1x0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XG4rXHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbitcdHJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApO1xuK1x0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcbitcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBjaGFyICpydHdfY29leF9nZXRfYWxnb19zdHJpbmcodTggYWxnbylcbiB7XG4gXHRzd2l0Y2ggKGFsZ28pIHtcbkBAIC0yNzcwLDcgKzI5NTUsNyBAQCB2b2lkIHJ0d19jb2V4X3Bvd2VyX29uX3NldHRpbmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdGNvZXgtXHUwMDNlc3RvcF9kbSA9IHRydWU7XG4gXHRjb2V4LVx1MDAzZXdsX3JmX29mZiA9IGZhbHNlO1xuIFxuLVx0LyogZW5hYmxlIEJCLCB3ZSBjYW4gd3JpdGUgMHg5NDggKi9cbitcdC8qIGVuYWJsZSBCQiwgc28gQkJfU0VMX0JURyBpcyB3cml0YWJsZSAqL1xuIFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sXG4gXHRcdCAgICAgICBCSVRfRkVOX0JCX0dMQl9SU1QgfCBCSVRfRkVOX0JCX1JTVEIpO1xuIFxuQEAgLTI4NzcsNiArMzA2MiwzMyBAQCB2b2lkIHJ0d19jb2V4X3NjYW5fbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpXG4gXHRjb2V4LVx1MDAzZWZyZWV6ZSA9IGZhbHNlO1xuIFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xuIFxuK1x0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IGtlZXAgdGhlIHNjYW4vYXV0aCBQVEEgYW50ZW5uYSBzdGF0ZSB0aGVcbitcdCAqIHZlbmRvciB1c2VzIGFuZCBza2lwIHRoZSBnZW5lcmljIGNvZXggcnVuLiBBdCBzY2FuIHN0YXJ0IChmaXJtd2FyZVxuK1x0ICogaGFzIGJlZW4gdXAgbG9uZyBlbm91Z2ggZm9yIHN0YWJsZSBSWCBETUEpIHJlcGxheSB0aGUgdmVuZG9yIEJUX01QIC9cbitcdCAqIEJUX0lORk8gcXVlcmllcywgdGhlbiByZS1lc3RhYmxpc2ggdGhlIHNjYW4tcGF0aCBQVEEgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkge1xuK1x0XHRpZiAodHlwZSA9PSBDT0VYX1NDQU5fU1RBUlRfMkcgfHwgdHlwZSA9PSBDT0VYX1NDQU5fU1RBUlQpIHtcbitcdFx0XHRzdHJ1Y3QgcnR3X2NvZXhfaW5mb19yZXEgcmVxID0ge307XG4rXG4rXHRcdFx0Y29leF9zdGF0LVx1MDAzZWNudF93bFtDT0VYX0NOVF9XTF9TQ0FOQVBdID0gMDtcbitcdFx0XHRjb2V4X3N0YXQtXHUwMDNld2xfaGlfcHJpX3Rhc2syID0gdHJ1ZTtcbitcbitcdFx0XHRyZXEuc2VxID0gMHgwZTtcbitcdFx0XHRyZXEub3BfY29kZSA9IEJUX01QX0lORk9fT1BfU1VQUF9WRVI7XG4rXHRcdFx0cnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCBcdTAwMjZyZXEpO1xuK1x0XHRcdHJlcS5zZXEgPSAweDBmO1xuK1x0XHRcdHJlcS5vcF9jb2RlID0gQlRfTVBfSU5GT19PUF9QQVRDSF9WRVI7XG4rXHRcdFx0cnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCBcdTAwMjZyZXEpO1xuK1x0XHRcdHJ0d19md19xdWVyeV9idF9pbmZvKHJ0d2Rldik7XG4rXG4rXHRcdFx0cnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChydHdkZXYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGNvZXhfc3RhdC1cdTAwM2V3bF9oaV9wcmlfdGFzazIgPSBmYWxzZTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAodHlwZSA9PSBDT0VYX1NDQU5fU1RBUlRfNUcpIHtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfQ09FWCxcbiBcdFx0XHRcIltCVENvZXhdLCBTQ0FOIFNUQVJUIG5vdGlmeSAoNUcpXFxuXCIpO1xuQEAgLTI5MzgsNiArMzE1MCwxNyBAQCB2b2lkIHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpXG4gXHRpZiAoY29leC1cdTAwM2VtYW51YWxfY29udHJvbCB8fCBjb2V4LVx1MDAzZXN0b3BfZG0pXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIDg3MjNCUyBTRElPIEJULWRpc2FibGVkOiB0aGUgdmVuZG9yIENvbm5lY3ROb3RpZnkoKSBlYXJseS1yZXR1cm5zXG4rXHQgKiB3aXRob3V0IHNlbmRpbmcgSDJDczsgc2Nhbl93b3JrYXJvdW5kIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhlIFBUQVxuK1x0ICogcGF0aCAvIGNvZXggdGFibGUgLyBQUy1URE1BLiBLZWVwIG9ubHkgdGhlIHJlZ2lzdGVyLWxldmVsIFBUQVxuK1x0ICogcmVhc3NlcnRpb24gYXQgYXNzb2NpYXRlLXN0YXJ0LlxuK1x0ICovXG4rXHRpZiAocnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpIHtcbitcdFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpXG4rXHRcdFx0cnR3X2NvZXhfODcyM2JzX2ZvcmNlX2Fzc29jX3B0YV9hbnQocnR3ZGV2KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xuIFxuIFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfNUdfU1RBUlQpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oXG5pbmRleCBjMzk4YmU4MzkxZjdiMC4uYzU4YWUwYTUwYjMwYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmhcbkBAIC00MzAsNCArNDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19jb2V4X2FjdGl2ZV9xdWVyeV9idF9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJ0d19jb2V4X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTtcbiB9XG4gXG4rdm9pZCBydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuK3ZvaWQgcnR3X2NvZXhfODcyM2JzX3ByZV9hdXRoX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbmluZGV4IDk0NWZlZGNkMzc1YjYyLi43YzE3MDg2Y2FjMzJjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG5AQCAtNzg2LDYgKzc4NiwxNyBAQCB2b2lkIHJ0d19md19tZWRpYV9zdGF0dXNfcmVwb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IG1hY19pZCwgYm9vbCBjb25uZWN0KVxuIFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbiB9XG4gXG4rLyogODcyM0JTIFNESU86IHNldCB0aGUgZmlybXdhcmUgR05UX0JUIHN0YXRlICgwID0gV2lGaSBvd25zIHRoZSBhbnRlbm5hKS4gKi9cbit2b2lkIHJ0d19md19zZXRfZ250X2J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHN0YXRlKVxuK3tcbitcdHU4IGgyY19wa3RbSDJDX1BLVF9TSVpFXSA9IHswfTtcbitcbitcdFNFVF9IMkNfQ01EX0lEX0NMQVNTKGgyY19wa3QsIEgyQ19DTURfR05UX0JUKTtcbitcdFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgc3RhdGUpO1xuK1xuK1x0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbit9XG4rXG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d190cmFmZmljX3N0YXRzICpzdGF0cyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VzdGF0cztcbkBAIC0xNDY2LDEwICsxNDc3LDE0IEBAIHZvaWQgcnR3X2FkZF9yc3ZkX3BhZ2Vfc3RhKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRydHdfYWRkX3JzdmRfcGFnZShydHdkZXYsIHJ0d3ZpZiwgUlNWRF9MUFNfUEdfSU5GTywgdHJ1ZSk7XG4gfVxuIFxuKy8qIFJFR19EV0JDTjFfQ1RSTCBiaXQgMjAgKFNXX0JDTl9TRUwgZm9yIHBvcnQgMCksIHJlbGF0aXZlIHRvIGJ5dGUgKzIgKi9cbisjZGVmaW5lIEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDBcdCgyMCAtIDE2KVxuK1xuIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXG4gXHRcdFx0XHR1OCAqYnVmLCB1MzIgc2l6ZSlcbiB7XG4tXHR1OCBiY2twWzNdO1xuK1x0Y29uc3QgYm9vbCBpc184NzIzYnNfc2RpbyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHU4IGJja3BbNF07XG4gXHR1OCB2YWw7XG4gXHR1MTYgcnN2ZF9wZ19oZWFkO1xuIFx0dTMyIGJjbl92YWxpZF9hZGRyO1xuQEAgLTE0OTksMTMgKzE1MTQsMjggQEAgaW50IHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgcGdfYWRkcixcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsXG4gXHRcdCAgIChiY2twWzJdIFx1MDAyNiB+QklUX0VOX0JDTl9GVU5DVElPTikgfCBCSVRfRElTX1RTRl9VRFQpO1xuIFxuLVx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKSB7XG4rXHQvKiBDbGVhciBCSVRfRU5fQkNOUV9ETCBzbyB0aGUgY2hpcCBkb2VzIG5vdCB0cmVhdCB0aGUgcmVzZXJ2ZWQtcGFnZVxuK1x0ICogdXBsb2FkIGFzIGEgcmVhbCBiZWFjb247IG90aGVyd2lzZSBCSVRfQkNOX1ZBTElEIG5ldmVyIGFzc2VydHMuIFRoZVxuK1x0ICogdmVuZG9yIHJ0bDg3MjNicyBkcml2ZXIgZG9lcyB0aGlzIHVuY29uZGl0aW9uYWxseTsgcnR3ODggb25seSBkaWQgaXRcbitcdCAqIGZvciBQQ0llLCB3aGljaCBsZWZ0IDg3MjNCUyBTRElPJ3MgQkNOX1ZBTElEIGhhbmRzaGFrZSBmYWlsaW5nLlxuK1x0ICovXG4rXHRpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pIHtcbiBcdFx0dmFsID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyKTtcbiBcdFx0YmNrcFsxXSA9IHZhbDtcbiBcdFx0dmFsIFx1MDAyNj0gfihCSVRfRU5fQkNOUV9ETCBcdTAwM2VcdTAwM2UgMTYpO1xuIFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCB2YWwpO1xuIFx0fVxuIFxuK1x0LyogODcyM0JTIFNESU86IHBvaW50IHRoZSBTVyBiZWFjb24gZG93bmxvYWQgcGF0aCBhdCBwb3J0IDAsIGVsc2VcbitcdCAqIEJJVF9CQ05fVkFMSUQgaXMgbmV2ZXIgYXNzZXJ0ZWQgYWZ0ZXIgdGhlIFNESU8gdXBsb2FkIGNvbXBsZXRlcy5cbitcdCAqL1xuK1x0aWYgKGlzXzg3MjNic19zZGlvKSB7XG4rXHRcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCArIDIpO1xuK1x0XHRiY2twWzNdID0gdmFsO1xuK1x0XHR2YWwgXHUwMDI2PSB+QklUKEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDApO1xuK1x0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0RXQkNOMV9DVFJMICsgMiwgdmFsKTtcbitcdH1cbitcbiBcdHJldCA9IHJ0d19oY2lfd3JpdGVfZGF0YV9yc3ZkX3BhZ2UocnR3ZGV2LCBidWYsIHNpemUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRydHdfZXJyKHJ0d2RldiwgXCJmYWlsZWQgdG8gd3JpdGUgZGF0YSB0byByc3ZkIHBhZ2VcXG5cIik7XG5AQCAtMTUyNiwxMSArMTU1NiwxMyBAQCBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLFxuIFx0fVxuIFxuIHJlc3RvcmU6XG4rXHRpZiAoaXNfODcyM2JzX3NkaW8pXG4rXHRcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgKyAyLCBiY2twWzNdKTtcbiBcdHJzdmRfcGdfaGVhZCA9IHJ0d2Rldi1cdTAwM2VmaWZvLnJzdmRfYm91bmRhcnk7XG4gXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19GSUZPUEFHRV9DVFJMXzIsXG4gXHRcdCAgICByc3ZkX3BnX2hlYWQgfCBCSVRfQkNOX1ZBTElEX1YxKTtcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIGJja3BbMl0pO1xuLVx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKVxuK1x0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFIHx8IGlzXzg3MjNic19zZGlvKVxuIFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCBiY2twWzFdKTtcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQ1IgKyAxLCBiY2twWzBdKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcbmluZGV4IDQ4YWQ5Y2VhYjZlYTEyLi5mNWVkNjVjNDYzNTBmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5AQCAtNTcyLDYgKzU3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydHdfaDJjX3BrdF9zZXRfaGVhZGVyKHU4ICpoMmNfcGt0LCB1OCBzdWJfaWQpXG4gI2RlZmluZSBIMkNfQ01EX1FVRVJZX0JUX01QX0lORk9cdDB4NjdcbiAjZGVmaW5lIEgyQ19DTURfQlRfV0lGSV9DT05UUk9MXHRcdDB4NjlcbiAjZGVmaW5lIEgyQ19DTURfV0lGSV9DQUxJQlJBVElPTlx0MHg2ZFxuKyNkZWZpbmUgSDJDX0NNRF9HTlRfQlRcdFx0XHQweDZlXG4gI2RlZmluZSBIMkNfQ01EX1FVRVJZX0JUX0hJRF9JTkZPXHQweDczXG4gXG4gI2RlZmluZSBIMkNfQ01EX0tFRVBfQUxJVkVcdFx0MHgwM1xuQEAgLTY4NCw2ICs2ODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2gyY19wa3Rfc2V0X2hlYWRlcih1OCAqaDJjX3BrdCwgdTggc3ViX2lkKVxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAxLCB2YWx1ZSwgR0VOTUFTSygzMSwgMjQpKVxuICNkZWZpbmUgU0VUX1FVRVJZX0JUX0lORk8oaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuKyNkZWZpbmUgU0VUX0dOVF9CVF9TVEFURShoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuK1x0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fTElOSyhoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgR0VOTUFTSygxNSwgOCkpXG4gI2RlZmluZSBTRVRfV0xfQ0hfSU5GT19DSE5MKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5AQCAtODQ5LDYgKzg1Miw3IEBAIHZvaWQgcnR3X2Z3X3NlbmRfcnNzaV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBydHdfc3RhX2luZm8gKnNpKTtcbiB2b2lkIHJ0d19md19zZW5kX3JhX2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHJ0d19zdGFfaW5mbyAqc2ksXG4gXHRcdFx0IGJvb2wgcmVzZXRfcmFfbWFzayk7XG4gdm9pZCBydHdfZndfbWVkaWFfc3RhdHVzX3JlcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBtYWNfaWQsIGJvb2wgY29ubik7XG4rdm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSk7XG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuIHZvaWQgcnR3X2Z3X2JlYWNvbl9maWx0ZXJfY29uZmlnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgY29ubmVjdCxcbiBcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmNcbmluZGV4IDc2NmYyMmQzMTA3OWVlLi45MTAxNGE4ZTI0MmIzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jXG5AQCAtMTUsNiArMTUsNDYzIEBAXG4gI2luY2x1ZGUgXCJ3b3cuaFwiXG4gI2luY2x1ZGUgXCJzYXIuaFwiXG4gXG4rLyogODcyM0JTIFNESU86IHJlY29yZCBhIGJlYWNvbi9wcm9iZS1yZXNwIHNlZW4gZnJvbSB0aGUgdGFyZ2V0IEJTU0lEIGR1cmluZ1xuKyAqIHRoZSBwcmUtYXV0aCB3aW5kb3cgc28gdGhlIGpvaW4gc2VxdWVuY2UgKG1nZF9wcmVwYXJlX3R4KSBjYW4gd2FpdCBmb3IgaXQsXG4rICogbWlycm9yaW5nIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkuIENhbGxlZCBmcm9tIHRoZSBTRElPIFJYIHBhdGguXG4rICovXG4rdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3J4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHUzMiBsZW4sXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxuK3tcbitcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRfX2xlMTYgZmMgPSBoZHItXHUwMDNlZnJhbWVfY29udHJvbDtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cdTAwM2VmbGFncykgfHxcbitcdCAgICBwa3Rfc3RhdC1cdTAwM2VjcmNfZXJyIHx8IHBrdF9zdGF0LVx1MDAzZWljdl9lcnIpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihmYykgXHUwMDI2XHUwMDI2ICFpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0aWYgKHN5bmMtXHUwMDNlYWN0aXZlIFx1MDAyNlx1MDAyNiBldGhlcl9hZGRyX2VxdWFsKGhkci1cdTAwM2VhZGRyMywgc3luYy1cdTAwM2Vic3NpZCkpIHtcbitcdFx0c3luYy1cdTAwM2VzZWVuID0gdHJ1ZTtcbitcdFx0c3luYy1cdTAwM2VzZWVuX2NvdW50Kys7XG4rXHRcdHdha2VfdXAoXHUwMDI2c3luYy1cdTAwM2V3YWl0KTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocnR3ODcyM2JzX2F1dGhfc3luY19yeCk7XG4rXG4rLyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqL1xuK1xuKyNkZWZpbmUgUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVRcdFx0MHgzMFxuKyNkZWZpbmUgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX0ZBTExCQUNLX01TXHQxMjBcbisjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVNcdFx0ODBcbisjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NQVhfTVNcdFx0MTYwXG4rI2RlZmluZSBSVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUXHRcdEJJVCg3KVxuKyNkZWZpbmUgUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRVx0XHQ5XG4rI2RlZmluZSBSVFc4NzIzQlNfTE9OR19TTE9UX1RJTUVcdFx0MjBcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzFNXHRcdFx0QklUKDApXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yTVx0XHRcdEJJVCgxKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNV81TVx0XHRcdEJJVCgyKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMTFNXHRcdFx0QklUKDMpXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl82TVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfOU1cdFx0XHRCSVQoNSlcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzEyTVx0XHRcdEJJVCg2KVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMThNXHRcdFx0QklUKDcpXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yNE1cdFx0XHRCSVQoOClcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzM2TVx0XHRcdEJJVCg5KVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNDhNXHRcdFx0QklUKDEwKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNTRNXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIFxcXG4rXHQoUlRXODcyM0JTX1JSU1JfMU0gfCBSVFc4NzIzQlNfUlJTUl8yTSB8IFxcXG4rXHQgUlRXODcyM0JTX1JSU1JfNV81TSB8IFJUVzg3MjNCU19SUlNSXzExTSlcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJHX0ZPUkNFXHRcdFx0UlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yR19BTExPVyBcXFxuK1x0KFJUVzg3MjNCU19SUlNSX0NDS19SQVRFUyB8IFJUVzg3MjNCU19SUlNSXzZNIHwgXFxcbitcdCBSVFc4NzIzQlNfUlJTUl8xMk0gfCBSVFc4NzIzQlNfUlJTUl8yNE0pXG4rXG4rLyogS2VlcCB0aGUgUkNSIGF0IHRoZSB2ZW5kb3IgdGFyZ2V0LW9ubHkgc3RhdGUgKEFNRiArIENCU1NJRCkgYWNyb3NzIHRoZSB3aG9sZVxuKyAqIGNvbm5lY3Qgd2luZG93LCBtYXRjaGluZyB0aGUgdmVuZG9yIFNUQSBwYXRoLiBhY2NlcHRfYWxsIGlzIGtlcHQgb25seSBmb3IgdGhlXG4rICogY2FsbGVyJ3MgaW50ZW50OyBib3RoIHBhdGhzIGNvbnZlcmdlIHRoZSBmaWx0ZXIgdG8gdGFyZ2V0LW9ubHkuXG4rICovXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgYWNjZXB0X2FsbClcbit7XG4rXHRydHdkZXYtXHUwMDNlaGFsLnJjciB8PSBCSVRfQU1GIHwgQklUX0NCU1NJRF9EQVRBIHwgQklUX0NCU1NJRF9CQ047XG4rXHRydHdkZXYtXHUwMDNlaGFsLnJjciBcdTAwMjY9IH5CSVRfQUFQO1xuK1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUkNSLCBydHdkZXYtXHUwMDNlaGFsLnJjcik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHUxNiBzZWMgPSBydHdfcmVhZDE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcpO1xuK1xuK1x0c2VjIHw9IFJUV19TRUNfQ0hLX0tFWUlEIHwgUlRXX1NFQ19UWF9ERUNfRU4gfCBSVFdfU0VDX1JYX0RFQ19FTjtcbitcdHJ0d193cml0ZTE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcsIHNlYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfZGVmYXVsdF9rZXlfc2VhcmNoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdFx0Ym9vbCBlbmFibGUpXG4re1xuK1x0dTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7XG4rXG4rXHRpZiAoZW5hYmxlKVxuK1x0XHRzZWMgfD0gUlRXX1NFQ19UWF9CQ19VU0VfREsgfCBSVFdfU0VDX1RYX1VOSV9VU0VfREsgfFxuK1x0XHQgICAgICAgUlRXX1NFQ19SWF9VTklfVVNFX0RLO1xuK1x0ZWxzZVxuK1x0XHRzZWMgXHUwMDI2PSB+KFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8IFJUV19TRUNfUlhfVU5JX1VTRV9ESyB8XG4rXHRcdFx0IFJUV19TRUNfVFhfQkNfVVNFX0RLIHwgUlRXX1NFQ19SWF9CQ19VU0VfREspO1xuK1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cnR3X3dyaXRlOF9jbHIocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIEJJVF9ESVNfVFNGX1VEVCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBzaG9ydF9wcmVhbWJsZSlcbit7XG4rXHR1OCB2YWwgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfUlJTUiArIDIpIFx1MDAyNiB+UlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVDtcbitcbitcdGlmIChzaG9ydF9wcmVhbWJsZSlcbitcdFx0dmFsIHw9IFJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQ7XG4rXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1JSU1IgKyAyLCB2YWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIHNob3J0X3Nsb3QpXG4re1xuK1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR19TTE9ULFxuK1x0XHQgICBzaG9ydF9zbG90ID8gUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRSA6XG4rXHRcdFx0XHRSVFc4NzIzQlNfTE9OR19TTE9UX1RJTUUpO1xuK31cbitcbitzdGF0aWMgdTE2IHJ0dzg3MjNic19ycnNyX2Zyb21faWVfcmF0ZSh1OCByYXRlKVxuK3tcbitcdHN3aXRjaCAocmF0ZSBcdTAwMjYgMHg3Zikge1xuK1x0Y2FzZSAyOiAgIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xTTtcbitcdGNhc2UgNDogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMk07XG4rXHRjYXNlIDExOiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzVfNU07XG4rXHRjYXNlIDIyOiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzExTTtcbitcdGNhc2UgMTI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNk07XG4rXHRjYXNlIDE4OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzlNO1xuK1x0Y2FzZSAyNDogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMk07XG4rXHRjYXNlIDM2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzE4TTtcbitcdGNhc2UgNDg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMjRNO1xuK1x0Y2FzZSA3MjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8zNk07XG4rXHRjYXNlIDk2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzQ4TTtcbitcdGNhc2UgMTA4OiByZXR1cm4gUlRXODcyM0JTX1JSU1JfNTRNO1xuK1x0ZGVmYXVsdDogIHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhjb25zdCB1OCAqaWUsIHUxNiAqYmFzaWNfcmF0ZXMsXG4rXHRcdFx0XHRcdCAgYm9vbCAqdmFsaWQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWllKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZVsxXTsgaSsrKSB7XG4rXHRcdHUxNiByO1xuK1xuK1x0XHRpZiAoIShpZVtpICsgMl0gXHUwMDI2IDB4ODApKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyID0gcnR3ODcyM2JzX3Jyc3JfZnJvbV9pZV9yYXRlKGllW2kgKyAyXSk7XG4rXHRcdGlmICghcilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0KmJhc2ljX3JhdGVzIHw9IHI7XG4rXHRcdCp2YWxpZCA9IHRydWU7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JSU1IsIDB4ZmZmZjEpO1xuK1x0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IDB4ZmZmZjE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdFx0XHRjb25zdCB1OCAqYnNzaWQpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9IFx1MDAyNnZpZi1cdTAwM2Vic3NfY29uZjtcbitcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmxvb2t1cF9ic3MgPSBOVUxMO1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDtcbitcdGJvb2wgdmFsaWQgPSBmYWxzZTtcbitcdHUxNiBiYXNpY19yYXRlcyA9IDA7XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoY29uZi1cdTAwM2Vic3MpIHtcbitcdFx0YnNzID0gY29uZi1cdTAwM2Vic3M7XG4rXHR9IGVsc2UgaWYgKGJzc2lkIFx1MDAyNlx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xuK1x0XHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuK1x0XHRic3MgPSBsb29rdXBfYnNzO1xuK1x0fVxuK1xuK1x0aWYgKGJzcykge1xuK1x0XHRjb25zdCB1OCAqcmF0ZXMsICpleHQ7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0cmF0ZXMgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpO1xuK1x0XHRleHQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTKTtcbitcdFx0cnR3ODcyM2JzX2NvbGxlY3RfYmFzaWNfcmF0ZXMocmF0ZXMsIFx1MDAyNmJhc2ljX3JhdGVzLCBcdTAwMjZ2YWxpZCk7XG4rXHRcdHJ0dzg3MjNic19jb2xsZWN0X2Jhc2ljX3JhdGVzKGV4dCwgXHUwMDI2YmFzaWNfcmF0ZXMsIFx1MDAyNnZhbGlkKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR9XG4rXG4rXHRpZiAodmFsaWQpIHtcbitcdFx0YmFzaWNfcmF0ZXMgfD0gUlRXODcyM0JTX1JSU1JfMkdfRk9SQ0U7XG4rXHRcdGJhc2ljX3JhdGVzIFx1MDAyNj0gUlRXODcyM0JTX1JSU1JfMkdfQUxMT1c7XG4rXHRcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JSU1IsIGJhc2ljX3JhdGVzKTtcbitcdFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19SUlNSICsgMixcbitcdFx0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfUlJTUiArIDIpIFx1MDAyNiAweGYwKTtcbitcdFx0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IGJhc2ljX3JhdGVzO1xuK1x0fVxuK1xuK1x0aWYgKGxvb2t1cF9ic3MpXG4rXHRcdGNmZzgwMjExX3B1dF9ic3MocnR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LCBsb29rdXBfYnNzKTtcbit9XG4rXG4rLyogUHJvZ3JhbSByZXNwb25zZSBzbG90IHRpbWUgKGFuZCwgd2hlbiBzZXRfcHJlYW1ibGUsIHRoZSBBQ0sgcHJlYW1ibGUpIGZyb21cbisgKiB0aGUgc2VsZWN0ZWQgc2NhbiBCU1MgY2FwYWJpbGl0aWVzOyB0aGUgQVAgY2FwYWJpbGl0aWVzIGFyZSBub3QgeWV0IGluXG4rICogYnNzX2NvbmYgYXQgbWdkX3ByZXBhcmVfdHgoKSB0aW1lLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hcHBseV9ic3NfY2FwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHRcdCAgICBjb25zdCB1OCAqYnNzaWQsIGJvb2wgc2V0X3ByZWFtYmxlKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcdTAwMjZ2aWYtXHUwMDNlYnNzX2NvbmY7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpsb29rdXBfYnNzID0gTlVMTDtcbitcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7XG4rXHRib29sIHNob3J0X3ByZWFtYmxlLCBzaG9ydF9zbG90O1xuK1x0dTE2IGNhcCA9IDA7XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoY29uZi1cdTAwM2Vic3MpIHtcbitcdFx0YnNzID0gY29uZi1cdTAwM2Vic3M7XG4rXHR9IGVsc2UgaWYgKGJzc2lkIFx1MDAyNlx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xuK1x0XHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuK1x0XHRic3MgPSBsb29rdXBfYnNzO1xuK1x0fVxuK1xuK1x0aWYgKGJzcykge1xuK1x0XHRjYXAgPSBic3MtXHUwMDNlY2FwYWJpbGl0eTtcbitcdH0gZWxzZSBpZiAoY29uZi1cdTAwM2Vhc3NvY19jYXBhYmlsaXR5KSB7XG4rXHRcdGNhcCA9IGNvbmYtXHUwMDNlYXNzb2NfY2FwYWJpbGl0eTtcbitcdH0gZWxzZSB7XG4rXHRcdHNob3J0X3ByZWFtYmxlID0gY29uZi1cdTAwM2V1c2Vfc2hvcnRfcHJlYW1ibGU7XG4rXHRcdHNob3J0X3Nsb3QgPSBjb25mLVx1MDAzZXVzZV9zaG9ydF9zbG90O1xuK1x0XHRnb3RvIHByb2dyYW07XG4rXHR9XG4rXHRzaG9ydF9wcmVhbWJsZSA9ICEhKGNhcCBcdTAwMjYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKTtcbitcdHNob3J0X3Nsb3QgPSAhIShjYXAgXHUwMDI2IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpO1xuK1xuK3Byb2dyYW06XG4rXHRpZiAoc2V0X3ByZWFtYmxlKVxuK1x0XHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTtcbitcdHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHJ0d2Rldiwgc2hvcnRfc2xvdCk7XG4rXG4rXHRpZiAobG9va3VwX2JzcylcbitcdFx0Y2ZnODAyMTFfcHV0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIGxvb2t1cF9ic3MpO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdF9tcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuK3tcbitcdHUxNiBiZWFjb25faW50ID0gdmlmLVx1MDAzZWJzc19jb25mLmJlYWNvbl9pbnQ7XG4rXHR1bnNpZ25lZCBpbnQgd2FpdF9tcztcbitcbitcdGlmICghYmVhY29uX2ludClcbitcdFx0cmV0dXJuIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9GQUxMQkFDS19NUztcbitcbitcdHdhaXRfbXMgPSBESVZfUk9VTkRfVVAoYmVhY29uX2ludCAqIDEwMjQsIDEwMDApICsgMjA7XG4rXHRyZXR1cm4gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHdhaXRfbXMsIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVMsXG4rXHRcdCAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpXG4re1xuK1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0ZXRoZXJfYWRkcl9jb3B5KHN5bmMtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbitcdHN5bmMtXHUwMDNlc2VlbiA9IGZhbHNlO1xuK1x0c3luYy1cdTAwM2VzZWVuX2NvdW50ID0gMDtcbitcdHN5bmMtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hdXRoX3N5bmNfc3RvcChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdHN5bmMtXHUwMDNlYWN0aXZlID0gZmFsc2U7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgYm9vbCBydHc4NzIzYnNfYXV0aF9zeW5jX3NlZW4oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VhdXRoX3N5bmM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0Ym9vbCBzZWVuO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRzZWVuID0gc3luYy1cdTAwM2VzZWVuO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBzZWVuO1xuK31cbitcbitzdGF0aWMgYm9vbCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IHdhaXRfbXMpXG4re1xuK1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuK1xuK1x0cmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChzeW5jLVx1MDAzZXdhaXQsIHJ0dzg3MjNic19hdXRoX3N5bmNfc2VlbihydHdkZXYpLFxuK1x0XHRcdFx0ICBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSBcdTAwM2UgMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbylcbit7XG4rXHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBpbmZvIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGluZm8tXHUwMDNlc3VidHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfQVVUSDtcbit9XG4rXG4rLyogUmVwbGljYXRlIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgcmlnaHQgYmVmb3JlXG4rICogYXV0aC4gUmV0dXJucyB0cnVlIGZvciBhIGZyZXNoIGpvaW4gKEJTU0lEIGNoYW5nZWQpLlxuKyAqL1xuK3N0YXRpYyBib29sIHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYnNzaWQpXG4re1xuK1x0c3RydWN0IHJ0d192aWYgKnJ0d3ZpZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi1cdTAwM2VkcnZfcHJpdjtcbitcdGJvb2wgZnJlc2hfam9pbjtcbitcdHUxNiByZXRyeV9saW1pdDtcbitcbitcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZyZXNoX2pvaW4gPSAhZXRoZXJfYWRkcl9lcXVhbChydHd2aWYtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbitcbitcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbitcdHJ0d3ZpZi1cdTAwM2VhaWQgPSAwO1xuK1x0cnR3dmlmLVx1MDAzZW5ldF90eXBlID0gUlRXX05FVF9NR0RfTElOS0VEO1xuK1x0cnR3X3ZpZl9wb3J0X2NvbmZpZyhydHdkZXYsIHJ0d3ZpZixcbitcdFx0XHQgICAgUE9SVF9TRVRfQlNTSUQgfCBQT1JUX1NFVF9BSUQgfCBQT1JUX1NFVF9ORVRfVFlQRSk7XG4rXG4rXHQvKiBEbyBub3QgbmFycm93IFJSU1Igb3Igc3dpdGNoIHRvIHNob3J0LXByZWFtYmxlIHJlc3BvbnNlcyBiZWZvcmUgdGhlXG4rXHQgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXRcbitcdCAqICgweGZmZmYxLCBsb25nIHByZWFtYmxlKS4gT25seSBzbG90IHRpbWUgaXMgcHJvZ3JhbW1lZCBlYXJseS5cbitcdCAqL1xuK1x0cnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7XG4rXG4rXHRydHdfZndfYmVhY29uX2ZpbHRlcl9jb25maWcocnR3ZGV2LCBmYWxzZSwgdmlmKTtcbitcbitcdC8qIE1hdGNoIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkgVFggc3RhdGUgKHNldF9tc3IgZGlyZWN0bHksIGtlZXBcbitcdCAqIEJDTl9DVFJMIC8gQkNOUV9ETCBzZXQsIHJlYXNzZXJ0IFRCVFQvUkVTUF9TSUZTIGV2ZXJ5IGpvaW4pLlxuK1x0ICovXG4rXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuK1x0XHQgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OKTtcbitcdHJ0d193cml0ZTMyX3NldChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMLCBCSVRfRU5fQkNOUV9ETCk7XG4rXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgKyAxLCAweDY0IFx1MDAyNiAweGZmKTtcbitcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDIsXG4rXHRcdCAgIChydHdfcmVhZDgocnR3ZGV2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDIpIFx1MDAyNiAweGYwKSB8ICgweDY0IFx1MDAzZVx1MDAzZSA4KSk7XG4rXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfQ0NLLCAweDA4MDgpO1xuK1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUkVTUF9TSUZTX09GRE0sIDB4MGEwYSk7XG4rXG4rXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SWEZMVE1BUDAsIDB4ZmZmZik7XG4rXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SWEZMVE1BUDIsIDB4ZmZmZik7XG4rXHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCB0cnVlKTtcbitcbitcdHJldHJ5X2xpbWl0ID0gKFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUIFx1MDAzY1x1MDAzYyA4KSB8XG4rXHRcdCAgICAgIFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUO1xuK1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUkVUUllfTElNSVQsIHJldHJ5X2xpbWl0KTtcbitcbitcdHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhydHdkZXYpO1xuK1xuK1x0cmV0dXJuIGZyZXNoX2pvaW47XG4rfVxuK1xuKy8qIFRoZSB2ZW5kb3Igc2VuZHMgYSBkZWF1dGggdG8gdGhlIHRhcmdldCBiZWZvcmUgYXV0aCB0byBjbGVhciBzdGFsZSBBUC1zaWRlXG4rICogc3RhdGU7IHN5bnRoZXNpemUgYW5kIFRYIG9uZSwgdGhlbiBsZXQgdGhlIEFQIHNldHRsZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfdHhfcHJlX2F1dGhfZGVhdXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdFx0XHQgY29uc3QgdTggKmJzc2lkKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sID0ge307XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dW5zaWduZWQgaW50IGZyYW1lX2xlbiwgaGVhZHJvb207XG4rXG4rXHRmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgc2l6ZW9mKG1nbXQtXHUwMDNldS5kZWF1dGgpO1xuK1x0aGVhZHJvb20gPSBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9wa3RfZGVzY19zeiArIDg7XG4rXG4rXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGhlYWRyb29tICsgZnJhbWVfbGVuKTtcbitcdGlmICghc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2JfcmVzZXJ2ZShza2IsIGhlYWRyb29tKTtcbitcdG1nbXQgPSBza2JfcHV0X3plcm8oc2tiLCBmcmFtZV9sZW4pO1xuK1x0bWdtdC1cdTAwM2VmcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfFxuK1x0XHRcdFx0XHQgIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpO1xuK1x0bWVtY3B5KG1nbXQtXHUwMDNlZGEsIGJzc2lkLCBFVEhfQUxFTik7XG4rXHRtZW1jcHkobWdtdC1cdTAwM2VzYSwgdmlmLVx1MDAzZWFkZHIsIEVUSF9BTEVOKTtcbitcdG1lbWNweShtZ210LVx1MDAzZWJzc2lkLCBic3NpZCwgRVRIX0FMRU4pO1xuK1x0bWdtdC1cdTAwM2V1LmRlYXV0aC5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTtcbitcbitcdGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4rXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4rXHRpbmZvLVx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xuK1xuK1x0cnR3X3R4KHJ0d2RldiwgXHUwMDI2Y29udHJvbCwgc2tiKTtcbitcdG1zbGVlcCgxMDApO1xuK31cbitcbisvKiBPcmNoZXN0cmF0ZSB0aGUgcHJlLWF1dGggam9pbjogcHJvZ3JhbSB0aGUgdmVuZG9yIGpvaW4gc3RhdGUsIHNlbmQgdGhlXG4rICogcHJlLWF1dGggZGVhdXRoLCB3YWl0IGZvciBhIGJlYWNvbiBmcm9tIHRoZSB0YXJnZXQsIHRoZW4gcmVwbGF5IHRoZVxuKyAqIHByZS1hdXRoIGNvZXggSDJDcyAtIG9uY2UgcGVyIGZyZXNoIEJTU0lELlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9hdXRoX2pvaW4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcnR3X3ZpZiAqcnR3dmlmO1xuK1x0Y29uc3QgdTggKmJzc2lkID0gTlVMTDtcbitcdGJvb2wgZnJlc2hfam9pbjtcbitcbitcdGlmICghcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgocnR3ZGV2LCBpbmZvKSB8fCAhdmlmIHx8XG4rXHQgICAgdGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbitcdHJ0d3ZpZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi1cdTAwM2VkcnZfcHJpdjtcbitcbitcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cdTAwM2VjZmcuYXBfYWRkcikpXG4rXHRcdGJzc2lkID0gdmlmLVx1MDAzZWNmZy5hcF9hZGRyO1xuK1x0ZWxzZSBpZiAodmlmLVx1MDAzZWJzc19jb25mLmJzc2lkIFx1MDAyNlx1MDAyNiAhaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cdTAwM2Vic3NfY29uZi5ic3NpZCkpXG4rXHRcdGJzc2lkID0gdmlmLVx1MDAzZWJzc19jb25mLmJzc2lkO1xuK1xuK1x0aWYgKCFic3NpZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZnJlc2hfam9pbiA9IHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9qb2luKHJ0d2RldiwgdmlmLCBic3NpZCk7XG4rXG4rXHRpZiAoZnJlc2hfam9pbiB8fCAhcnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgd2FpdF9tcyA9IHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdF9tcyh2aWYpO1xuK1xuK1x0XHRydHc4NzIzYnNfYXV0aF9zeW5jX3N0YXJ0KHJ0d2RldiwgYnNzaWQpO1xuK1x0XHRydHc4NzIzYnNfdHhfcHJlX2F1dGhfZGVhdXRoKHJ0d2RldiwgdmlmLCBic3NpZCk7XG4rXHRcdHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChydHdkZXYsIHdhaXRfbXMpO1xuK1x0XHRydHc4NzIzYnNfYXV0aF9zeW5jX3N0b3AocnR3ZGV2KTtcbitcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIXJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9oMmNfc2VudCkge1xuK1x0XHRydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7XG4rXHRcdHJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9oMmNfc2VudCA9IHRydWU7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0d19vcHNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTM4Nyw2ICs4NDQsMTMgQEAgc3RhdGljIHZvaWQgcnR3X29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0FTU09DKSB7XG4gXHRcdHJ0d192aWZfYXNzb2NfY2hhbmdlZChydHd2aWYsIGNvbmYpO1xuIFx0XHRpZiAodmlmLVx1MDAzZWNmZy5hc3NvYykge1xuK1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbitcdFx0XHRcdHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihydHdkZXYsIGZhbHNlKTtcbitcdFx0XHRcdHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhydHdkZXYsIHZpZiwgTlVMTCk7XG4rXHRcdFx0XHRydHc4NzIzYnNfZW5hYmxlX3RzZl91cGRhdGUocnR3ZGV2KTtcbitcdFx0XHR9XG4rXG4gXHRcdFx0cnR3X2NvZXhfY29ubmVjdF9ub3RpZnkocnR3ZGV2LCBDT0VYX0FTU09DSUFURV9GSU5JU0gpO1xuIFxuIFx0XHRcdHJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTtcbkBAIC00MDgsNiArODcyLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0XHRpZiAodGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cdTAwM2VmbGFncykpXG4gXHRcdFx0XHRydHdfaHdfc2Nhbl9hYm9ydChydHdkZXYpO1xuIFxuK1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbitcdFx0XHRcdHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihydHdkZXYsIGZhbHNlKTtcbitcdFx0XHRcdHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhydHdkZXYpO1xuK1x0XHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XG4rXHRcdFx0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRTtcbkBAIC00MTUsOCArODg2LDI2IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CU1NJRCkge1xuK1x0XHRib29sIGJzc2lkX2NsZWFyZWQgPSBpc196ZXJvX2V0aGVyX2FkZHIoY29uZi1cdTAwM2Vic3NpZCk7XG4rXHRcdGJvb2wgYnNzaWRfY2hhbmdlZCA9ICFldGhlcl9hZGRyX2VxdWFsKHJ0d3ZpZi1cdTAwM2Vic3NpZCxcbitcdFx0XHRcdFx0XHQgICAgICAgY29uZi1cdTAwM2Vic3NpZCk7XG4rXG4rXHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNiBic3NpZF9jaGFuZ2VkKSB7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IGZhbHNlO1xuK1x0XHR9XG4gXHRcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXHUwMDNlYnNzaWQsIGNvbmYtXHUwMDNlYnNzaWQpO1xuIFx0XHRjb25maWcgfD0gUE9SVF9TRVRfQlNTSUQ7XG4rXHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNiBic3NpZF9jbGVhcmVkKSB7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZWFpZCA9IDA7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZW5ldF90eXBlID0gUlRXX05FVF9OT19MSU5LO1xuK1x0XHRcdGNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRSB8IFBPUlRfU0VUX0FJRDtcbitcdFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuK1x0XHRcdFx0ICAgQklUX0RJU19UU0ZfVURUIHwgQklUX0VOX0JDTl9GVU5DVElPTiB8XG4rXHRcdFx0XHQgICBCSVRfRElTX0FUSU0pO1xuK1x0XHR9XG4gXHRcdGlmICghcnR3X2NvcmVfY2hlY2tfc3RhX2FjdGl2ZShydHdkZXYpKVxuIFx0XHRcdHJ0d19jbGVhcl9vcF9jaGFuKHJ0d2Rldik7XG4gXHRcdGVsc2VcbkBAIC00NDgsOCArOTM3LDE3IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9NVV9HUk9VUFMpXG4gXHRcdHJ0d19jaGlwX3NldF9naWRfdGFibGUocnR3ZGV2LCB2aWYsIGNvbmYpO1xuIFxuLVx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9TTE9UKVxuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcbitcdFx0cnR3ODcyM2JzX3NldF9hY2tfcHJlYW1ibGUocnR3ZGV2LCBjb25mLVx1MDAzZXVzZV9zaG9ydF9wcmVhbWJsZSk7XG4rXG4rXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHtcbitcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4rXHRcdFx0cnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBjb25mLVx1MDAzZXVzZV9zaG9ydF9zbG90KTtcbiBcdFx0cnR3X2NvbmZfdHgocnR3ZGV2LCBydHd2aWYpO1xuK1x0fVxuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX1BTKVxuIFx0XHRydHdfcmVjYWxjX2xwcyhydHdkZXYsIE5VTEwpO1xuQEAgLTYwOSwxMSArMTEwNywxOSBAQCBzdGF0aWMgaW50IHJ0d19vcHNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsXG4gXHRcdGtleS1cdTAwM2Vod19rZXlfaWR4ID0gaHdfa2V5X2lkeDtcbiBcdFx0cnR3X3NlY193cml0ZV9jYW0ocnR3ZGV2LCBzZWMsIHN0YSwga2V5LFxuIFx0XHRcdFx0ICBod19rZXlfdHlwZSwgaHdfa2V5X2lkeCk7XG4rXHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHZpZiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSlcbitcdFx0XHRydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIHRydWUpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgRElTQUJMRV9LRVk6XG4gXHRcdHJ0d19oY2lfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTtcbiBcdFx0cnR3X21hY19mbHVzaF9hbGxfcXVldWVzKHJ0d2RldiwgZmFsc2UpO1xuIFx0XHRydHdfc2VjX2NsZWFyX2NhbShydHdkZXYsIHNlYywga2V5LVx1MDAzZWh3X2tleV9pZHgpO1xuK1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiB2aWYgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpXG4rXHRcdFx0cnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2gocnR3ZGV2LCBmYWxzZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuQEAgLTcwMyw4ICsxMjA5LDIzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfbWdkX3ByZXBhcmVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4gXHRydHdfbGVhdmVfbHBzX2RlZXAocnR3ZGV2KTtcbi1cdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuLVx0cnR3X2NoaXBfcHJlcGFyZV90eChydHdkZXYpO1xuK1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHQvKiBXYWtlIGZyb20gc29mdCBJUFMgYW5kIHJ1biB0aGUgdmVuZG9yIGpvaW4gc2VxdWVuY2UuIFRoZSBSRktcbitcdFx0ICogaXMgaGFuZGxlZCBieSB0aGUgb25jZS1vbmx5IHBvd2VyLW9uIElRSyBwbHVzIHRoZSBwcy5jXG4rXHRcdCAqIHBvc3QtSVBTIFJGLWJ1cyByZWNvdmVyeSwgbm90IGEgZnJlc2ggY2FsaWJyYXRpb24gaGVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChydHdfbGVhdmVfaXBzKHJ0d2RldikpIHtcbitcdFx0XHRydHdfZXJyKHJ0d2RldiwgXCJmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0ZSBmb3IgbWdkIHR4XFxuXCIpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuK1x0XHRydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHJ0d2RldiwgdmlmLCBpbmZvKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuK1x0XHRydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7XG4rXHR9XG4rb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmNcbmluZGV4IGNkOTI1NDM3MGZjYzcyLi4xNjIyOGNhZTI1MmViZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uY1xuQEAgLTIxNzQsMTEgKzIxNzQsMTMgQEAgaW50IHJ0d19jb3JlX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ0d2Rldi1cdTAwM2V0eHFfbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNldHhfcmVwb3J0LnFfbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jLmxvY2spO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlaGFsLnR4X3Bvd2VyX211dGV4KTtcbiBcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cnR3ZGV2LVx1MDAzZWNvZXgud2FpdCk7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnJ0d2Rldi1cdTAwM2VhdXRoX3N5bmMud2FpdCk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cnR3ZGV2LVx1MDAzZWxwc19sZWF2ZV9jaGVjayk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cnR3ZGV2LVx1MDAzZWZ3X3NjYW5fZGVuc2l0eSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggOWMwYjc0NjU0MGIwZWUuLjk5Yjk5YWEzZDYwMGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgKzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XG4gXHRSVFdfQ0hJUF9UWVBFXzg3MjNELFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQyxcbiBcdFJUV19DSElQX1RZUEVfODcwM0IsXG4rXHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQSxcbiBcdFJUV19DSElQX1RZUEVfODgxMkEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTRBLFxuQEAgLTgyOCw2ICs4MjksOCBAQCBzdHJ1Y3QgcnR3X3ZpZiB7XG4gXHR1OCBic3NpZFtFVEhfQUxFTl07XG4gXHR1OCBwb3J0O1xuIFx0dTggYmNuX2N0cmw7XG4rXHRib29sIHByZV9hdXRoX2gyY19zZW50O1xuK1x0Ym9vbCBwcmVfYXV0aF9qb2luX2RvbmU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJzdmRfcGFnZV9saXN0O1xuIFx0c3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgdHhfcGFyYW1zW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdGNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7XG5AQCAtMjA1Niw2ICsyMDU5LDIwIEBAIHN0cnVjdCBydHdfaHdfc2Nhbl9pbmZvIHtcbiBcdHU4IG9wX2J3O1xuIH07XG4gXG4rLypcbisgKiBTeW5jaHJvbmlzZXMgdGhlIHByZS1hdXRoIHdhaXQgb24gYSBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZnJvbSB0aGVcbisgKiB0YXJnZXQgQlNTSUQgYmVmb3JlIHRoZSBqb2luIHNlcXVlbmNlIGNvbnRpbnVlcy5cbisgKi9cbitzdHJ1Y3QgcnR3X2F1dGhfc3luYyB7XG4rXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xuK1x0LyogUHJvdGVjdHMgdGhlIGZpZWxkcyBiZWxvdy4gKi9cbitcdHNwaW5sb2NrX3QgbG9jaztcbitcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbitcdGJvb2wgYWN0aXZlO1xuK1x0Ym9vbCBzZWVuO1xuK1x0dTMyIHNlZW5fY291bnQ7XG4rfTtcbitcbiBzdHJ1Y3QgcnR3X2RldiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbkBAIC0yMTMyLDYgKzIxNDksOCBAQCBzdHJ1Y3QgcnR3X2RldiB7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBmd19zY2FuX2RlbnNpdHk7XG4gXHRib29sIGFwX2FjdGl2ZTtcbiBcbitcdHN0cnVjdCBydHdfYXV0aF9zeW5jIGF1dGhfc3luYztcbitcbiBcdGJvb2wgbGVkX3JlZ2lzdGVyZWQ7XG4gXHRjaGFyIGxlZF9uYW1lWzMyXTtcbiBcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7XG5AQCAtMjE5Myw2ICsyMjEyLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXR4X3N0YmM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYWNfaWQ7XG5AQCAtMjI4Myw0ICsyMzA4LDggQEAgYm9vbCBydHdfY29yZV9jaGVja19zdGFfYWN0aXZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuIHZvaWQgcnR3X2NvcmVfZW5hYmxlX2JlYWNvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVuYWJsZSk7XG4gdm9pZCBydHdfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpO1xuK3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MzIgbGVuLFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcnR3X3J4X3BrdF9zdGF0ICpwa3Rfc3RhdCxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbmluZGV4IDA4ZTk0OTQ5NzdlMDZhLi5iNmQ0ZThlZDk4Yzc1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbkBAIC00NzksNiArNDc5LDcgQEBcbiAjZGVmaW5lIEJJVF9ESVNfVFNGX1VEVFx0XHRCSVQoNClcbiAjZGVmaW5lIEJJVF9FTl9CQ05fRlVOQ1RJT05cdEJJVCgzKVxuICNkZWZpbmUgQklUX0VOX1RYQkNOX1JQVFx0QklUKDIpXG4rI2RlZmluZSBCSVRfRElTX0FUSU1cdFx0QklUKDApXG4gI2RlZmluZSBSRUdfQkNOX0NUUkxfQ0xJTlQwXHQweDA1NTFcbiAjZGVmaW5lIFJFR19EUlZFUkxZSU5UXHRcdDB4MDU1OFxuICNkZWZpbmUgUkVHX0JDTkRNQVRJTVx0XHQweDA1NTlcbkBAIC01MTgsNiArNTE5LDcgQEBcbiAjZGVmaW5lIEJJVF9VQ19NRF9FTlx0XHRCSVQoMTYpXG4gI2RlZmluZSBCSVRfUlhTS19QRVJQS1RcdFx0QklUKDE1KVxuICNkZWZpbmUgQklUX0hUQ19MT0NfQ1RSTFx0QklUKDE0KVxuKyNkZWZpbmUgQklUX0FNRlx0XHRcdEJJVCgxMylcbiAjZGVmaW5lIEJJVF9SUEZNX0NBTV9FTkFCTEVcdEJJVCgxMilcbiAjZGVmaW5lIEJJVF9UQV9CQ05cdFx0QklUKDExKVxuICNkZWZpbmUgQklUX1JDUl9BREZcdFx0QklUKDExKVxuQEAgLTYyOCw2ICs2MzAsNyBAQFxuICNkZWZpbmUgUkVHX1BTRFx0XHRcdDB4MDkxMFxuICNkZWZpbmUgQklUX1BTRF9JTklcdFx0R0VOTUFTSygyMywgMjIpXG4gI2RlZmluZSBSRUdfU0lOR0xFX1RPTkVfQ09OVF9UWFx0MHgwOTE0XG4rI2RlZmluZSBSRUdfQkJfU0VMX0JUR184NzIzQlx0MHgwOTQ4XG4gI2RlZmluZSBSRUdfQUdDX1RBQkxFXHRcdDB4MDk1OFxuICNkZWZpbmUgUkVHX1JGRV9DVFJMX0VcdFx0MHgwOTc0XG4gI2RlZmluZSBSRUdfMk5EX0NDQV9DVFJMXHQweDA5NzZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmU5Li41MzAzOTc1ZDAwYTJhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xuIFxuLVx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTIgYW5kXG4tXHQgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC5cbitcdC8qIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTJcbitcdCAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LlxuIFx0ICovXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiBcdTAwMjZcdTAwMjYgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHxcbitcdCAgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiBcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXCJ6ZXJvIGxlbmd0aCBwYWNrZXRcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMDguLmIyOTRiY2M0ZDgyODA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTYgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlXG4rICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZVxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbisgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS5cbisgKi9cbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVJcdFx0XHQ4XG4rI2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoMSlcbiBcbiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcilcbiB7XG5AQCAtNTQ4LDEyICs1NTgsOTEgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbitcdHB1YnFfbnVtID0gcnR3ZGV2LVx1MDAzZWZpZm8uYWNxX3BnX251bSAtIHBnX3RibC1cdTAwM2VocV9udW0gLSBwZ190YmwtXHUwMDNlbHFfbnVtIC1cbitcdFx0ICAgcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC0gcGdfdGJsLVx1MDAzZWdhcHFfbnVtO1xuK1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXHRpZiAoZnJlZV90eHBnKSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIGZyZWVfdHhwZyBcdTAwMjYgMHhmZik7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmYpO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIChmcmVlX3R4cGcgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZik7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweGZmKTtcbitcdH0gZWxzZSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cdTAwM2VocV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcbitcdH1cbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSxcbitcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXG4rXHRpZiAoIWZyZWVfdHhwZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgZnJlZV90eHBnIFx1MDAyNiAweGZmKTtcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmYpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmYpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmYpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0c3dpdGNoIChxdWV1ZSkge1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gpO1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4rXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsKTtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93KTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRcdGludCBkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1xuK1x0XHRpZiAoZGVkaWNhdGVkIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBkZWRpY2F0ZWQ7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBkZWRpY2F0ZWQgKyBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fc3luY19mcmVlX3R4cGcocnR3ZGV2KTtcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0cGFnZXNfZnJlZSA9IGRlZGljYXRlZCArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1x0fSBlbHNlIGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuIFx0XHR1MzIgZnJlZV90eHBnO1xuIFxuIFx0XHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuQEAgLTYzMiw0NCArNzIxLDEzMSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGk7XG4rXHR1OCBmcmVlO1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1x0aW50IGZyZWU7XG4rXG4rXHRzd2l0Y2ggKHF1ZXVlKSB7XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcbitcdFx0ZGVkaWNhdGVkID0gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuK1x0XHRkZWRpY2F0ZWQgPSBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGRlZGljYXRlZCA9IFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuK1x0aWYgKHBhZ2VzIFx1MDAzYz0gZnJlZSkge1xuK1x0XHRhdG9taWNfc3ViKHBhZ2VzLCBkZWRpY2F0ZWQpO1xuK1x0fSBlbHNlIHtcbitcdFx0YXRvbWljX3NldChkZWRpY2F0ZWQsIDApO1xuK1x0XHRhdG9taWNfc3ViKHBhZ2VzIC0gZnJlZSwgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1Yik7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbiBcdGJvb2wgYnVzX2NsYWltO1xuIFx0c2l6ZV90IHR4c2l6ZTtcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbitcdH1cbitcbitcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuK1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuK1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4rXHR9XG4rXG4rXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuK1x0aWYgKCF0eGFkZHIpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdHJldCA9IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF90cmltO1xuIFxuIFx0aWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi1cdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXG4gXHRcdHJ0d193YXJuKHJ0d2RldiwgXCJHb3QgdW5hbGlnbmVkIFNLQiBpbiAlcygpIGZvciBxdWV1ZSAldVxcblwiLFxuIFx0XHRcdCBfX2Z1bmNfXywgcXVldWUpO1xuIFxuIFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcbi1cbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4tXG4tXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLCB0eHNpemUpO1xuLVxuK1x0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSxcbitcdFx0XHQgICAgICAgd3JpdGVfc2l6ZSk7XG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4gXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnRsODcyM2JzKSB7XG4rXHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4rXHR9XG4gXHRpZiAocmV0KVxuIFx0XHRydHdfd2FybihydHdkZXYsXG4gXHRcdFx0IFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcIixcbi1cdFx0XHQgdHhzaXplLCB0eGFkZHIpO1xuK1x0XHRcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xuIFxuK291dF90cmltOlxuK1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKVxuK1x0XHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3Nyw3ICs4NTMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcbitcdGVsc2VcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XG4rXHRcdFx0XHQgICAgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNjg1LDYgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbitcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcbkBAIC03MTIsNiArODkzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XG4gXG4gXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgMyBcdTAwM2NcdTAwM2MgMik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSArOTMyLDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MzIgZnJlZV90eHBnO1xuK1x0dTE2IHB1YnFfbnVtO1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybjtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcGdfdGJsLVx1MDAzZWhxX251bSArIHBnX3RibC1cdTAwM2VscV9udW0gK1xuK1x0XHRcdFx0ICAgIHBnX3RibC1cdTAwM2VucV9udW0gKyBwZ190YmwtXHUwMDNlZXhxX251bSArXG4rXHRcdFx0XHQgICAgcGdfdGJsLVx1MDAzZWdhcHFfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHBnX3RibC1cdTAwM2VocV9udW0gLSBwZ190YmwtXHUwMDNlbHFfbnVtIC1cbitcdFx0ICAgcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC0gcGdfdGJsLVx1MDAzZWdhcHFfbnVtO1xuK1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXG4rXHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuK1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTixcbitcdFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXHUwMDNlaHFfbnVtLCBwZ190YmwtXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuK1x0dTMyIGNsZWFyO1xuK1xuK1x0cnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcdHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4gXHRydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0Y2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgXHUwMDI2XG4rXHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTAzOSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuK1x0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXG5AQCAtODMxLDYgKzEwNTUsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xuIH1cbiBcbkBAIC05MzcsNiArMTE2MywxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRza2JfcXVldWVfdGFpbChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcbiBcbitcdC8qIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIEZJRk8gZmlsbHMgcGFzdFxuK1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4rXHQgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFhcbitcdCAqIGRyYWluIHBhdGggb25jZSB0aGUgRklGTyBkcmFpbnMgYmVsb3cgdGhlIGxvdyB3YXRlcm1hcmsuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHF1ZXVlIFx1MDAzYyBSVFdfVFhfUVVFVUVfQkNOIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4rXHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlO1xuK1x0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05NjUsNiArMTIwMywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19yeF9za2Ioc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJ0d191cGRhdGVfcnhfZnJlcV9mb3JfaW52YWxpZChydHdkZXYsIHNrYiwgcnhfc3RhdHVzLCBwa3Rfc3RhdCk7XG4gXHRydHdfcnhfc3RhdHMocnR3ZGV2LCBwa3Rfc3RhdC1cdTAwM2V2aWYsIHNrYik7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpXG4rXHRcdHJ0dzg3MjNic19hdXRoX3N5bmNfcngocnR3ZGV2LFxuK1x0XHRcdFx0ICAgICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhLFxuK1x0XHRcdFx0ICAgICAgIHNrYi1cdTAwM2VsZW4sIHBrdF9zdGF0LCByeF9zdGF0dXMpO1xuK1xuIFx0aWVlZTgwMjExX3J4X2lycXNhZmUocnR3ZGV2LVx1MDAzZWh3LCBza2IpO1xuIH1cbiBcbkBAIC0xMDk1LDYgKzEzMzgsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXG4gXHRcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xuIFx0fVxuIFxuK1x0LyogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4rXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBydHdzZGlvLVx1MDAzZWlycV9tYXNrIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDMyICsxNDgxLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0ICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLFxuK1x0XHRcdFx0ICAgICBib29sICpwcm9jZXNzZWQpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUxNiBxX21hcDtcbiBcdGludCByZXQ7XG4gXG4rXHQqcHJvY2Vzc2VkID0gZmFsc2U7XG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcbitcdCpwcm9jZXNzZWQgPSB0cnVlO1xuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz0gUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4rXHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcbitcdFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVx1MDAzZWh3LCBxX21hcCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xuK1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuK1x0XHRcdCAgICAgd29yayk7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuK1x0Ym9vbCBwcm9jZXNzZWQ7XG4gXHRpbnQgbGltaXQsIHF1ZXVlO1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbkBAIC0xMjY3LDcgKzE1MzMsMjQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSBcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcbiBcdFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XG4tXHRcdFx0cnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRpbnQgcmV0O1xuK1xuK1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgXHUwMDI2cHJvY2Vzc2VkKTtcbitcdFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiByZXQgPT0gLUVCVVNZKSB7XG4rXHRcdFx0XHRcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuK1x0XHRcdFx0XHRcdFx0IFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLFxuK1x0XHRcdFx0XHRcdFx0IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcbitcdFx0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UIFx1MDAyNlx1MDAyNiBwcm9jZXNzZWQpIHtcbitcdFx0XHRcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZ3b3JrX2RhdGEtXHUwMDNld29yaywgMCk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTI5NCwxNCArMTU3NywxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xuIFx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbaV0pO1xuK1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbitcdH1cbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcdGlmICghcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpXG4gXHRcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XG4gXG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2VydHdkZXYgPSBydHdkZXY7XG4tXHRJTklUX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTEzMTUsNiArMTYwMCw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVx1MDAzZXR4d3EpO1xuIFx0a2ZyZWUocnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbmluZGV4IDQ1N2U4YjAyMzgwZTViLi5mMWY1OWY4MzAxYjhmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxuQEAgLTc3LDYgKzc4LDE0IEBAXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXHRcdFx0QklUKDI4KVxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXHRcdEJJVCgyOSlcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuK1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXG5AQCAtMTQzLDcgKzE1Miw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuIH07XG4gXG5AQCAtMTU5LDYgKzE2OCwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4rXG4rXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4rXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbitcdGF0b21pY190IGZyZWVfcGdfbG93O1xuK1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4rXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbmluZGV4IGVmY2Y0NTQzMzk5OWFmLi43M2YyYWY2NmVmZmU4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2RlZmluZSBSVFdfU0VDX1JYX0RFQ19FTlx0XHRCSVQoMylcbiAjZGVmaW5lIFJUV19TRUNfVFhfQkNfVVNFX0RLXHRcdEJJVCg2KVxuICNkZWZpbmUgUlRXX1NFQ19SWF9CQ19VU0VfREtcdFx0QklUKDcpXG4rI2RlZmluZSBSVFdfU0VDX0NIS19LRVlJRFx0XHRCSVQoOClcbiBcbiAjZGVmaW5lIFJUV19TRUNfRU5HSU5FX0VOXHRcdEJJVCg5KVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MzI6NDYuNDg1MjE1Mjc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzNjg4MTYzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggU2VyaWVzIEV2YWx1YXRpb246IFJlYWx0ZWsgUlRMODcyM0JTIFNESU8gRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIGZvY3VzaW5nIG9uIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UsIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiU0RJTy4uLiB0aGF0J3MgYSBwcm9ibGVtLlwiICBUaGlzIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2AsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgY29leC5jYCwgYGZ3LmNgLCBgbWFjODAyMTEuY2AsIGBtYWluLmNgLCBgcnguY2AsIGFuZCwgY3J1Y2lhbGx5LCBgc2Rpby5jYC4gIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgYW4gU0RJTyBkcml2ZXIsIGFuZCBtZW50aW9ucyB0aGUgODcyM0JTIFNESU8gaGFyZHdhcmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgZXZlbiAqcnVucyogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoaXMgZHJpdmVyLCBgcnR3ODhgLCBpcyBhIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLCBhbmQgdGhlIGNoYW5nZXMgdG8gYHNkaW8uY2AgaW1tZWRpYXRlbHkgc3VnZ2VzdCBhbiBTRElPIGludGVyZmFjZSBpcyBpbnZvbHZlZC4gVGhlIGlzc3VlIGlzIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGhhdmUgYSBnb29kLCBnZW5lcmljIFNESU8gZW11bGF0b3IgdGhhdCBzeXprYWxsZXIgY2FuIHVzZS4gIFN5emthbGxlciBkb2VzIGEgZ3JlYXQgam9iIHdpdGggUENJIGFuZCBVU0IsIHZpYSBgZHVtbXlfaGNkYCBhbmQgYHJhdy1nYWRnZXRgLCBidXQgdGhlIFNESU8gaW50ZXJmYWNlIGhhcyBub3QgYmVlbiBwcmlvcml0aXplZC5cblxuRG9lcyBzeXprYWxsZXIgZnV6eiBTRElPPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBObywgU0RJTyBpc24ndCBkaXJlY3RseSBzdXBwb3J0ZWQuICBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHNvbWVob3cgcmVhY2hhYmxlIHZpYSBgbWFjODAyMTFgLiBUaGUgZHJpdmVyICpyZWdpc3RlcnMqIHdpdGggbWFjODAyMTEsIGJ1dCB0byBnZXQgdG8gdGhlIGRyaXZlci1zcGVjaWZpYyBjb2RlLCB5b3UgbmVlZCB0aGUgYWN0dWFsIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgYW5kIHByb2JlZC4gSWYgbm8gaGFyZHdhcmUsIG5vIHByb2JlLCBubyBkcml2ZXIgY2FsbGJhY2tzLlxuXG5DYW4gdGhlcmUgYmUgYW55IGVtdWxhdGlvbiBmb3IgU0RJTyBkZXZpY2VzPyBMZXQncyBjaGVjay4gU3RhbmRhcmQgUUVNVSwgYXMgc3l6a2FsbGVyIHVzZXMgaXQsIGRvZXNuJ3QgaGF2ZSBhIHdheSB0byBlbXVsYXRlIFNESU8uIFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgKHZpYSBkdW1teV9oY2QvcmF3LWdhZGdldCkgYW5kIFBDSSAodmlhIHNvbWUgYmFzaWMgUENJIGZ1enppbmcgb3IganVzdCBwcm9iaW5nIGlmIFFFTVUgaGFzIHRoZSBkZXZpY2UpLiBCdXQgU0RJTyBpcyBub3Qgc3VwcG9ydGVkLlxuXG5MZXQncyBkbyBhIGtlcm5lbCBzZWFyY2ggZm9yIGBydHc4OGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBpbnRlcmZhY2VzLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgLiBPa2F5LCBsZXQgbWUgY29uZmlybSBpZiBgcnR3ODhgIGhhcyBQQ0kgb3IgVVNCIGludGVyZmFjZXMuIFllcywgaXQgZG9lcyBzdXBwb3J0IFBDSSwgVVNCLCBhbmQgU0RJTy4gVGhlIG5ldyBjb2RlIGhlYXZpbHkgcmVsaWVzIG9uIGBydHdfaXNfODcyM2JzKHJ0d2RldilgLiBUaGlzIGNoZWNrcyB0aGUgYHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkYCBhbmQgYHJ0d2Rldi1cdTAwM2VoY2kudHlwZWAgdG8gYmUgYFJUV19DSElQX1RZUEVfODcyM0JgIGFuZCBgUlRXX0hDSV9UWVBFX1NESU9gLiAgSW4gc2hvcnQsIHRoaXMgaXMgU0RJTy1zcGVjaWZpYyBjb2RlLlxuXG5Tbywgc2luY2UgYHJ0d19pc184NzIzYnNgIGRlbWFuZHMgYFJUV19IQ0lfVFlQRV9TRElPYCwgdGhlIHNwZWNpZmljIGNoYW5nZXMgYXJlIG9ubHkgcmVsZXZhbnQgaWYgYW4gU0RJTyBkZXZpY2UgaXMgYWN0dWFsbHkgKnByb2JlZCouXG5cbkNhbiB3ZSBkbyB0aGF0IGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBTRElPIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGJlIGV4cGxpY2l0OiB0aGUgY29kZSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzYCAqaXMgdW5yZWFjaGFibGUqIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnQuXG5cbkJ1dCwgYXJlIHRoZXJlIGFueSBjaGFuZ2VzIHRoYXQgYXJlICpub3QqIGd1YXJkZWQgYnkgdGhpcyBzcGVjaWZpYyBjaGVjaz8gTGV0J3MgYW5hbHl6ZSBgY29leC5jYCwgYGZ3LmNgLCBgbWFjODAyMTEuY2AsIGByeC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiBhbnkgY2hhbmdlcyBhcmUgdHJpZ2dlcmVkIGZvciBvdGhlciBoYXJkd2FyZSBpbnRlcmZhY2VzLlxuXG5gY29leC5jYCdzIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gdGhlIEJUIGNvZXggYW5kIHNjYW47IGFsbCBhcmUgZGVwZW5kZW50IG9uIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbmBmdy5jYCBoYXMgYSBuZXcgZnVuY3Rpb24sIGBydHdfZndfc2V0X2dudF9idGAuICBUaGF0J3MgODcyM2JzLXNwZWNpZmljLiBUaGVyZSBpcyBhIGNoYW5nZSBpbiAgYHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZWAgd2hpY2gganVzdCBhZGRzIGBpc184NzIzYnNfc2Rpb2AgdG8gdGhlIG9yIGNvbmRpdGlvbi5cblxuYG1hYzgwMjExLmNgIGhhcyBzb21lIGNoYW5nZXM6IFRoZSBgYXV0aF9zeW5jX3J4YCBjb2RlIGhhcyBsb2dpYyB0aGF0IGF2b2lkcyBydW5uaW5nIG9uIHRoZSBTRElPIGhhcmR3YXJlLiBFdmVyeXRoaW5nIGVsc2UgaXMgZ3VhcmRlZCBieSB0aGlzLlxuXG5gcnguY2AgIGluY2x1ZGVzIHRoZSBzYW1lIGNvZGUgb24gODcwM0IgaGFyZHdhcmUsIGJ1dCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGNvbmRpdGlvbmVkIGJ5IHRoaXMgbmV3IGhhcmR3YXJlLlxuXG5UaGUgU0RJTyBkcml2ZXIgaXRzZWxmLCBgc2Rpby5jYCwgd29uJ3QgYmUgdHJpZ2dlcmVkLlxuXG5UaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgY29uZmluZWQgdG8gYHNkaW8uY2Agb3IgZ2F0ZWQgYnkgdGhlIFNESU8gZGV2aWNlIGNoZWNrLCB3aGljaCByZXF1aXJlcyBhblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0ODgsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMzOjA4Ljg1NDAzMzkxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIFdpRmkvQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIGFuZCBtb2RpZmllcyBTRElPLXNwZWNpZmljIFRYL1JYIGhhbmRsaW5nLiBBbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgY29uZmluZWQgdG8gdGhlIFNESU8gaW50ZXJmYWNlIChzZGlvLmMpIG9yIGV4cGxpY2l0bHkgZ3VhcmRlZCBieSBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggY2hlY2tzIGZvciBgUlRXX0hDSV9UWVBFX1NESU9gLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgdXNlZCBieSBzeXprYWxsZXIgZG8gbm90IGVtdWxhdGUgcGh5c2ljYWwgU0RJTyBXaUZpIGNhcmRzLCB0aGlzIGRyaXZlciB3aWxsIG5vdCBwcm9iZSBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2guXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl7q9v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 17:21:05 +0000 UTC FinishedAt: 2026-07-26 17:33:10 +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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBXaUZpL0JsdWV0b290aCBjb2V4aXN0ZW5jZSBhbmQgbW9kaWZpZXMgU0RJTy1zcGVjaWZpYyBUWC9SWCBoYW5kbGluZy4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGNvbmZpbmVkIHRvIHRoZSBTRElPIGludGVyZmFjZSAoc2Rpby5jKSBvciBleHBsaWNpdGx5IGd1YXJkZWQgYnkgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIHdoaWNoIGNoZWNrcyBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHVzZWQgYnkgc3l6a2FsbGVyIGRvIG5vdCBlbXVsYXRlIHBoeXNpY2FsIFNESU8gV2lGaSBjYXJkcywgdGhpcyBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUwODliN2Q1OWFiOWQ5M2VhNTFhNzE0MmYyZTQ5MWUwYzBjZjUxNmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXG5pbmRleCAzN2MzMzZkZWY0MTkxNS4uMzE0YjJhMzY4YThmMTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmNcbkBAIC0xNDQzLDYgJiM0MzsxNDQzLDE5MSBAQCBzdGF0aWMgdm9pZCBydHdfY29leF9zZXRfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSwgdTggcGhhc2UpXG4gI2RlZmluZSBjYXNlX0FMR08oc3JjKSBcXFxuIFx0Y2FzZSBDT0VYX0FMR09fIyNzcmM6IHJldHVybiAjc3JjXG4gXG4mIzQzOy8qIDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UgYW50ZW5uYSBoYW5kbGluZy4gT24gQlQtZGlzYWJsZWQgYm9hcmRzIHRoZVxuJiM0MzsgKiBzY2FuL2F1dGggd2luZG93IHN0aWxsIHJvdXRlcyB0aHJvdWdoIHRoZSBQVEEgbXV4OyB0aGVzZSBoZWxwZXJzIGZvcmNlIHRoZVxuJiM0MzsgKiB2ZW5kb3Itc2hhcGVkIFdpRmktb3duZWQgYW50ZW5uYSBwYXRoIHNvIGRpcmVjdGVkIG1hbmFnZW1lbnQgVFggcmVhY2hlcyBhaXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQlRfQ09FWF9DVFJMXHRcdDB4MDAzOVxuJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0NGR1x0XHQweDA5MzBcbiYjNDM7I2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkcxXHRcdDB4MDk0NFxuJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0JVRlx0XHQweDA5NzRcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFXHQweDE4MDAxMDFiXG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYW50X2lzX2F1eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKHJ0d2Rldi1cdTAwM2VlZnVzZS5idF9zZXR0aW5nIFx1MDAyNiBCSVQoNikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHJ0d2Rldi1cdTAwM2Vjb2V4LnN0YXQuYnRfZGlzYWJsZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgcnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0d19jb2V4Xzg3MjNic19hbnRfaXNfYXV4KHJ0d2RldikgPyAweDgwIDogMHgyMDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdyaXRlIEJCX1NFTF9CVEcsIHJldHJ5aW5nIG9uY2Ugd2l0aCBTWVNfRlVOQyBCQiByZXNldCBpZiB0aGUgZmlyc3RcbiYjNDM7ICogd3JpdGUgZG9lcyBub3Qgc3RpY2sgKFJGL0JCIGNsb2NrIG1heSBoYXZlIGJlZW4gZ2F0ZWQpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfd3JpdGVfYmJfc2VsX2J0ZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHR1OCBzeXNfZnVuY19iZWZvcmU7XG4mIzQzO1x0dTMyIHJlYWRiYWNrO1xuJiM0MztcbiYjNDM7XHRzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pO1xuJiM0MztcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcbiYjNDM7XHRcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XG4mIzQzO1x0cmVhZGJhY2sgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX0JCX1NFTF9CVEdfODcyM0IpO1xuJiM0MztcdGlmIChyZWFkYmFjayA9PSB2YWx1ZSlcbiYjNDM7XHRcdHJldHVybiByZWFkYmFjaztcbiYjNDM7XG4mIzQzO1x0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4mIzQzO1x0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQiwgdmFsdWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcnR3X3JlYWQzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdFx0cnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChydHdkZXYpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgaGlnaClcbiYjNDM7e1xuJiM0MztcdGlmICghcnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChoaWdoKSB7XG4mIzQzO1x0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CVF9DT0VYX1RBQkxFX0gsXG4mIzQzO1x0XHRcdCAgICBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cnR3X2NvZXhfc2V0X3dsX3ByaV9tYXNrKHJ0d2RldiwgQ09FWF9XTFBSSV9UWF9DQ0ssIGZhbHNlKTtcbiYjNDM7XHRcdHJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfUlhfQ0NLLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGtlZXBfcHRhX293bmVyKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGJlZm9yZSwgYWZ0ZXI7XG4mIzQzO1xuJiM0MztcdGJlZm9yZSA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfUEFEX0NUUkwxKTtcbiYjNDM7XHRhZnRlciA9IGJlZm9yZSBcdTAwMjYgfihCSVRfTE5BT05fV0xCVF9TRUwgfCBCSVRfU1dfRFBEVF9TRUxfREFUQSk7XG4mIzQzO1x0aWYgKGtlZXBfcHRhX293bmVyKVxuJiM0MztcdFx0YWZ0ZXIgfD0gQklUX1BBUEVfV0xCVF9TRUw7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YWZ0ZXIgXHUwMDI2PSB+QklUX1BBUEVfV0xCVF9TRUw7XG4mIzQzO1x0aWYgKGFmdGVyICE9IGJlZm9yZSlcbiYjNDM7XHRcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1BBRF9DVFJMMSwgYWZ0ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19yZWFkOChydHdkZXYsIFJFR19HTlRfQlQpID09IDB4MDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19CVF9DT0VYX0VOSF9JTlRSX0NUUkwpID09IDB4MGMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ0d19md19zZXRfZ250X2J0KHJ0d2RldiwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYW50X3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YW50X3RhcmdldCA9IHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcbiYjNDM7XHRydHdfY29leF9zZXRfYW50X3N3aXRjaChydHdkZXYsIENPRVhfU1dJVENIX0NUUkxfQllfUFRBLFxuJiM0MztcdFx0XHRcdENPRVhfU1dJVENIX1RPX05PQ0FSRSk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX3dyaXRlX2JiX3NlbF9idGcocnR3ZGV2LCBhbnRfdGFyZ2V0KTtcbiYjNDM7XHRydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChydHdkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfYW50X2J1ZmZlcihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTggc3lzX2Z1bmNfYmVmb3JlO1xuJiM0MztcbiYjNDM7XHRzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pO1xuJiM0MztcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcbiYjNDM7XHRcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfODcyM0JTX0JUX0NPRVhfQ1RSTCwgQklUKDMpLCAweDEpO1xuJiM0MztcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfODcyM0JTX0JCX0FOVF9CVUYsIDB4ZmYpO1xuJiM0MztcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR184NzIzQlNfQkJfQU5UX0NGRzEsIDB4MywgMHgzKTtcbiYjNDM7XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHLCAweDc3KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJ0d2Rldi1cdTAwM2Vjb2V4LmRtLmN1cl90YWJsZSA9IDI7XG4mIzQzO1x0cnR3X2NvZXhfc2V0X3RhYmxlKHJ0d2RldiwgdHJ1ZSwgMHg1YTVhNWE1YSwgMHg1YTVhNWE1YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5vbi1jb25uZWN0ZWQgc2Nhbi9hdXRoIHdvcmthcm91bmQ6IFBTLVRETUEgdHlwZSA4IG9mZiwgUFRBIGFudGVubmEgcGF0aCxcbiYjNDM7ICogY29leCB0YWJsZSB0eXBlIDIgKG1hdGNoZXMgdGhlIHZlbmRvciBub24tY29ubmVjdGVkIGFyYml0cmF0aW9uKS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19jb2V4X2RtICpjb2V4X2RtID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNvZXguZG07XG4mIzQzO1x0c3RydWN0IHJ0d19jb2V4X3N0YXQgKmNvZXhfc3RhdCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2Vjb2V4LnN0YXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjb2V4X2RtLVx1MDAzZWN1cl9wc190ZG1hX29uID0gZmFsc2U7XG4mIzQzO1x0Y29leF9kbS1cdTAwM2VjdXJfcHNfdGRtYSA9IDg7XG4mIzQzO1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMF0gPSAweDA4O1xuJiM0MztcdGNvZXhfZG0tXHUwMDNlcHNfdGRtYV9wYXJhWzFdID0gMHgwMDtcbiYjNDM7XHRjb2V4X2RtLVx1MDAzZXBzX3RkbWFfcGFyYVsyXSA9IDB4MDA7XG4mIzQzO1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbM10gPSAweDAwO1xuJiM0MztcdGNvZXhfZG0tXHUwMDNlcHNfdGRtYV9wYXJhWzRdID0gMHgwMDtcbiYjNDM7XG4mIzQzO1x0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcbiYjNDM7XHRydHdfY29leF9zZXRfYW50X3BhdGgocnR3ZGV2LCB0cnVlLCBDT0VYX1NFVF9BTlRfMkcpO1xuJiM0MztcdHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHJ0d2Rldik7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUocnR3ZGV2KTtcbiYjNDM7XHRpZiAoY29leF9zdGF0LVx1MDAzZWJ0X2Rpc2FibGVkKVxuJiM0MztcdFx0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XG4mIzQzO1x0cnR3X2NvZXhfODcyM2JzX3JlYXNzZXJ0X3B0YV9hbnQocnR3ZGV2KTtcbiYjNDM7XHRydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChydHdkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXBsYXllZCBpbW1lZGlhdGVseSBiZWZvcmUgc3RhcnRfY2xudF9qb2luKCkvYXV0aDogQlRfSU5GTyAmIzQzOyBQUy1URE1BIHR5cGUgOFxuJiM0MzsgKiB0aGVuIHRoZSBmb3JjZWQgV2lGaSBQVEEgYW50ZW5uYSBwYXRoLCBzbyB0aGUgYXV0aCB3aW5kb3cgaXMgY2xlYW4uXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cnR3ZGV2LVx1MDAzZW11dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cnR3X2Z3X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTtcbiYjNDM7XHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbiYjNDM7XHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbiYjNDM7XHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbiYjNDM7XHRydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhydHdkZXYpO1xuJiM0MztcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IGNoYXIgKnJ0d19jb2V4X2dldF9hbGdvX3N0cmluZyh1OCBhbGdvKVxuIHtcbiBcdHN3aXRjaCAoYWxnbykge1xuQEAgLTI3NzAsNyAmIzQzOzI5NTUsNyBAQCB2b2lkIHJ0d19jb2V4X3Bvd2VyX29uX3NldHRpbmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdGNvZXgtXHUwMDNlc3RvcF9kbSA9IHRydWU7XG4gXHRjb2V4LVx1MDAzZXdsX3JmX29mZiA9IGZhbHNlO1xuIFxuLVx0LyogZW5hYmxlIEJCLCB3ZSBjYW4gd3JpdGUgMHg5NDggKi9cbiYjNDM7XHQvKiBlbmFibGUgQkIsIHNvIEJCX1NFTF9CVEcgaXMgd3JpdGFibGUgKi9cbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLFxuIFx0XHQgICAgICAgQklUX0ZFTl9CQl9HTEJfUlNUIHwgQklUX0ZFTl9CQl9SU1RCKTtcbiBcbkBAIC0yODc3LDYgJiM0MzszMDYyLDMzIEBAIHZvaWQgcnR3X2NvZXhfc2Nhbl9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcbiBcdGNvZXgtXHUwMDNlZnJlZXplID0gZmFsc2U7XG4gXHRydHdfY29leF93cml0ZV9zY2JkKHJ0d2RldiwgQ09FWF9TQ0JEX0FDVElWRSB8IENPRVhfU0NCRF9PTk9GRiwgdHJ1ZSk7XG4gXG4mIzQzO1x0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IGtlZXAgdGhlIHNjYW4vYXV0aCBQVEEgYW50ZW5uYSBzdGF0ZSB0aGVcbiYjNDM7XHQgKiB2ZW5kb3IgdXNlcyBhbmQgc2tpcCB0aGUgZ2VuZXJpYyBjb2V4IHJ1bi4gQXQgc2NhbiBzdGFydCAoZmlybXdhcmVcbiYjNDM7XHQgKiBoYXMgYmVlbiB1cCBsb25nIGVub3VnaCBmb3Igc3RhYmxlIFJYIERNQSkgcmVwbGF5IHRoZSB2ZW5kb3IgQlRfTVAgL1xuJiM0MztcdCAqIEJUX0lORk8gcXVlcmllcywgdGhlbiByZS1lc3RhYmxpc2ggdGhlIHNjYW4tcGF0aCBQVEEgc2V0dXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKSB7XG4mIzQzO1x0XHRpZiAodHlwZSA9PSBDT0VYX1NDQU5fU1RBUlRfMkcgfHwgdHlwZSA9PSBDT0VYX1NDQU5fU1RBUlQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0d19jb2V4X2luZm9fcmVxIHJlcSA9IHt9O1xuJiM0MztcbiYjNDM7XHRcdFx0Y29leF9zdGF0LVx1MDAzZWNudF93bFtDT0VYX0NOVF9XTF9TQ0FOQVBdID0gMDtcbiYjNDM7XHRcdFx0Y29leF9zdGF0LVx1MDAzZXdsX2hpX3ByaV90YXNrMiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXEuc2VxID0gMHgwZTtcbiYjNDM7XHRcdFx0cmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1NVUFBfVkVSO1xuJiM0MztcdFx0XHRydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsIFx1MDAyNnJlcSk7XG4mIzQzO1x0XHRcdHJlcS5zZXEgPSAweDBmO1xuJiM0MztcdFx0XHRyZXEub3BfY29kZSA9IEJUX01QX0lORk9fT1BfUEFUQ0hfVkVSO1xuJiM0MztcdFx0XHRydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsIFx1MDAyNnJlcSk7XG4mIzQzO1x0XHRcdHJ0d19md19xdWVyeV9idF9pbmZvKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdFx0XHRydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHJ0d2Rldik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRjb2V4X3N0YXQtXHUwMDNld2xfaGlfcHJpX3Rhc2syID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh0eXBlID09IENPRVhfU0NBTl9TVEFSVF81Rykge1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19DT0VYLFxuIFx0XHRcdFwmIzM0O1tCVENvZXhdLCBTQ0FOIFNUQVJUIG5vdGlmeSAoNUcpXFxuXCYjMzQ7KTtcbkBAIC0yOTM4LDYgJiM0MzszMTUwLDE3IEBAIHZvaWQgcnR3X2NvZXhfY29ubmVjdF9ub3RpZnkoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggdHlwZSlcbiBcdGlmIChjb2V4LVx1MDAzZW1hbnVhbF9jb250cm9sIHx8IGNvZXgtXHUwMDNlc3RvcF9kbSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIDg3MjNCUyBTRElPIEJULWRpc2FibGVkOiB0aGUgdmVuZG9yIENvbm5lY3ROb3RpZnkoKSBlYXJseS1yZXR1cm5zXG4mIzQzO1x0ICogd2l0aG91dCBzZW5kaW5nIEgyQ3M7IHNjYW5fd29ya2Fyb3VuZCBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZSBQVEFcbiYjNDM7XHQgKiBwYXRoIC8gY29leCB0YWJsZSAvIFBTLVRETUEuIEtlZXAgb25seSB0aGUgcmVnaXN0ZXItbGV2ZWwgUFRBXG4mIzQzO1x0ICogcmVhc3NlcnRpb24gYXQgYXNzb2NpYXRlLXN0YXJ0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkge1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpXG4mIzQzO1x0XHRcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTtcbiBcbiBcdGlmICh0eXBlID09IENPRVhfQVNTT0NJQVRFXzVHX1NUQVJUKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxuaW5kZXggYzM5OGJlODM5MWY3YjAuLmM1OGFlMGE1MGIzMGIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oXG5AQCAtNDMwLDQgJiM0Mzs0MzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2NvZXhfYWN0aXZlX3F1ZXJ5X2J0X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cnR3X2NvZXhfcXVlcnlfYnRfaW5mbyhydHdkZXYpO1xuIH1cbiBcbiYjNDM7dm9pZCBydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XG4mIzQzO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xuaW5kZXggOTQ1ZmVkY2QzNzViNjIuLjdjMTcwODZjYWMzMmM0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbkBAIC03ODYsNiAmIzQzOzc4NiwxNyBAQCB2b2lkIHJ0d19md19tZWRpYV9zdGF0dXNfcmVwb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IG1hY19pZCwgYm9vbCBjb25uZWN0KVxuIFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbiB9XG4gXG4mIzQzOy8qIDg3MjNCUyBTRElPOiBzZXQgdGhlIGZpcm13YXJlIEdOVF9CVCBzdGF0ZSAoMCA9IFdpRmkgb3ducyB0aGUgYW50ZW5uYSkuICovXG4mIzQzO3ZvaWQgcnR3X2Z3X3NldF9nbnRfYnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHR1OCBoMmNfcGt0W0gyQ19QS1RfU0laRV0gPSB7MH07XG4mIzQzO1xuJiM0MztcdFNFVF9IMkNfQ01EX0lEX0NMQVNTKGgyY19wa3QsIEgyQ19DTURfR05UX0JUKTtcbiYjNDM7XHRTRVRfR05UX0JUX1NUQVRFKGgyY19wa3QsIHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJ0d19md191cGRhdGVfd2xfcGh5X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3RyYWZmaWNfc3RhdHMgKnN0YXRzID0gXHUwMDI2cnR3ZGV2LVx1MDAzZXN0YXRzO1xuQEAgLTE0NjYsMTAgJiM0MzsxNDc3LDE0IEBAIHZvaWQgcnR3X2FkZF9yc3ZkX3BhZ2Vfc3RhKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRydHdfYWRkX3JzdmRfcGFnZShydHdkZXYsIHJ0d3ZpZiwgUlNWRF9MUFNfUEdfSU5GTywgdHJ1ZSk7XG4gfVxuIFxuJiM0MzsvKiBSRUdfRFdCQ04xX0NUUkwgYml0IDIwIChTV19CQ05fU0VMIGZvciBwb3J0IDApLCByZWxhdGl2ZSB0byBieXRlICYjNDM7MiAqL1xuJiM0MzsjZGVmaW5lIEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDBcdCgyMCAtIDE2KVxuJiM0MztcbiBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLFxuIFx0XHRcdFx0dTggKmJ1ZiwgdTMyIHNpemUpXG4ge1xuLVx0dTggYmNrcFszXTtcbiYjNDM7XHRjb25zdCBib29sIGlzXzg3MjNic19zZGlvID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuJiM0MztcdHU4IGJja3BbNF07XG4gXHR1OCB2YWw7XG4gXHR1MTYgcnN2ZF9wZ19oZWFkO1xuIFx0dTMyIGJjbl92YWxpZF9hZGRyO1xuQEAgLTE0OTksMTMgJiM0MzsxNTE0LDI4IEBAIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXG4gXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuIFx0XHQgICAoYmNrcFsyXSBcdTAwMjYgfkJJVF9FTl9CQ05fRlVOQ1RJT04pIHwgQklUX0RJU19UU0ZfVURUKTtcbiBcbi1cdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSkge1xuJiM0MztcdC8qIENsZWFyIEJJVF9FTl9CQ05RX0RMIHNvIHRoZSBjaGlwIGRvZXMgbm90IHRyZWF0IHRoZSByZXNlcnZlZC1wYWdlXG4mIzQzO1x0ICogdXBsb2FkIGFzIGEgcmVhbCBiZWFjb247IG90aGVyd2lzZSBCSVRfQkNOX1ZBTElEIG5ldmVyIGFzc2VydHMuIFRoZVxuJiM0MztcdCAqIHZlbmRvciBydGw4NzIzYnMgZHJpdmVyIGRvZXMgdGhpcyB1bmNvbmRpdGlvbmFsbHk7IHJ0dzg4IG9ubHkgZGlkIGl0XG4mIzQzO1x0ICogZm9yIFBDSWUsIHdoaWNoIGxlZnQgODcyM0JTIFNESU8mIzM5O3MgQkNOX1ZBTElEIGhhbmRzaGFrZSBmYWlsaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSB8fCBpc184NzIzYnNfc2Rpbykge1xuIFx0XHR2YWwgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyKTtcbiBcdFx0YmNrcFsxXSA9IHZhbDtcbiBcdFx0dmFsIFx1MDAyNj0gfihCSVRfRU5fQkNOUV9ETCBcdTAwM2VcdTAwM2UgMTYpO1xuIFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgJiM0MzsgMiwgdmFsKTtcbiBcdH1cbiBcbiYjNDM7XHQvKiA4NzIzQlMgU0RJTzogcG9pbnQgdGhlIFNXIGJlYWNvbiBkb3dubG9hZCBwYXRoIGF0IHBvcnQgMCwgZWxzZVxuJiM0MztcdCAqIEJJVF9CQ05fVkFMSUQgaXMgbmV2ZXIgYXNzZXJ0ZWQgYWZ0ZXIgdGhlIFNESU8gdXBsb2FkIGNvbXBsZXRlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfODcyM2JzX3NkaW8pIHtcbiYjNDM7XHRcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCAmIzQzOyAyKTtcbiYjNDM7XHRcdGJja3BbM10gPSB2YWw7XG4mIzQzO1x0XHR2YWwgXHUwMDI2PSB+QklUKEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDApO1xuJiM0MztcdFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCAmIzQzOyAyLCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBydHdfaGNpX3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHJ0d2RldiwgYnVmLCBzaXplKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cnR3X2VycihydHdkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBkYXRhIHRvIHJzdmQgcGFnZVxcblwmIzM0Oyk7XG5AQCAtMTUyNiwxMSAmIzQzOzE1NTYsMTMgQEAgaW50IHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgcGdfYWRkcixcbiBcdH1cbiBcbiByZXN0b3JlOlxuJiM0MztcdGlmIChpc184NzIzYnNfc2RpbylcbiYjNDM7XHRcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgJiM0MzsgMiwgYmNrcFszXSk7XG4gXHRyc3ZkX3BnX2hlYWQgPSBydHdkZXYtXHUwMDNlZmlmby5yc3ZkX2JvdW5kYXJ5O1xuIFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfRklGT1BBR0VfQ1RSTF8yLFxuIFx0XHQgICAgcnN2ZF9wZ19oZWFkIHwgQklUX0JDTl9WQUxJRF9WMSk7XG4gXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLCBiY2twWzJdKTtcbi1cdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSlcbiYjNDM7XHRpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pXG4gXHRcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyLCBiY2twWzFdKTtcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQ1IgJiM0MzsgMSwgYmNrcFswXSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5pbmRleCA0OGFkOWNlYWI2ZWExMi4uZjVlZDY1YzQ2MzUwZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuQEAgLTU3Miw2ICYjNDM7NTcyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19oMmNfcGt0X3NldF9oZWFkZXIodTggKmgyY19wa3QsIHU4IHN1Yl9pZClcbiAjZGVmaW5lIEgyQ19DTURfUVVFUllfQlRfTVBfSU5GT1x0MHg2N1xuICNkZWZpbmUgSDJDX0NNRF9CVF9XSUZJX0NPTlRST0xcdFx0MHg2OVxuICNkZWZpbmUgSDJDX0NNRF9XSUZJX0NBTElCUkFUSU9OXHQweDZkXG4mIzQzOyNkZWZpbmUgSDJDX0NNRF9HTlRfQlRcdFx0XHQweDZlXG4gI2RlZmluZSBIMkNfQ01EX1FVRVJZX0JUX0hJRF9JTkZPXHQweDczXG4gXG4gI2RlZmluZSBIMkNfQ01EX0tFRVBfQUxJVkVcdFx0MHgwM1xuQEAgLTY4NCw2ICYjNDM7Njg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19oMmNfcGt0X3NldF9oZWFkZXIodTggKmgyY19wa3QsIHU4IHN1Yl9pZClcbiBcdGxlMzJwX3JlcGxhY2VfYml0cygoX19sZTMyICopKGgyY19wa3QpICYjNDM7IDB4MDEsIHZhbHVlLCBHRU5NQVNLKDMxLCAyNCkpXG4gI2RlZmluZSBTRVRfUVVFUllfQlRfSU5GTyhoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gXHRsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuJiM0MzsjZGVmaW5lIFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiYjNDM7XHRsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fTElOSyhoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgJiM0MzsgMHgwMCwgdmFsdWUsIEdFTk1BU0soMTUsIDgpKVxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fQ0hOTChoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuQEAgLTg0OSw2ICYjNDM7ODUyLDcgQEAgdm9pZCBydHdfZndfc2VuZF9yc3NpX2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHJ0d19zdGFfaW5mbyAqc2kpO1xuIHZvaWQgcnR3X2Z3X3NlbmRfcmFfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSxcbiBcdFx0XHQgYm9vbCByZXNldF9yYV9tYXNrKTtcbiB2b2lkIHJ0d19md19tZWRpYV9zdGF0dXNfcmVwb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IG1hY19pZCwgYm9vbCBjb25uKTtcbiYjNDM7dm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSk7XG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuIHZvaWQgcnR3X2Z3X2JlYWNvbl9maWx0ZXJfY29uZmlnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgY29ubmVjdCxcbiBcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmNcbmluZGV4IDc2NmYyMmQzMTA3OWVlLi45MTAxNGE4ZTI0MmIzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jXG5AQCAtMTUsNiAmIzQzOzE1LDQ2MyBAQFxuICNpbmNsdWRlIFwmIzM0O3dvdy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2FyLmhcJiMzNDtcbiBcbiYjNDM7LyogODcyM0JTIFNESU86IHJlY29yZCBhIGJlYWNvbi9wcm9iZS1yZXNwIHNlZW4gZnJvbSB0aGUgdGFyZ2V0IEJTU0lEIGR1cmluZ1xuJiM0MzsgKiB0aGUgcHJlLWF1dGggd2luZG93IHNvIHRoZSBqb2luIHNlcXVlbmNlIChtZ2RfcHJlcGFyZV90eCkgY2FuIHdhaXQgZm9yIGl0LFxuJiM0MzsgKiBtaXJyb3JpbmcgdGhlIHZlbmRvciBzdGFydF9jbG50X2pvaW4oKS4gQ2FsbGVkIGZyb20gdGhlIFNESU8gUlggcGF0aC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbixcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdF9fbGUxNiBmYyA9IGhkci1cdTAwM2VmcmFtZV9jb250cm9sO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChSVFdfRkxBR19TQ0FOTklORywgcnR3ZGV2LVx1MDAzZWZsYWdzKSB8fFxuJiM0MztcdCAgICBwa3Rfc3RhdC1cdTAwM2VjcmNfZXJyIHx8IHBrdF9zdGF0LVx1MDAzZWljdl9lcnIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihmYykgXHUwMDI2XHUwMDI2ICFpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlmIChzeW5jLVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgZXRoZXJfYWRkcl9lcXVhbChoZHItXHUwMDNlYWRkcjMsIHN5bmMtXHUwMDNlYnNzaWQpKSB7XG4mIzQzO1x0XHRzeW5jLVx1MDAzZXNlZW4gPSB0cnVlO1xuJiM0MztcdFx0c3luYy1cdTAwM2VzZWVuX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdHdha2VfdXAoXHUwMDI2c3luYy1cdTAwM2V3YWl0KTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHJ0dzg3MjNic19hdXRoX3N5bmNfcngpO1xuJiM0MztcbiYjNDM7LyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfSk9JTl9SRVRSWV9MSU1JVFx0XHQweDMwXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX0ZBTExCQUNLX01TXHQxMjBcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUlOX01TXHRcdDgwXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX01BWF9NU1x0XHQxNjBcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19TSE9SVF9TTE9UX1RJTUVcdFx0OVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19MT05HX1NMT1RfVElNRVx0XHQyMFxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzFNXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMk1cdFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81XzVNXHRcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMTFNXHRcdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNk1cdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl85TVx0XHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzEyTVx0XHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzE4TVx0XHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzI0TVx0XHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzM2TVx0XHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzQ4TVx0XHRcdEJJVCgxMClcbiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81NE1cdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIFxcXG4mIzQzO1x0KFJUVzg3MjNCU19SUlNSXzFNIHwgUlRXODcyM0JTX1JSU1JfMk0gfCBcXFxuJiM0MztcdCBSVFc4NzIzQlNfUlJTUl81XzVNIHwgUlRXODcyM0JTX1JSU1JfMTFNKVxuJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJHX0ZPUkNFXHRcdFx0UlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTXG4mIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMkdfQUxMT1cgXFxcbiYjNDM7XHQoUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIHwgUlRXODcyM0JTX1JSU1JfNk0gfCBcXFxuJiM0MztcdCBSVFc4NzIzQlNfUlJTUl8xMk0gfCBSVFc4NzIzQlNfUlJTUl8yNE0pXG4mIzQzO1xuJiM0MzsvKiBLZWVwIHRoZSBSQ1IgYXQgdGhlIHZlbmRvciB0YXJnZXQtb25seSBzdGF0ZSAoQU1GICYjNDM7IENCU1NJRCkgYWNyb3NzIHRoZSB3aG9sZVxuJiM0MzsgKiBjb25uZWN0IHdpbmRvdywgbWF0Y2hpbmcgdGhlIHZlbmRvciBTVEEgcGF0aC4gYWNjZXB0X2FsbCBpcyBrZXB0IG9ubHkgZm9yIHRoZVxuJiM0MzsgKiBjYWxsZXImIzM5O3MgaW50ZW50OyBib3RoIHBhdGhzIGNvbnZlcmdlIHRoZSBmaWx0ZXIgdG8gdGFyZ2V0LW9ubHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBhY2NlcHRfYWxsKVxuJiM0Mzt7XG4mIzQzO1x0cnR3ZGV2LVx1MDAzZWhhbC5yY3IgfD0gQklUX0FNRiB8IEJJVF9DQlNTSURfREFUQSB8IEJJVF9DQlNTSURfQkNOO1xuJiM0MztcdHJ0d2Rldi1cdTAwM2VoYWwucmNyIFx1MDAyNj0gfkJJVF9BQVA7XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUkNSLCBydHdkZXYtXHUwMDNlaGFsLnJjcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7XG4mIzQzO1xuJiM0MztcdHNlYyB8PSBSVFdfU0VDX0NIS19LRVlJRCB8IFJUV19TRUNfVFhfREVDX0VOIHwgUlRXX1NFQ19SWF9ERUNfRU47XG4mIzQzO1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2goc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdFx0Ym9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc2VjID0gcnR3X3JlYWQxNihydHdkZXYsIFJUV19TRUNfQ09ORklHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSlcbiYjNDM7XHRcdHNlYyB8PSBSVFdfU0VDX1RYX0JDX1VTRV9ESyB8IFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8XG4mIzQzO1x0XHQgICAgICAgUlRXX1NFQ19SWF9VTklfVVNFX0RLO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNlYyBcdTAwMjY9IH4oUlRXX1NFQ19UWF9VTklfVVNFX0RLIHwgUlRXX1NFQ19SWF9VTklfVVNFX0RLIHxcbiYjNDM7XHRcdFx0IFJUV19TRUNfVFhfQkNfVVNFX0RLIHwgUlRXX1NFQ19SWF9CQ19VU0VfREspO1xuJiM0MztcdHJ0d193cml0ZTE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcsIHNlYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19lbmFibGVfdHNmX3VwZGF0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cnR3X3dyaXRlOF9jbHIocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIEJJVF9ESVNfVFNGX1VEVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgc2hvcnRfcHJlYW1ibGUpXG4mIzQzO3tcbiYjNDM7XHR1OCB2YWwgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfUlJTUiAmIzQzOyAyKSBcdTAwMjYgflJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQ7XG4mIzQzO1xuJiM0MztcdGlmIChzaG9ydF9wcmVhbWJsZSlcbiYjNDM7XHRcdHZhbCB8PSBSVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUO1xuJiM0MztcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfUlJTUiAmIzQzOyAyLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIHNob3J0X3Nsb3QpXG4mIzQzO3tcbiYjNDM7XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1NMT1QsXG4mIzQzO1x0XHQgICBzaG9ydF9zbG90ID8gUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRSA6XG4mIzQzO1x0XHRcdFx0UlRXODcyM0JTX0xPTkdfU0xPVF9USU1FKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUodTggcmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocmF0ZSBcdTAwMjYgMHg3Zikge1xuJiM0MztcdGNhc2UgMjogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMU07XG4mIzQzO1x0Y2FzZSA0OiAgIHJldHVybiBSVFc4NzIzQlNfUlJTUl8yTTtcbiYjNDM7XHRjYXNlIDExOiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzVfNU07XG4mIzQzO1x0Y2FzZSAyMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMU07XG4mIzQzO1x0Y2FzZSAxMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl82TTtcbiYjNDM7XHRjYXNlIDE4OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzlNO1xuJiM0MztcdGNhc2UgMjQ6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMTJNO1xuJiM0MztcdGNhc2UgMzY6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMThNO1xuJiM0MztcdGNhc2UgNDg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMjRNO1xuJiM0MztcdGNhc2UgNzI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMzZNO1xuJiM0MztcdGNhc2UgOTY6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNDhNO1xuJiM0MztcdGNhc2UgMTA4OiByZXR1cm4gUlRXODcyM0JTX1JSU1JfNTRNO1xuJiM0MztcdGRlZmF1bHQ6ICByZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb2xsZWN0X2Jhc2ljX3JhdGVzKGNvbnN0IHU4ICppZSwgdTE2ICpiYXNpY19yYXRlcyxcbiYjNDM7XHRcdFx0XHRcdCAgYm9vbCAqdmFsaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaWVbMV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MTYgcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShpZVtpICYjNDM7IDJdIFx1MDAyNiAweDgwKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyID0gcnR3ODcyM2JzX3Jyc3JfZnJvbV9pZV9yYXRlKGllW2kgJiM0MzsgMl0pO1xuJiM0MztcdFx0aWYgKCFyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdCpiYXNpY19yYXRlcyB8PSByO1xuJiM0MztcdFx0KnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlJTUiwgMHhmZmZmMSk7XG4mIzQzO1x0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IDB4ZmZmZjE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHU4ICpic3NpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcdTAwMjZ2aWYtXHUwMDNlYnNzX2NvbmY7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDtcbiYjNDM7XHRib29sIHZhbGlkID0gZmFsc2U7XG4mIzQzO1x0dTE2IGJhc2ljX3JhdGVzID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgdmlmLVx1MDAzZXR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvbmYtXHUwMDNlYnNzKSB7XG4mIzQzO1x0XHRic3MgPSBjb25mLVx1MDAzZWJzcztcbiYjNDM7XHR9IGVsc2UgaWYgKGJzc2lkIFx1MDAyNlx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xuJiM0MztcdFx0bG9va3VwX2JzcyA9IGNmZzgwMjExX2dldF9ic3MocnR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgYnNzaWQsIE5VTEwsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbiYjNDM7XHRcdGJzcyA9IGxvb2t1cF9ic3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYnNzKSB7XG4mIzQzO1x0XHRjb25zdCB1OCAqcmF0ZXMsICpleHQ7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0cmF0ZXMgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpO1xuJiM0MztcdFx0ZXh0ID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUyk7XG4mIzQzO1x0XHRydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhyYXRlcywgXHUwMDI2YmFzaWNfcmF0ZXMsIFx1MDAyNnZhbGlkKTtcbiYjNDM7XHRcdHJ0dzg3MjNic19jb2xsZWN0X2Jhc2ljX3JhdGVzKGV4dCwgXHUwMDI2YmFzaWNfcmF0ZXMsIFx1MDAyNnZhbGlkKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZhbGlkKSB7XG4mIzQzO1x0XHRiYXNpY19yYXRlcyB8PSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRTtcbiYjNDM7XHRcdGJhc2ljX3JhdGVzIFx1MDAyNj0gUlRXODcyM0JTX1JSU1JfMkdfQUxMT1c7XG4mIzQzO1x0XHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SUlNSLCBiYXNpY19yYXRlcyk7XG4mIzQzO1x0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1JSU1IgJiM0MzsgMixcbiYjNDM7XHRcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1JSU1IgJiM0MzsgMikgXHUwMDI2IDB4ZjApO1xuJiM0MztcdFx0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IGJhc2ljX3JhdGVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxvb2t1cF9ic3MpXG4mIzQzO1x0XHRjZmc4MDIxMV9wdXRfYnNzKHJ0d2Rldi1cdTAwM2Vody1cdTAwM2V3aXBoeSwgbG9va3VwX2Jzcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFByb2dyYW0gcmVzcG9uc2Ugc2xvdCB0aW1lIChhbmQsIHdoZW4gc2V0X3ByZWFtYmxlLCB0aGUgQUNLIHByZWFtYmxlKSBmcm9tXG4mIzQzOyAqIHRoZSBzZWxlY3RlZCBzY2FuIEJTUyBjYXBhYmlsaXRpZXM7IHRoZSBBUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCB5ZXQgaW5cbiYjNDM7ICogYnNzX2NvbmYgYXQgbWdkX3ByZXBhcmVfdHgoKSB0aW1lLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgdTggKmJzc2lkLCBib29sIHNldF9wcmVhbWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcdTAwMjZ2aWYtXHUwMDNlYnNzX2NvbmY7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDtcbiYjNDM7XHRib29sIHNob3J0X3ByZWFtYmxlLCBzaG9ydF9zbG90O1xuJiM0MztcdHUxNiBjYXAgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoY29uZi1cdTAwM2Vic3MpIHtcbiYjNDM7XHRcdGJzcyA9IGNvbmYtXHUwMDNlYnNzO1xuJiM0MztcdH0gZWxzZSBpZiAoYnNzaWQgXHUwMDI2XHUwMDI2IGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7XG4mIzQzO1x0XHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuJiM0MztcdFx0YnNzID0gbG9va3VwX2JzcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChic3MpIHtcbiYjNDM7XHRcdGNhcCA9IGJzcy1cdTAwM2VjYXBhYmlsaXR5O1xuJiM0MztcdH0gZWxzZSBpZiAoY29uZi1cdTAwM2Vhc3NvY19jYXBhYmlsaXR5KSB7XG4mIzQzO1x0XHRjYXAgPSBjb25mLVx1MDAzZWFzc29jX2NhcGFiaWxpdHk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNob3J0X3ByZWFtYmxlID0gY29uZi1cdTAwM2V1c2Vfc2hvcnRfcHJlYW1ibGU7XG4mIzQzO1x0XHRzaG9ydF9zbG90ID0gY29uZi1cdTAwM2V1c2Vfc2hvcnRfc2xvdDtcbiYjNDM7XHRcdGdvdG8gcHJvZ3JhbTtcbiYjNDM7XHR9XG4mIzQzO1x0c2hvcnRfcHJlYW1ibGUgPSAhIShjYXAgXHUwMDI2IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSk7XG4mIzQzO1x0c2hvcnRfc2xvdCA9ICEhKGNhcCBcdTAwMjYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSk7XG4mIzQzO1xuJiM0Mztwcm9ncmFtOlxuJiM0MztcdGlmIChzZXRfcHJlYW1ibGUpXG4mIzQzO1x0XHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTtcbiYjNDM7XHRydHc4NzIzYnNfc2V0X3Nsb3RfdGltZShydHdkZXYsIHNob3J0X3Nsb3QpO1xuJiM0MztcbiYjNDM7XHRpZiAobG9va3VwX2JzcylcbiYjNDM7XHRcdGNmZzgwMjExX3B1dF9ic3MocnR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LCBsb29rdXBfYnNzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiYjNDM7e1xuJiM0MztcdHUxNiBiZWFjb25faW50ID0gdmlmLVx1MDAzZWJzc19jb25mLmJlYWNvbl9pbnQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRfbXM7XG4mIzQzO1xuJiM0MztcdGlmICghYmVhY29uX2ludClcbiYjNDM7XHRcdHJldHVybiBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfRkFMTEJBQ0tfTVM7XG4mIzQzO1xuJiM0MztcdHdhaXRfbXMgPSBESVZfUk9VTkRfVVAoYmVhY29uX2ludCAqIDEwMjQsIDEwMDApICYjNDM7IDIwO1xuJiM0MztcdHJldHVybiBjbGFtcF90KHVuc2lnbmVkIGludCwgd2FpdF9tcywgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX01JTl9NUyxcbiYjNDM7XHRcdCAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VhdXRoX3N5bmM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KHN5bmMtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbiYjNDM7XHRzeW5jLVx1MDAzZXNlZW4gPSBmYWxzZTtcbiYjNDM7XHRzeW5jLVx1MDAzZXNlZW5fY291bnQgPSAwO1xuJiM0MztcdHN5bmMtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3N0b3Aoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRzeW5jLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHJ0dzg3MjNic19hdXRoX3N5bmNfc2VlbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0Ym9vbCBzZWVuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRzZWVuID0gc3luYy1cdTAwM2VzZWVuO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZWVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCB3YWl0X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gd2FpdF9ldmVudF90aW1lb3V0KHN5bmMtXHUwMDNld2FpdCwgcnR3ODcyM2JzX2F1dGhfc3luY19zZWVuKHJ0d2RldiksXG4mIzQzO1x0XHRcdFx0ICBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSBcdTAwM2UgMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9wcmVwX3R4X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBpbmZvIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBpbmZvLVx1MDAzZXN1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0FVVEg7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlcGxpY2F0ZSB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIHJlZ2lzdGVyIHByb2dyYW1taW5nIHJpZ2h0IGJlZm9yZVxuJiM0MzsgKiBhdXRoLiBSZXR1cm5zIHRydWUgZm9yIGEgZnJlc2ggam9pbiAoQlNTSUQgY2hhbmdlZCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfam9pbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYnNzaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3ZpZiAqcnR3dmlmID0gKHN0cnVjdCBydHdfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuJiM0MztcdGJvb2wgZnJlc2hfam9pbjtcbiYjNDM7XHR1MTYgcmV0cnlfbGltaXQ7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZyZXNoX2pvaW4gPSAhZXRoZXJfYWRkcl9lcXVhbChydHd2aWYtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbiYjNDM7XG4mIzQzO1x0ZXRoZXJfYWRkcl9jb3B5KHJ0d3ZpZi1cdTAwM2Vic3NpZCwgYnNzaWQpO1xuJiM0MztcdHJ0d3ZpZi1cdTAwM2VhaWQgPSAwO1xuJiM0MztcdHJ0d3ZpZi1cdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTUdEX0xJTktFRDtcbiYjNDM7XHRydHdfdmlmX3BvcnRfY29uZmlnKHJ0d2RldiwgcnR3dmlmLFxuJiM0MztcdFx0XHQgICAgUE9SVF9TRVRfQlNTSUQgfCBQT1JUX1NFVF9BSUQgfCBQT1JUX1NFVF9ORVRfVFlQRSk7XG4mIzQzO1xuJiM0MztcdC8qIERvIG5vdCBuYXJyb3cgUlJTUiBvciBzd2l0Y2ggdG8gc2hvcnQtcHJlYW1ibGUgcmVzcG9uc2VzIGJlZm9yZSB0aGVcbiYjNDM7XHQgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXRcbiYjNDM7XHQgKiAoMHhmZmZmMSwgbG9uZyBwcmVhbWJsZSkuIE9ubHkgc2xvdCB0aW1lIGlzIHByb2dyYW1tZWQgZWFybHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJ0d19md19iZWFjb25fZmlsdGVyX2NvbmZpZyhydHdkZXYsIGZhbHNlLCB2aWYpO1xuJiM0MztcbiYjNDM7XHQvKiBNYXRjaCB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIFRYIHN0YXRlIChzZXRfbXNyIGRpcmVjdGx5LCBrZWVwXG4mIzQzO1x0ICogQkNOX0NUUkwgLyBCQ05RX0RMIHNldCwgcmVhc3NlcnQgVEJUVC9SRVNQX1NJRlMgZXZlcnkgam9pbikuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR19CQ05fQ1RSTCxcbiYjNDM7XHRcdCAgIEJJVF9ESVNfVFNGX1VEVCB8IEJJVF9FTl9CQ05fRlVOQ1RJT04pO1xuJiM0MztcdHJ0d193cml0ZTMyX3NldChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMLCBCSVRfRU5fQkNOUV9ETCk7XG4mIzQzO1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICYjNDM7IDEsIDB4NjQgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfVEJUVF9QUk9ISUJJVCAmIzQzOyAyLFxuJiM0MztcdFx0ICAgKHJ0d19yZWFkOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICYjNDM7IDIpIFx1MDAyNiAweGYwKSB8ICgweDY0IFx1MDAzZVx1MDAzZSA4KSk7XG4mIzQzO1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUkVTUF9TSUZTX0NDSywgMHgwODA4KTtcbiYjNDM7XHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfT0ZETSwgMHgwYTBhKTtcbiYjNDM7XG4mIzQzO1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUlhGTFRNQVAwLCAweGZmZmYpO1xuJiM0MztcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JYRkxUTUFQMiwgMHhmZmZmKTtcbiYjNDM7XHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0cmV0cnlfbGltaXQgPSAoUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVQgXHUwMDNjXHUwMDNjIDgpIHxcbiYjNDM7XHRcdCAgICAgIFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUO1xuJiM0MztcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFVFJZX0xJTUlULCByZXRyeV9saW1pdCk7XG4mIzQzO1xuJiM0MztcdHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlc2hfam9pbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIHZlbmRvciBzZW5kcyBhIGRlYXV0aCB0byB0aGUgdGFyZ2V0IGJlZm9yZSBhdXRoIHRvIGNsZWFyIHN0YWxlIEFQLXNpZGVcbiYjNDM7ICogc3RhdGU7IHN5bnRoZXNpemUgYW5kIFRYIG9uZSwgdGhlbiBsZXQgdGhlIEFQIHNldHRsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHU4ICpic3NpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sID0ge307XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHVuc2lnbmVkIGludCBmcmFtZV9sZW4sIGhlYWRyb29tO1xuJiM0MztcbiYjNDM7XHRmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICYjNDM7IHNpemVvZihtZ210LVx1MDAzZXUuZGVhdXRoKTtcbiYjNDM7XHRoZWFkcm9vbSA9IHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXR4X3BrdF9kZXNjX3N6ICYjNDM7IDg7XG4mIzQzO1xuJiM0MztcdHNrYiA9IGRldl9hbGxvY19za2IoaGVhZHJvb20gJiM0MzsgZnJhbWVfbGVuKTtcbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XG4mIzQzO1x0bWdtdCA9IHNrYl9wdXRfemVybyhza2IsIGZyYW1lX2xlbik7XG4mIzQzO1x0bWdtdC1cdTAwM2VmcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfFxuJiM0MztcdFx0XHRcdFx0ICBJRUVFODAyMTFfU1RZUEVfREVBVVRIKTtcbiYjNDM7XHRtZW1jcHkobWdtdC1cdTAwM2VkYSwgYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRtZW1jcHkobWdtdC1cdTAwM2VzYSwgdmlmLVx1MDAzZWFkZHIsIEVUSF9BTEVOKTtcbiYjNDM7XHRtZW1jcHkobWdtdC1cdTAwM2Vic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRtZ210LVx1MDAzZXUuZGVhdXRoLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYoV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpO1xuJiM0MztcbiYjNDM7XHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xuJiM0MztcbiYjNDM7XHRydHdfdHgocnR3ZGV2LCBcdTAwMjZjb250cm9sLCBza2IpO1xuJiM0MztcdG1zbGVlcCgxMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPcmNoZXN0cmF0ZSB0aGUgcHJlLWF1dGggam9pbjogcHJvZ3JhbSB0aGUgdmVuZG9yIGpvaW4gc3RhdGUsIHNlbmQgdGhlXG4mIzQzOyAqIHByZS1hdXRoIGRlYXV0aCwgd2FpdCBmb3IgYSBiZWFjb24gZnJvbSB0aGUgdGFyZ2V0LCB0aGVuIHJlcGxheSB0aGVcbiYjNDM7ICogcHJlLWF1dGggY29leCBIMkNzIC0gb25jZSBwZXIgZnJlc2ggQlNTSUQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfdmlmICpydHd2aWY7XG4mIzQzO1x0Y29uc3QgdTggKmJzc2lkID0gTlVMTDtcbiYjNDM7XHRib29sIGZyZXNoX2pvaW47XG4mIzQzO1xuJiM0MztcdGlmICghcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgocnR3ZGV2LCBpbmZvKSB8fCAhdmlmIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRydHd2aWYgPSAoc3RydWN0IHJ0d192aWYgKil2aWYtXHUwMDNlZHJ2X3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cdTAwM2VjZmcuYXBfYWRkcikpXG4mIzQzO1x0XHRic3NpZCA9IHZpZi1cdTAwM2VjZmcuYXBfYWRkcjtcbiYjNDM7XHRlbHNlIGlmICh2aWYtXHUwMDNlYnNzX2NvbmYuYnNzaWQgXHUwMDI2XHUwMDI2ICFpc196ZXJvX2V0aGVyX2FkZHIodmlmLVx1MDAzZWJzc19jb25mLmJzc2lkKSlcbiYjNDM7XHRcdGJzc2lkID0gdmlmLVx1MDAzZWJzc19jb25mLmJzc2lkO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJzc2lkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmcmVzaF9qb2luID0gcnR3ODcyM2JzX21nZF9wcmVwYXJlX2pvaW4ocnR3ZGV2LCB2aWYsIGJzc2lkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZXNoX2pvaW4gfHwgIXJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9qb2luX2RvbmUpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB3YWl0X21zID0gcnR3ODcyM2JzX2F1dGhfc3luY193YWl0X21zKHZpZik7XG4mIzQzO1xuJiM0MztcdFx0cnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChydHdkZXYsIGJzc2lkKTtcbiYjNDM7XHRcdHJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgocnR3ZGV2LCB2aWYsIGJzc2lkKTtcbiYjNDM7XHRcdHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChydHdkZXYsIHdhaXRfbXMpO1xuJiM0MztcdFx0cnR3ODcyM2JzX2F1dGhfc3luY19zdG9wKHJ0d2Rldik7XG4mIzQzO1x0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50KSB7XG4mIzQzO1x0XHRydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7XG4mIzQzO1x0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfaDJjX3NlbnQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydHdfb3BzX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0zODcsNiAmIzQzOzg0NCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfQVNTT0MpIHtcbiBcdFx0cnR3X3ZpZl9hc3NvY19jaGFuZ2VkKHJ0d3ZpZiwgY29uZik7XG4gXHRcdGlmICh2aWYtXHUwMDNlY2ZnLmFzc29jKSB7XG4mIzQzO1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XG4mIzQzO1x0XHRcdFx0cnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHJ0d2RldiwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhydHdkZXYsIHZpZiwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0cnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHJ0d2Rldik7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0cnR3X2NvZXhfY29ubmVjdF9ub3RpZnkocnR3ZGV2LCBDT0VYX0FTU09DSUFURV9GSU5JU0gpO1xuIFxuIFx0XHRcdHJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTtcbkBAIC00MDgsNiAmIzQzOzg3MiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdFx0aWYgKHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdFx0cnR3X2h3X3NjYW5fYWJvcnQocnR3ZGV2KTtcbiBcbiYjNDM7XHRcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbiYjNDM7XHRcdFx0XHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0cnR3ODcyM2JzX3Jlc2V0X3Jlc3BvbnNlX3JhdGVzKHJ0d2Rldik7XG4mIzQzO1x0XHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XG4mIzQzO1x0XHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IGZhbHNlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFO1xuQEAgLTQxNSw4ICYjNDM7ODg2LDI2IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CU1NJRCkge1xuJiM0MztcdFx0Ym9vbCBic3NpZF9jbGVhcmVkID0gaXNfemVyb19ldGhlcl9hZGRyKGNvbmYtXHUwMDNlYnNzaWQpO1xuJiM0MztcdFx0Ym9vbCBic3NpZF9jaGFuZ2VkID0gIWV0aGVyX2FkZHJfZXF1YWwocnR3dmlmLVx1MDAzZWJzc2lkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY29uZi1cdTAwM2Vic3NpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNiBic3NpZF9jaGFuZ2VkKSB7XG4mIzQzO1x0XHRcdHJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9oMmNfc2VudCA9IGZhbHNlO1xuJiM0MztcdFx0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4gXHRcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXHUwMDNlYnNzaWQsIGNvbmYtXHUwMDNlYnNzaWQpO1xuIFx0XHRjb25maWcgfD0gUE9SVF9TRVRfQlNTSUQ7XG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXHUwMDI2XHUwMDI2IGJzc2lkX2NsZWFyZWQpIHtcbiYjNDM7XHRcdFx0cnR3dmlmLVx1MDAzZWFpZCA9IDA7XG4mIzQzO1x0XHRcdHJ0d3ZpZi1cdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTk9fTElOSztcbiYjNDM7XHRcdFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFIHwgUE9SVF9TRVRfQUlEO1xuJiM0MztcdFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIEJJVF9ESVNfVFNGX1VEVCB8IEJJVF9FTl9CQ05fRlVOQ1RJT04gfFxuJiM0MztcdFx0XHRcdCAgIEJJVF9ESVNfQVRJTSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmICghcnR3X2NvcmVfY2hlY2tfc3RhX2FjdGl2ZShydHdkZXYpKVxuIFx0XHRcdHJ0d19jbGVhcl9vcF9jaGFuKHJ0d2Rldik7XG4gXHRcdGVsc2VcbkBAIC00NDgsOCAmIzQzOzkzNywxNyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfTVVfR1JPVVBTKVxuIFx0XHRydHdfY2hpcF9zZXRfZ2lkX3RhYmxlKHJ0d2RldiwgdmlmLCBjb25mKTtcbiBcbi1cdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfU0xPVClcbiYjNDM7XHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4mIzQzO1x0XHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIGNvbmYtXHUwMDNldXNlX3Nob3J0X3ByZWFtYmxlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7XG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4mIzQzO1x0XHRcdHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHJ0d2RldiwgY29uZi1cdTAwM2V1c2Vfc2hvcnRfc2xvdCk7XG4gXHRcdHJ0d19jb25mX3R4KHJ0d2RldiwgcnR3dmlmKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfUFMpXG4gXHRcdHJ0d19yZWNhbGNfbHBzKHJ0d2RldiwgTlVMTCk7XG5AQCAtNjA5LDExICYjNDM7MTEwNywxOSBAQCBzdGF0aWMgaW50IHJ0d19vcHNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsXG4gXHRcdGtleS1cdTAwM2Vod19rZXlfaWR4ID0gaHdfa2V5X2lkeDtcbiBcdFx0cnR3X3NlY193cml0ZV9jYW0ocnR3ZGV2LCBzZWMsIHN0YSwga2V5LFxuIFx0XHRcdFx0ICBod19rZXlfdHlwZSwgaHdfa2V5X2lkeCk7XG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiB2aWYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSlcbiYjNDM7XHRcdFx0cnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2gocnR3ZGV2LCB0cnVlKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIERJU0FCTEVfS0VZOlxuIFx0XHRydHdfaGNpX2ZsdXNoX2FsbF9xdWV1ZXMocnR3ZGV2LCBmYWxzZSk7XG4gXHRcdHJ0d19tYWNfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTtcbiBcdFx0cnR3X3NlY19jbGVhcl9jYW0ocnR3ZGV2LCBzZWMsIGtleS1cdTAwM2Vod19rZXlfaWR4KTtcbiYjNDM7XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHZpZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoa2V5LVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKVxuJiM0MztcdFx0XHRydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIGZhbHNlKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG5AQCAtNzAzLDggJiM0MzsxMjA5LDIzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfbWdkX3ByZXBhcmVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4gXHRydHdfbGVhdmVfbHBzX2RlZXAocnR3ZGV2KTtcbi1cdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuLVx0cnR3X2NoaXBfcHJlcGFyZV90eChydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHQvKiBXYWtlIGZyb20gc29mdCBJUFMgYW5kIHJ1biB0aGUgdmVuZG9yIGpvaW4gc2VxdWVuY2UuIFRoZSBSRktcbiYjNDM7XHRcdCAqIGlzIGhhbmRsZWQgYnkgdGhlIG9uY2Utb25seSBwb3dlci1vbiBJUUsgcGx1cyB0aGUgcHMuY1xuJiM0MztcdFx0ICogcG9zdC1JUFMgUkYtYnVzIHJlY292ZXJ5LCBub3QgYSBmcmVzaCBjYWxpYnJhdGlvbiBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocnR3X2xlYXZlX2lwcyhydHdkZXYpKSB7XG4mIzQzO1x0XHRcdHJ0d19lcnIocnR3ZGV2LCBcJiMzNDtmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0ZSBmb3IgbWdkIHR4XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTtcbiYjNDM7XHRcdHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9hdXRoX2pvaW4ocnR3ZGV2LCB2aWYsIGluZm8pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTtcbiYjNDM7XHRcdHJ0d19jaGlwX3ByZXBhcmVfdHgocnR3ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO291dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZydHdkZXYtXHUwMDNlbXV0ZXgpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXG5pbmRleCBjZDkyNTQzNzBmY2M3Mi4uMTYyMjhjYWUyNTJlYmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmNcbkBAIC0yMTc0LDExICYjNDM7MjE3NCwxMyBAQCBpbnQgcnR3X2NvcmVfaW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnR3ZGV2LVx1MDAzZXR4cV9sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ0d2Rldi1cdTAwM2V0eF9yZXBvcnQucV9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jLmxvY2spO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlaGFsLnR4X3Bvd2VyX211dGV4KTtcbiBcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cnR3ZGV2LVx1MDAzZWNvZXgud2FpdCk7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jLndhaXQpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnJ0d2Rldi1cdTAwM2VscHNfbGVhdmVfY2hlY2spO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnJ0d2Rldi1cdTAwM2Vmd19zY2FuX2RlbnNpdHkpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbmluZGV4IDljMGI3NDY1NDBiMGVlLi45OWI5OWFhM2Q2MDBmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICYjNDM7MTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcbiBcdFJUV19DSElQX1RZUEVfODcyM0QsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFDLFxuIFx0UlRXX0NISVBfVFlQRV84NzAzQixcbiYjNDM7XHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQSxcbiBcdFJUV19DSElQX1RZUEVfODgxMkEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTRBLFxuQEAgLTgyOCw2ICYjNDM7ODI5LDggQEAgc3RydWN0IHJ0d192aWYge1xuIFx0dTggYnNzaWRbRVRIX0FMRU5dO1xuIFx0dTggcG9ydDtcbiBcdHU4IGJjbl9jdHJsO1xuJiM0MztcdGJvb2wgcHJlX2F1dGhfaDJjX3NlbnQ7XG4mIzQzO1x0Ym9vbCBwcmVfYXV0aF9qb2luX2RvbmU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJzdmRfcGFnZV9saXN0O1xuIFx0c3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgdHhfcGFyYW1zW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdGNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7XG5AQCAtMjA1Niw2ICYjNDM7MjA1OSwyMCBAQCBzdHJ1Y3QgcnR3X2h3X3NjYW5faW5mbyB7XG4gXHR1OCBvcF9idztcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTeW5jaHJvbmlzZXMgdGhlIHByZS1hdXRoIHdhaXQgb24gYSBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZnJvbSB0aGVcbiYjNDM7ICogdGFyZ2V0IEJTU0lEIGJlZm9yZSB0aGUgam9pbiBzZXF1ZW5jZSBjb250aW51ZXMuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcnR3X2F1dGhfc3luYyB7XG4mIzQzO1x0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbiYjNDM7XHQvKiBQcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93LiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiYjNDM7XHR1OCBic3NpZFtFVEhfQUxFTl07XG4mIzQzO1x0Ym9vbCBhY3RpdmU7XG4mIzQzO1x0Ym9vbCBzZWVuO1xuJiM0MztcdHUzMiBzZWVuX2NvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcnR3X2RldiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbkBAIC0yMTMyLDYgJiM0MzsyMTQ5LDggQEAgc3RydWN0IHJ0d19kZXYge1xuIFx0c3RydWN0IGNvbXBsZXRpb24gZndfc2Nhbl9kZW5zaXR5O1xuIFx0Ym9vbCBhcF9hY3RpdmU7XG4gXG4mIzQzO1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgYXV0aF9zeW5jO1xuJiM0MztcbiBcdGJvb2wgbGVkX3JlZ2lzdGVyZWQ7XG4gXHRjaGFyIGxlZF9uYW1lWzMyXTtcbiBcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7XG5AQCAtMjE5Myw2ICYjNDM7MjIxMiwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuQEAgLTIyODMsNCAmIzQzOzIzMDgsOCBAQCBib29sIHJ0d19jb3JlX2NoZWNrX3N0YV9hY3RpdmUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XG4gdm9pZCBydHdfY29yZV9lbmFibGVfYmVhY29uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW5hYmxlKTtcbiB2b2lkIHJ0d19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4gXHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZik7XG4mIzQzO3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbixcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbmluZGV4IDA4ZTk0OTQ5NzdlMDZhLi5iNmQ0ZThlZDk4Yzc1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbkBAIC00NzksNiAmIzQzOzQ3OSw3IEBAXG4gI2RlZmluZSBCSVRfRElTX1RTRl9VRFRcdFx0QklUKDQpXG4gI2RlZmluZSBCSVRfRU5fQkNOX0ZVTkNUSU9OXHRCSVQoMylcbiAjZGVmaW5lIEJJVF9FTl9UWEJDTl9SUFRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEJJVF9ESVNfQVRJTVx0XHRCSVQoMClcbiAjZGVmaW5lIFJFR19CQ05fQ1RSTF9DTElOVDBcdDB4MDU1MVxuICNkZWZpbmUgUkVHX0RSVkVSTFlJTlRcdFx0MHgwNTU4XG4gI2RlZmluZSBSRUdfQkNORE1BVElNXHRcdDB4MDU1OVxuQEAgLTUxOCw2ICYjNDM7NTE5LDcgQEBcbiAjZGVmaW5lIEJJVF9VQ19NRF9FTlx0XHRCSVQoMTYpXG4gI2RlZmluZSBCSVRfUlhTS19QRVJQS1RcdFx0QklUKDE1KVxuICNkZWZpbmUgQklUX0hUQ19MT0NfQ1RSTFx0QklUKDE0KVxuJiM0MzsjZGVmaW5lIEJJVF9BTUZcdFx0XHRCSVQoMTMpXG4gI2RlZmluZSBCSVRfUlBGTV9DQU1fRU5BQkxFXHRCSVQoMTIpXG4gI2RlZmluZSBCSVRfVEFfQkNOXHRcdEJJVCgxMSlcbiAjZGVmaW5lIEJJVF9SQ1JfQURGXHRcdEJJVCgxMSlcbkBAIC02MjgsNiAmIzQzOzYzMCw3IEBAXG4gI2RlZmluZSBSRUdfUFNEXHRcdFx0MHgwOTEwXG4gI2RlZmluZSBCSVRfUFNEX0lOSVx0XHRHRU5NQVNLKDIzLCAyMilcbiAjZGVmaW5lIFJFR19TSU5HTEVfVE9ORV9DT05UX1RYXHQweDA5MTRcbiYjNDM7I2RlZmluZSBSRUdfQkJfU0VMX0JUR184NzIzQlx0MHgwOTQ4XG4gI2RlZmluZSBSRUdfQUdDX1RBQkxFXHRcdDB4MDk1OFxuICNkZWZpbmUgUkVHX1JGRV9DVFJMX0VcdFx0MHgwOTc0XG4gI2RlZmluZSBSRUdfMk5EX0NDQV9DVFJMXHQweDA5NzZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmU5Li41MzAzOTc1ZDAwYTJhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LyogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuJiM0MztcdCAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LlxuIFx0ICovXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiBcdTAwMjZcdTAwMjYgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4mIzQzO1x0aWYgKChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8XG4mIzQzO1x0ICAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiBcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXCYjMzQ7emVybyBsZW5ndGggcGFja2V0XCYjMzQ7KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwOC4uYjI5NGJjYzRkODI4MDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbkBAIC0yMCw2ICYjNDM7MjAsMTYgQEBcbiAjaW5jbHVkZSBcJiMzNDt0eC5oXCYjMzQ7XG4gXG4gI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTXHRcdFx0NTBcbiYjNDM7I2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuJiM0MztcbiYjNDM7LyogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbiYjNDM7ICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZVxuJiM0MzsgKiBUWCBkcmFpbiBwYXRoIG9uY2UgaXQgZmFsbHMgYmFjayB0byB0aGUgbG93IG9uZS4gQm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5XG4mIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVJcdFx0XHQxNlxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoMSlcbiBcbiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcilcbiB7XG5AQCAtNTQ4LDEyICYjNDM7NTU4LDkxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0X2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xuJiM0MztcdHUzMiBmcmVlX3R4cGc7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC0gcGdfdGJsLVx1MDAzZWxxX251bSAtXG4mIzQzO1x0XHQgICBwZ190YmwtXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVx1MDAzZWV4cV9udW0gLSBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4mIzQzO1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZykge1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgZnJlZV90eHBnIFx1MDAyNiAweGZmKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmcmVlX3R4cGcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIGZyZWVfdHhwZyBcdTAwMjYgMHhmZik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmYpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweGZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHF1ZXVlKSB7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0gyQzpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WTzpcbiYjNDM7XHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCk7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4mIzQzO1x0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCk7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4mIzQzO1x0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdyk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRcdGludCBkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZWRpY2F0ZWQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBkZWRpY2F0ZWQ7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gZGVkaWNhdGVkICYjNDM7IGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0aWYgKHBhZ2VzX25lZWRlZCBcdTAwM2M9IHBhZ2VzX2ZyZWUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdFx0cGFnZXNfZnJlZSA9IGRlZGljYXRlZCAmIzQzOyBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDQ0ICYjNDM7NzIxLDEzMSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBpO1xuJiM0MztcdHU4IGZyZWU7XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XHRpbnQgZnJlZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChxdWV1ZSkge1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuJiM0MztcdFx0ZGVkaWNhdGVkID0gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuJiM0MztcdFx0ZGVkaWNhdGVkID0gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XG4mIzQzO1x0aWYgKHBhZ2VzIFx1MDAzYz0gZnJlZSkge1xuJiM0MztcdFx0YXRvbWljX3N1YihwYWdlcywgZGVkaWNhdGVkKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0YXRvbWljX3NldChkZWRpY2F0ZWQsIDApO1xuJiM0MztcdFx0YXRvbWljX3N1YihwYWdlcyAtIGZyZWUsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZXM7XG4gXHRib29sIGJ1c19jbGFpbTtcbiBcdHNpemVfdCB0eHNpemU7XG4mIzQzO1x0c2l6ZV90IHdyaXRlX3NpemU7XG4gXHR1MzIgdHhhZGRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLVx1MDAzZWxlbiwgcXVldWUpO1xuLVx0aWYgKCF0eGFkZHIpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTtcbiYjNDM7XHRcdHdyaXRlX3NpemUgPSB0eHNpemUgXHUwMDNlIFJUV19TRElPX0JMT0NLX1NJWkUgP1xuJiM0MztcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgb3JpZ19sZW4pO1xuJiM0MztcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XG4gXG4tXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0aWYgKHNrYl90YWlscm9vbShza2IpIFx1MDAzYyBwYWRkaW5nKSB7XG4mIzQzO1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuJiM0MztcdGlmICghdHhhZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XHR9XG4gXG4gXHRyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdHJldCA9IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtHb3QgdW5hbGlnbmVkIFNLQiBpbiAlcygpIGZvciBxdWV1ZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbiYjNDM7XHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgd3JpdGVfc2l6ZSk7XG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4gXG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJ0bDg3MjNicykge1xuJiM0MztcdFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4mIzQzO1x0fVxuIFx0aWYgKHJldClcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwmIzM0Oyxcbi1cdFx0XHQgdHhzaXplLCB0eGFkZHIpO1xuJiM0MztcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbiBcbiYjNDM7b3V0X3RyaW06XG4mIzQzO1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKVxuJiM0MztcdFx0c2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NzcsNyAmIzQzOzg1MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XG4mIzQzO1x0XHRcdFx0ICAgICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTY4NSw2ICYjNDM7ODY1LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHR1OCBzaXplLCB0aW1lb3V0O1xuIFxuIFx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuJiM0MztcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcbkBAIC03MTIsNiAmIzQzOzg5Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHQgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpO1xuIFxuIFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgMyBcdTAwM2NcdTAwM2MgMik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSAmIzQzOzkzMiw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi1cdTAwM2VjaGlwO1xuJiM0MztcdHN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWZpZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4mIzQzO1x0dTMyIGZyZWVfdHhwZztcbiYjNDM7XHR1MTYgcHVicV9udW07XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcGdfdGJsLVx1MDAzZWhxX251bSAmIzQzOyBwZ190YmwtXHUwMDNlbHFfbnVtICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgIHBnX3RibC1cdTAwM2VucV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZWV4cV9udW0gJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgcGdfdGJsLVx1MDAzZWdhcHFfbnVtKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHBnX3RibC1cdTAwM2VocV9udW0gLSBwZ190YmwtXHUwMDNlbHFfbnVtIC1cbiYjNDM7XHRcdCAgIHBnX3RibC1cdTAwM2VucV9udW0gLSBwZ190YmwtXHUwMDNlZXhxX251bSAtIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbiYjNDM7XHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuJiM0MztcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiYjNDM7XHR1MzIgY2xlYXI7XG4mIzQzO1xuJiM0MztcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1x0cnR3X3NkaW9faW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjZcbiYjNDM7XHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcdFx0aWYgKGNsZWFyKVxuJiM0MztcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODE1LDcgJiM0MzsxMDM5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRxdWV1ZV93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4mIzQzO1x0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXG5AQCAtODMxLDYgJiM0MzsxMDU1LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xuIH1cbiBcbkBAIC05MzcsNiAmIzQzOzExNjMsMTggQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4mIzQzO1x0LyogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4mIzQzO1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzO1x0ICogaGFuZGluZyB1cyBmcmFtZXMsIGJvdW5kaW5nIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBSZXN1bWVkIGZyb20gdGhlIFRYXG4mIzQzO1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTY1LDYgJiM0MzsxMjAzLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3J4X3NrYihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cnR3X3VwZGF0ZV9yeF9mcmVxX2Zvcl9pbnZhbGlkKHJ0d2Rldiwgc2tiLCByeF9zdGF0dXMsIHBrdF9zdGF0KTtcbiBcdHJ0d19yeF9zdGF0cyhydHdkZXYsIHBrdF9zdGF0LVx1MDAzZXZpZiwgc2tiKTtcbiBcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpXG4mIzQzO1x0XHRydHc4NzIzYnNfYXV0aF9zeW5jX3J4KHJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHNrYi1cdTAwM2VsZW4sIHBrdF9zdGF0LCByeF9zdGF0dXMpO1xuJiM0MztcbiBcdGllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0d2Rldi1cdTAwM2Vodywgc2tiKTtcbiB9XG4gXG5AQCAtMTA5NSw2ICYjNDM7MTMzOCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4mIzQzO1x0LyogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4mIzQzO1x0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxuJiM0MztcdCAqIGJvdGggZGVmaW5lZCBhbmQgdW5tYXNrZWQuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0aGlzciBcdTAwMjY9IHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgXHUwMDI2IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcbiYjNDM7XG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDMyICYjNDM7MTQ4MSw0OCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuLVx0XHRcdFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLFxuJiM0MztcdFx0XHRcdCAgICAgYm9vbCAqcHJvY2Vzc2VkKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHQqcHJvY2Vzc2VkID0gZmFsc2U7XG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0KnByb2Nlc3NlZCA9IHRydWU7XG4mIzQzO1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNjPSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcbiYjNDM7XHRcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9XG4tXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTtcbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4mIzQzO1x0XHRcdCAgICAgd29yayk7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuJiM0MztcdGJvb2wgcHJvY2Vzc2VkO1xuIFx0aW50IGxpbWl0LCBxdWV1ZTtcbiBcbiBcdHJ0d2RldiA9IHdvcmtfZGF0YS1cdTAwM2VydHdkZXY7XG5AQCAtMTI2Nyw3ICYjNDM7MTUzMywyNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIFx1MDAyNnByb2Nlc3NlZCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiByZXQgPT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdFx0XHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcbiYjNDM7XHRcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVCBcdTAwMjZcdTAwMjYgcHJvY2Vzc2VkKSB7XG4mIzQzO1x0XHRcdFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgJiM0MzsxNTc3LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW2ldKTtcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xuJiM0MztcdH1cbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcdGlmICghcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpXG4gXHRcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XG4gXG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2VydHdkZXYgPSBydHdkZXY7XG4tXHRJTklUX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMzE1LDYgJiM0MzsxNjAwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVx1MDAzZXR4d3EpO1xuIFx0a2ZyZWUocnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbmluZGV4IDQ1N2U4YjAyMzgwZTViLi5mMWY1OWY4MzAxYjhmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gXG4gLyogU0RJTyBUeCBDb250cm9sICovXG4gI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMClcbiYjNDM7I2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMilcbkBAIC03Nyw2ICYjNDM7NzgsMTQgQEBcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcdFx0QklUKDI5KVxuJiM0MzsjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuJiM0MztcdChSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVClcbiBcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTVx0XHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxOSlcbkBAIC0xNDMsNyAmIzQzOzE1Miw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2RldjtcbiB9O1xuIFxuQEAgLTE1OSw2ICYjNDM7MTY4LDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4mIzQzO1xuJiM0MztcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2xvdztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcbiYjNDM7XHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbmluZGV4IGVmY2Y0NTQzMzk5OWFmLi43M2YyYWY2NmVmZmU4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNkZWZpbmUgUlRXX1NFQ19SWF9ERUNfRU5cdFx0QklUKDMpXG4gI2RlZmluZSBSVFdfU0VDX1RYX0JDX1VTRV9ES1x0XHRCSVQoNilcbiAjZGVmaW5lIFJUV19TRUNfUlhfQkNfVVNFX0RLXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIFJUV19TRUNfQ0hLX0tFWUlEXHRcdEJJVCg4KVxuIFxuICNkZWZpbmUgUlRXX1NFQ19FTkdJTkVfRU5cdFx0QklUKDkpXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBXaUZpL0JsdWV0b290aCBjb2V4aXN0ZW5jZSBhbmQgbW9kaWZpZXMgU0RJTy1zcGVjaWZpYyBUWC9SWCBoYW5kbGluZy4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGNvbmZpbmVkIHRvIHRoZSBTRElPIGludGVyZmFjZSAoc2Rpby5jKSBvciBleHBsaWNpdGx5IGd1YXJkZWQgYnkgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIHdoaWNoIGNoZWNrcyBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHVzZWQgYnkgc3l6a2FsbGVyIGRvIG5vdCBlbXVsYXRlIHBoeXNpY2FsIFNESU8gV2lGaSBjYXJkcywgdGhpcyBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUwODliN2Q1OWFiOWQ5M2VhNTFhNzE0MmYyZTQ5MWUwYzBjZjUxNmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmMKaW5kZXggMzdjMzM2ZGVmNDE5MTUuLjMxNGIyYTM2OGE4ZjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYwpAQCAtMTQ0Myw2ICYjNDM7MTQ0MywxOTEgQEAgc3RhdGljIHZvaWQgcnR3X2NvZXhfc2V0X2FudF9wYXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UsIHU4IHBoYXNlKQogI2RlZmluZSBjYXNlX0FMR08oc3JjKSBcCiAJY2FzZSBDT0VYX0FMR09fIyNzcmM6IHJldHVybiAjc3JjCiAKJiM0MzsvKiA4NzIzQlMgU0RJTyBXaUZpL0JUIGNvZXhpc3RlbmNlIGFudGVubmEgaGFuZGxpbmcuIE9uIEJULWRpc2FibGVkIGJvYXJkcyB0aGUKJiM0MzsgKiBzY2FuL2F1dGggd2luZG93IHN0aWxsIHJvdXRlcyB0aHJvdWdoIHRoZSBQVEEgbXV4OyB0aGVzZSBoZWxwZXJzIGZvcmNlIHRoZQomIzQzOyAqIHZlbmRvci1zaGFwZWQgV2lGaS1vd25lZCBhbnRlbm5hIHBhdGggc28gZGlyZWN0ZWQgbWFuYWdlbWVudCBUWCByZWFjaGVzIGFpci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQlRfQ09FWF9DVFJMCQkweDAwMzkKJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0NGRwkJMHgwOTMwCiYjNDM7I2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkcxCQkweDA5NDQKJiM0MzsjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0JVRgkJMHgwOTc0CiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFCTB4MTgwMDEwMWIKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYW50X2lzX2F1eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKHJ0d2Rldi0mZ3Q7ZWZ1c2UuYnRfc2V0dGluZyAmYW1wOyBCSVQoNikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBydHdkZXYtJmd0O2NvZXguc3RhdC5idF9kaXNhYmxlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcHRhX2FudF9wYXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnR3X2NvZXhfODcyM2JzX2FudF9pc19hdXgocnR3ZGV2KSA/IDB4ODAgOiAweDIwMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogV3JpdGUgQkJfU0VMX0JURywgcmV0cnlpbmcgb25jZSB3aXRoIFNZU19GVU5DIEJCIHJlc2V0IGlmIHRoZSBmaXJzdAomIzQzOyAqIHdyaXRlIGRvZXMgbm90IHN0aWNrIChSRi9CQiBjbG9jayBtYXkgaGF2ZSBiZWVuIGdhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXU4IHN5c19mdW5jX2JlZm9yZTsKJiM0MzsJdTMyIHJlYWRiYWNrOwomIzQzOwomIzQzOwlzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pOwomIzQzOwlpZiAoKHN5c19mdW5jX2JlZm9yZSAmYW1wOyAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHsKJiM0MzsJCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpOwomIzQzOwkJdXNsZWVwX3JhbmdlKDEwLCAxMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQiwgdmFsdWUpOwomIzQzOwlyZWFkYmFjayA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQik7CiYjNDM7CWlmIChyZWFkYmFjayA9PSB2YWx1ZSkKJiM0MzsJCXJldHVybiByZWFkYmFjazsKJiM0MzsKJiM0MzsJdXNsZWVwX3JhbmdlKDEwLCAxMSk7CiYjNDM7CXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX0JCX1NFTF9CVEdfODcyM0IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnR3X2NvZXhfODcyM2JzX3dyaXRlX2JiX3NlbF9idGcocnR3ZGV2LAomIzQzOwkJCQkJCXJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGhpZ2gpCiYjNDM7ewomIzQzOwlpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoaGlnaCkgewomIzQzOwkJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQlRfQ09FWF9UQUJMRV9ILAomIzQzOwkJCSAgICBSVFc4NzIzQlNfQ09FWF9IX1dMQU5fQUNUSVZFKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfVFhfQ0NLLCBmYWxzZSk7CiYjNDM7CQlydHdfY29leF9zZXRfd2xfcHJpX21hc2socnR3ZGV2LCBDT0VYX1dMUFJJX1JYX0NDSywgZmFsc2UpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgIGJvb2wga2VlcF9wdGFfb3duZXIpCiYjNDM7ewomIzQzOwl1MzIgYmVmb3JlLCBhZnRlcjsKJiM0MzsKJiM0MzsJYmVmb3JlID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19QQURfQ1RSTDEpOwomIzQzOwlhZnRlciA9IGJlZm9yZSAmYW1wOyB+KEJJVF9MTkFPTl9XTEJUX1NFTCB8IEJJVF9TV19EUERUX1NFTF9EQVRBKTsKJiM0MzsJaWYgKGtlZXBfcHRhX293bmVyKQomIzQzOwkJYWZ0ZXIgfD0gQklUX1BBUEVfV0xCVF9TRUw7CiYjNDM7CWVsc2UKJiM0MzsJCWFmdGVyICZhbXA7PSB+QklUX1BBUEVfV0xCVF9TRUw7CiYjNDM7CWlmIChhZnRlciAhPSBiZWZvcmUpCiYjNDM7CQlydHdfd3JpdGUzMihydHdkZXYsIFJFR19QQURfQ1RSTDEsIGFmdGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3coc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CWlmICghcnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChydHdfcmVhZDgocnR3ZGV2LCBSRUdfR05UX0JUKSA9PSAweDAwICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19CVF9DT0VYX0VOSF9JTlRSX0NUUkwpID09IDB4MGMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJ0d19md19zZXRfZ250X2J0KHJ0d2RldiwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwl1MzIgYW50X3RhcmdldDsKJiM0MzsKJiM0MzsJaWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYW50X3RhcmdldCA9IHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KTsKJiM0MzsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTsKJiM0MzsJcnR3X2NvZXhfc2V0X2FudF9zd2l0Y2gocnR3ZGV2LCBDT0VYX1NXSVRDSF9DVFJMX0JZX1BUQSwKJiM0MzsJCQkJQ09FWF9TV0lUQ0hfVE9fTk9DQVJFKTsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7CiYjNDM7CXJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHJ0d2RldiwgYW50X3RhcmdldCk7CiYjNDM7CXJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHJ0d2RldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwl1OCBzeXNfZnVuY19iZWZvcmU7CiYjNDM7CiYjNDM7CXN5c19mdW5jX2JlZm9yZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TWVNfRlVOQ19FTik7CiYjNDM7CWlmICgoc3lzX2Z1bmNfYmVmb3JlICZhbXA7IChCSVQoMCkgfCBCSVQoMSkpKSAhPSAoQklUKDApIHwgQklUKDEpKSkgewomIzQzOwkJcnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAsIDExKTsKJiM0MzsJfQomIzQzOwomIzQzOwlydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfODcyM0JTX0JUX0NPRVhfQ1RSTCwgQklUKDMpLCAweDEpOwomIzQzOwlydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQlVGLCAweGZmKTsKJiM0MzsJcnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMSwgMHgzLCAweDMpOwomIzQzOwlydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHLCAweDc3KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJ0d2Rldi0mZ3Q7Y29leC5kbS5jdXJfdGFibGUgPSAyOwomIzQzOwlydHdfY29leF9zZXRfdGFibGUocnR3ZGV2LCB0cnVlLCAweDVhNWE1YTVhLCAweDVhNWE1YTVhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm9uLWNvbm5lY3RlZCBzY2FuL2F1dGggd29ya2Fyb3VuZDogUFMtVERNQSB0eXBlIDggb2ZmLCBQVEEgYW50ZW5uYSBwYXRoLAomIzQzOyAqIGNvZXggdGFibGUgdHlwZSAyIChtYXRjaGVzIHRoZSB2ZW5kb3Igbm9uLWNvbm5lY3RlZCBhcmJpdHJhdGlvbikuCiYjNDM7ICovCiYjNDM7dm9pZCBydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2NvZXhfZG0gKmNvZXhfZG0gPSAmYW1wO3J0d2Rldi0mZ3Q7Y29leC5kbTsKJiM0MzsJc3RydWN0IHJ0d19jb2V4X3N0YXQgKmNvZXhfc3RhdCA9ICZhbXA7cnR3ZGV2LSZndDtjb2V4LnN0YXQ7CiYjNDM7CiYjNDM7CWlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljb2V4X2RtLSZndDtjdXJfcHNfdGRtYV9vbiA9IGZhbHNlOwomIzQzOwljb2V4X2RtLSZndDtjdXJfcHNfdGRtYSA9IDg7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVswXSA9IDB4MDg7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVsxXSA9IDB4MDA7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVsyXSA9IDB4MDA7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVszXSA9IDB4MDA7CiYjNDM7CWNvZXhfZG0tJmd0O3BzX3RkbWFfcGFyYVs0XSA9IDB4MDA7CiYjNDM7CiYjNDM7CXJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwomIzQzOwlydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhydHdkZXYpOwomIzQzOwlydHdfY29leF9zZXRfYW50X3BhdGgocnR3ZGV2LCB0cnVlLCBDT0VYX1NFVF9BTlRfMkcpOwomIzQzOwlydHdfY29leF84NzIzYnNfcmVhc3NlcnRfYW50X2J1ZmZlcihydHdkZXYpOwomIzQzOwlydHdfY29leF84NzIzYnNfYXBwbHlfc2Nhbl90YWJsZShydHdkZXYpOwomIzQzOwlpZiAoY29leF9zdGF0LSZndDtidF9kaXNhYmxlZCkKJiM0MzsJCXJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShydHdkZXYsIHRydWUpOwomIzQzOwlydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChydHdkZXYpOwomIzQzOwlydHdfY29leF84NzIzYnNfcmVzdG9yZV9wYWRfY3RybChydHdkZXYsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXBsYXllZCBpbW1lZGlhdGVseSBiZWZvcmUgc3RhcnRfY2xudF9qb2luKCkvYXV0aDogQlRfSU5GTyAmIzQzOyBQUy1URE1BIHR5cGUgOAomIzQzOyAqIHRoZW4gdGhlIGZvcmNlZCBXaUZpIFBUQSBhbnRlbm5hIHBhdGgsIHNvIHRoZSBhdXRoIHdpbmRvdyBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtydHdkZXYtJmd0O211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnR3X2Z3X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTsKJiM0MzsJcnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7CiYjNDM7CXJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwomIzQzOwlydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTsKJiM0MzsJcnR3X2NvZXhfODcyM2JzX2ZvcmNlX2Fzc29jX3B0YV9hbnQocnR3ZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3QgY2hhciAqcnR3X2NvZXhfZ2V0X2FsZ29fc3RyaW5nKHU4IGFsZ28pCiB7CiAJc3dpdGNoIChhbGdvKSB7CkBAIC0yNzcwLDcgJiM0MzsyOTU1LDcgQEAgdm9pZCBydHdfY29leF9wb3dlcl9vbl9zZXR0aW5nKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJY29leC0mZ3Q7c3RvcF9kbSA9IHRydWU7CiAJY29leC0mZ3Q7d2xfcmZfb2ZmID0gZmFsc2U7CiAKLQkvKiBlbmFibGUgQkIsIHdlIGNhbiB3cml0ZSAweDk0OCAqLwomIzQzOwkvKiBlbmFibGUgQkIsIHNvIEJCX1NFTF9CVEcgaXMgd3JpdGFibGUgKi8KIAlydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19TWVNfRlVOQ19FTiwKIAkJICAgICAgIEJJVF9GRU5fQkJfR0xCX1JTVCB8IEJJVF9GRU5fQkJfUlNUQik7CiAKQEAgLTI4NzcsNiAmIzQzOzMwNjIsMzMgQEAgdm9pZCBydHdfY29leF9zY2FuX25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKQogCWNvZXgtJmd0O2ZyZWV6ZSA9IGZhbHNlOwogCXJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTsKIAomIzQzOwkvKiA4NzIzQlMgU0RJTyBCVC1kaXNhYmxlZDoga2VlcCB0aGUgc2Nhbi9hdXRoIFBUQSBhbnRlbm5hIHN0YXRlIHRoZQomIzQzOwkgKiB2ZW5kb3IgdXNlcyBhbmQgc2tpcCB0aGUgZ2VuZXJpYyBjb2V4IHJ1bi4gQXQgc2NhbiBzdGFydCAoZmlybXdhcmUKJiM0MzsJICogaGFzIGJlZW4gdXAgbG9uZyBlbm91Z2ggZm9yIHN0YWJsZSBSWCBETUEpIHJlcGxheSB0aGUgdmVuZG9yIEJUX01QIC8KJiM0MzsJICogQlRfSU5GTyBxdWVyaWVzLCB0aGVuIHJlLWVzdGFibGlzaCB0aGUgc2Nhbi1wYXRoIFBUQSBzZXR1cC4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkgewomIzQzOwkJaWYgKHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUXzJHIHx8IHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUKSB7CiYjNDM7CQkJc3RydWN0IHJ0d19jb2V4X2luZm9fcmVxIHJlcSA9IHt9OwomIzQzOwomIzQzOwkJCWNvZXhfc3RhdC0mZ3Q7Y250X3dsW0NPRVhfQ05UX1dMX1NDQU5BUF0gPSAwOwomIzQzOwkJCWNvZXhfc3RhdC0mZ3Q7d2xfaGlfcHJpX3Rhc2syID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCQlyZXEuc2VxID0gMHgwZTsKJiM0MzsJCQlyZXEub3BfY29kZSA9IEJUX01QX0lORk9fT1BfU1VQUF9WRVI7CiYjNDM7CQkJcnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCAmYW1wO3JlcSk7CiYjNDM7CQkJcmVxLnNlcSA9IDB4MGY7CiYjNDM7CQkJcmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1BBVENIX1ZFUjsKJiM0MzsJCQlydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsICZhbXA7cmVxKTsKJiM0MzsJCQlydHdfZndfcXVlcnlfYnRfaW5mbyhydHdkZXYpOwomIzQzOwomIzQzOwkJCXJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQocnR3ZGV2KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY29leF9zdGF0LSZndDt3bF9oaV9wcmlfdGFzazIgPSBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICh0eXBlID09IENPRVhfU0NBTl9TVEFSVF81RykgewogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19DT0VYLAogCQkJJiMzNDtbQlRDb2V4XSwgU0NBTiBTVEFSVCBub3RpZnkgKDVHKVxuJiMzNDspOwpAQCAtMjkzOCw2ICYjNDM7MzE1MCwxNyBAQCB2b2lkIHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpCiAJaWYgKGNvZXgtJmd0O21hbnVhbF9jb250cm9sIHx8IGNvZXgtJmd0O3N0b3BfZG0pCiAJCXJldHVybjsKIAomIzQzOwkvKiA4NzIzQlMgU0RJTyBCVC1kaXNhYmxlZDogdGhlIHZlbmRvciBDb25uZWN0Tm90aWZ5KCkgZWFybHktcmV0dXJucwomIzQzOwkgKiB3aXRob3V0IHNlbmRpbmcgSDJDczsgc2Nhbl93b3JrYXJvdW5kIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhlIFBUQQomIzQzOwkgKiBwYXRoIC8gY29leCB0YWJsZSAvIFBTLVRETUEuIEtlZXAgb25seSB0aGUgcmVnaXN0ZXItbGV2ZWwgUFRBCiYjNDM7CSAqIHJlYXNzZXJ0aW9uIGF0IGFzc29jaWF0ZS1zdGFydC4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkgewomIzQzOwkJaWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpCiYjNDM7CQkJcnR3X2NvZXhfODcyM2JzX2ZvcmNlX2Fzc29jX3B0YV9hbnQocnR3ZGV2KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXJ0d19jb2V4X3dyaXRlX3NjYmQocnR3ZGV2LCBDT0VYX1NDQkRfQUNUSVZFIHwgQ09FWF9TQ0JEX09OT0ZGLCB0cnVlKTsKIAogCWlmICh0eXBlID09IENPRVhfQVNTT0NJQVRFXzVHX1NUQVJUKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oCmluZGV4IGMzOThiZTgzOTFmN2IwLi5jNThhZTBhNTBiMzBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmgKQEAgLTQzMCw0ICYjNDM7NDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19jb2V4X2FjdGl2ZV9xdWVyeV9idF9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCXJ0d19jb2V4X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTsKIH0KIAomIzQzO3ZvaWQgcnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTsKJiM0Mzt2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYwppbmRleCA5NDVmZWRjZDM3NWI2Mi4uN2MxNzA4NmNhYzMyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMKQEAgLTc4Niw2ICYjNDM7Nzg2LDE3IEBAIHZvaWQgcnR3X2Z3X21lZGlhX3N0YXR1c19yZXBvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkLCBib29sIGNvbm5lY3QpCiAJcnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTsKIH0KIAomIzQzOy8qIDg3MjNCUyBTRElPOiBzZXQgdGhlIGZpcm13YXJlIEdOVF9CVCBzdGF0ZSAoMCA9IFdpRmkgb3ducyB0aGUgYW50ZW5uYSkuICovCiYjNDM7dm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXU4IGgyY19wa3RbSDJDX1BLVF9TSVpFXSA9IHswfTsKJiM0MzsKJiM0MzsJU0VUX0gyQ19DTURfSURfQ0xBU1MoaDJjX3BrdCwgSDJDX0NNRF9HTlRfQlQpOwomIzQzOwlTRVRfR05UX0JUX1NUQVRFKGgyY19wa3QsIHN0YXRlKTsKJiM0MzsKJiM0MzsJcnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJ0d19md191cGRhdGVfd2xfcGh5X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3RyYWZmaWNfc3RhdHMgKnN0YXRzID0gJmFtcDtydHdkZXYtJmd0O3N0YXRzOwpAQCAtMTQ2NiwxMCAmIzQzOzE0NzcsMTQgQEAgdm9pZCBydHdfYWRkX3JzdmRfcGFnZV9zdGEoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAlydHdfYWRkX3JzdmRfcGFnZShydHdkZXYsIHJ0d3ZpZiwgUlNWRF9MUFNfUEdfSU5GTywgdHJ1ZSk7CiB9CiAKJiM0MzsvKiBSRUdfRFdCQ04xX0NUUkwgYml0IDIwIChTV19CQ05fU0VMIGZvciBwb3J0IDApLCByZWxhdGl2ZSB0byBieXRlICYjNDM7MiAqLwomIzQzOyNkZWZpbmUgQklUX09GRlNFVF9EV0JDTjFfU1dfQkNOX1NFTF9QT1JUMAkoMjAgLSAxNikKJiM0MzsKIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsCiAJCQkJdTggKmJ1ZiwgdTMyIHNpemUpCiB7Ci0JdTggYmNrcFszXTsKJiM0MzsJY29uc3QgYm9vbCBpc184NzIzYnNfc2RpbyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTsKJiM0MzsJdTggYmNrcFs0XTsKIAl1OCB2YWw7CiAJdTE2IHJzdmRfcGdfaGVhZDsKIAl1MzIgYmNuX3ZhbGlkX2FkZHI7CkBAIC0xNDk5LDEzICYjNDM7MTUxNCwyOCBAQCBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLAogCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsCiAJCSAgIChiY2twWzJdICZhbXA7IH5CSVRfRU5fQkNOX0ZVTkNUSU9OKSB8IEJJVF9ESVNfVFNGX1VEVCk7CiAKLQlpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUpIHsKJiM0MzsJLyogQ2xlYXIgQklUX0VOX0JDTlFfREwgc28gdGhlIGNoaXAgZG9lcyBub3QgdHJlYXQgdGhlIHJlc2VydmVkLXBhZ2UKJiM0MzsJICogdXBsb2FkIGFzIGEgcmVhbCBiZWFjb247IG90aGVyd2lzZSBCSVRfQkNOX1ZBTElEIG5ldmVyIGFzc2VydHMuIFRoZQomIzQzOwkgKiB2ZW5kb3IgcnRsODcyM2JzIGRyaXZlciBkb2VzIHRoaXMgdW5jb25kaXRpb25hbGx5OyBydHc4OCBvbmx5IGRpZCBpdAomIzQzOwkgKiBmb3IgUENJZSwgd2hpY2ggbGVmdCA4NzIzQlMgU0RJTyYjMzk7cyBCQ05fVkFMSUQgaGFuZHNoYWtlIGZhaWxpbmcuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pIHsKIAkJdmFsID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgJiM0MzsgMik7CiAJCWJja3BbMV0gPSB2YWw7CiAJCXZhbCAmYW1wOz0gfihCSVRfRU5fQkNOUV9ETCAmZ3Q7Jmd0OyAxNik7CiAJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyLCB2YWwpOwogCX0KIAomIzQzOwkvKiA4NzIzQlMgU0RJTzogcG9pbnQgdGhlIFNXIGJlYWNvbiBkb3dubG9hZCBwYXRoIGF0IHBvcnQgMCwgZWxzZQomIzQzOwkgKiBCSVRfQkNOX1ZBTElEIGlzIG5ldmVyIGFzc2VydGVkIGFmdGVyIHRoZSBTRElPIHVwbG9hZCBjb21wbGV0ZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfODcyM2JzX3NkaW8pIHsKJiM0MzsJCXZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCAmIzQzOyAyKTsKJiM0MzsJCWJja3BbM10gPSB2YWw7CiYjNDM7CQl2YWwgJmFtcDs9IH5CSVQoQklUX09GRlNFVF9EV0JDTjFfU1dfQkNOX1NFTF9QT1JUMCk7CiYjNDM7CQlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0RXQkNOMV9DVFJMICYjNDM7IDIsIHZhbCk7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBydHdfaGNpX3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHJ0d2RldiwgYnVmLCBzaXplKTsKIAlpZiAocmV0KSB7CiAJCXJ0d19lcnIocnR3ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSBkYXRhIHRvIHJzdmQgcGFnZVxuJiMzNDspOwpAQCAtMTUyNiwxMSAmIzQzOzE1NTYsMTMgQEAgaW50IHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgcGdfYWRkciwKIAl9CiAKIHJlc3RvcmU6CiYjNDM7CWlmIChpc184NzIzYnNfc2RpbykKJiM0MzsJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgJiM0MzsgMiwgYmNrcFszXSk7CiAJcnN2ZF9wZ19oZWFkID0gcnR3ZGV2LSZndDtmaWZvLnJzdmRfYm91bmRhcnk7CiAJcnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfRklGT1BBR0VfQ1RSTF8yLAogCQkgICAgcnN2ZF9wZ19oZWFkIHwgQklUX0JDTl9WQUxJRF9WMSk7CiAJcnR3X3dyaXRlOChydHdkZXYsIFJFR19CQ05fQ1RSTCwgYmNrcFsyXSk7Ci0JaWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKQomIzQzOwlpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pCiAJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCAmIzQzOyAyLCBiY2twWzFdKTsKIAlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0NSICYjNDM7IDEsIGJja3BbMF0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmgKaW5kZXggNDhhZDljZWFiNmVhMTIuLmY1ZWQ2NWM0NjM1MGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oCkBAIC01NzIsNiAmIzQzOzU3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydHdfaDJjX3BrdF9zZXRfaGVhZGVyKHU4ICpoMmNfcGt0LCB1OCBzdWJfaWQpCiAjZGVmaW5lIEgyQ19DTURfUVVFUllfQlRfTVBfSU5GTwkweDY3CiAjZGVmaW5lIEgyQ19DTURfQlRfV0lGSV9DT05UUk9MCQkweDY5CiAjZGVmaW5lIEgyQ19DTURfV0lGSV9DQUxJQlJBVElPTgkweDZkCiYjNDM7I2RlZmluZSBIMkNfQ01EX0dOVF9CVAkJCTB4NmUKICNkZWZpbmUgSDJDX0NNRF9RVUVSWV9CVF9ISURfSU5GTwkweDczCiAKICNkZWZpbmUgSDJDX0NNRF9LRUVQX0FMSVZFCQkweDAzCkBAIC02ODQsNiAmIzQzOzY4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydHdfaDJjX3BrdF9zZXRfaGVhZGVyKHU4ICpoMmNfcGt0LCB1OCBzdWJfaWQpCiAJbGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgJiM0MzsgMHgwMSwgdmFsdWUsIEdFTk1BU0soMzEsIDI0KSkKICNkZWZpbmUgU0VUX1FVRVJZX0JUX0lORk8oaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJbGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgJiM0MzsgMHgwMCwgdmFsdWUsIEJJVCg4KSkKJiM0MzsjZGVmaW5lIFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAomIzQzOwlsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgQklUKDgpKQogI2RlZmluZSBTRVRfV0xfQ0hfSU5GT19MSU5LKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSAmIzQzOyAweDAwLCB2YWx1ZSwgR0VOTUFTSygxNSwgOCkpCiAjZGVmaW5lIFNFVF9XTF9DSF9JTkZPX0NITkwoaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODQ5LDYgJiM0Mzs4NTIsNyBAQCB2b2lkIHJ0d19md19zZW5kX3Jzc2lfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSk7CiB2b2lkIHJ0d19md19zZW5kX3JhX2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHJ0d19zdGFfaW5mbyAqc2ksCiAJCQkgYm9vbCByZXNldF9yYV9tYXNrKTsKIHZvaWQgcnR3X2Z3X21lZGlhX3N0YXR1c19yZXBvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkLCBib29sIGNvbm4pOwomIzQzO3ZvaWQgcnR3X2Z3X3NldF9nbnRfYnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggc3RhdGUpOwogdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpOwogdm9pZCBydHdfZndfYmVhY29uX2ZpbHRlcl9jb25maWcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBjb25uZWN0LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuYwppbmRleCA3NjZmMjJkMzEwNzllZS4uOTEwMTRhOGUyNDJiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmMKQEAgLTE1LDYgJiM0MzsxNSw0NjMgQEAKICNpbmNsdWRlICYjMzQ7d293LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzYXIuaCYjMzQ7CiAKJiM0MzsvKiA4NzIzQlMgU0RJTzogcmVjb3JkIGEgYmVhY29uL3Byb2JlLXJlc3Agc2VlbiBmcm9tIHRoZSB0YXJnZXQgQlNTSUQgZHVyaW5nCiYjNDM7ICogdGhlIHByZS1hdXRoIHdpbmRvdyBzbyB0aGUgam9pbiBzZXF1ZW5jZSAobWdkX3ByZXBhcmVfdHgpIGNhbiB3YWl0IGZvciBpdCwKJiM0MzsgKiBtaXJyb3JpbmcgdGhlIHZlbmRvciBzdGFydF9jbG50X2pvaW4oKS4gQ2FsbGVkIGZyb20gdGhlIFNESU8gUlggcGF0aC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ0dzg3MjNic19hdXRoX3N5bmNfcngoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHJ0d19yeF9wa3Rfc3RhdCAqcGt0X3N0YXQsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CV9fbGUxNiBmYyA9IGhkci0mZ3Q7ZnJhbWVfY29udHJvbDsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtJmd0O2ZsYWdzKSB8fAomIzQzOwkgICAgcGt0X3N0YXQtJmd0O2NyY19lcnIgfHwgcGt0X3N0YXQtJmd0O2ljdl9lcnIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihmYykgJmFtcDsmYW1wOyAhaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N5bmMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKHN5bmMtJmd0O2FjdGl2ZSAmYW1wOyZhbXA7IGV0aGVyX2FkZHJfZXF1YWwoaGRyLSZndDthZGRyMywgc3luYy0mZ3Q7YnNzaWQpKSB7CiYjNDM7CQlzeW5jLSZndDtzZWVuID0gdHJ1ZTsKJiM0MzsJCXN5bmMtJmd0O3NlZW5fY291bnQmIzQzOyYjNDM7OwomIzQzOwkJd2FrZV91cCgmYW1wO3N5bmMtJmd0O3dhaXQpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzeW5jLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocnR3ODcyM2JzX2F1dGhfc3luY19yeCk7CiYjNDM7CiYjNDM7LyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqLwomIzQzOwomIzQzOyNkZWZpbmUgUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVQJCTB4MzAKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9GQUxMQkFDS19NUwkxMjAKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVMJCTgwCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TCQkxNjAKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQJCUJJVCg3KQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRQkJOQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX0xPTkdfU0xPVF9USU1FCQkyMAomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMU0JCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJNCQkJQklUKDEpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81XzVNCQkJQklUKDIpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xMU0JCQlCSVQoMykKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzZNCQkJQklUKDQpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl85TQkJCUJJVCg1KQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMTJNCQkJQklUKDYpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xOE0JCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzI0TQkJCUJJVCg4KQomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMzZNCQkJQklUKDkpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl80OE0JCQlCSVQoMTApCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl81NE0JCQlCSVQoMTEpCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl9DQ0tfUkFURVMgXAomIzQzOwkoUlRXODcyM0JTX1JSU1JfMU0gfCBSVFc4NzIzQlNfUlJTUl8yTSB8IFwKJiM0MzsJIFJUVzg3MjNCU19SUlNSXzVfNU0gfCBSVFc4NzIzQlNfUlJTUl8xMU0pCiYjNDM7I2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRQkJCVJUVzg3MjNCU19SUlNSX0NDS19SQVRFUwomIzQzOyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMkdfQUxMT1cgXAomIzQzOwkoUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIHwgUlRXODcyM0JTX1JSU1JfNk0gfCBcCiYjNDM7CSBSVFc4NzIzQlNfUlJTUl8xMk0gfCBSVFc4NzIzQlNfUlJTUl8yNE0pCiYjNDM7CiYjNDM7LyogS2VlcCB0aGUgUkNSIGF0IHRoZSB2ZW5kb3IgdGFyZ2V0LW9ubHkgc3RhdGUgKEFNRiAmIzQzOyBDQlNTSUQpIGFjcm9zcyB0aGUgd2hvbGUKJiM0MzsgKiBjb25uZWN0IHdpbmRvdywgbWF0Y2hpbmcgdGhlIHZlbmRvciBTVEEgcGF0aC4gYWNjZXB0X2FsbCBpcyBrZXB0IG9ubHkgZm9yIHRoZQomIzQzOyAqIGNhbGxlciYjMzk7cyBpbnRlbnQ7IGJvdGggcGF0aHMgY29udmVyZ2UgdGhlIGZpbHRlciB0byB0YXJnZXQtb25seS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBhY2NlcHRfYWxsKQomIzQzO3sKJiM0MzsJcnR3ZGV2LSZndDtoYWwucmNyIHw9IEJJVF9BTUYgfCBCSVRfQ0JTU0lEX0RBVEEgfCBCSVRfQ0JTU0lEX0JDTjsKJiM0MzsJcnR3ZGV2LSZndDtoYWwucmNyICZhbXA7PSB+QklUX0FBUDsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUkNSLCBydHdkZXYtJmd0O2hhbC5yY3IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29uZmlnX3NlY19jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXUxNiBzZWMgPSBydHdfcmVhZDE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcpOwomIzQzOwomIzQzOwlzZWMgfD0gUlRXX1NFQ19DSEtfS0VZSUQgfCBSVFdfU0VDX1RYX0RFQ19FTiB8IFJUV19TRUNfUlhfREVDX0VOOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJUV19TRUNfQ09ORklHLCBzZWMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkJCWJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJdTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7CiYjNDM7CiYjNDM7CWlmIChlbmFibGUpCiYjNDM7CQlzZWMgfD0gUlRXX1NFQ19UWF9CQ19VU0VfREsgfCBSVFdfU0VDX1RYX1VOSV9VU0VfREsgfAomIzQzOwkJICAgICAgIFJUV19TRUNfUlhfVU5JX1VTRV9ESzsKJiM0MzsJZWxzZQomIzQzOwkJc2VjICZhbXA7PSB+KFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8IFJUV19TRUNfUlhfVU5JX1VTRV9ESyB8CiYjNDM7CQkJIFJUV19TRUNfVFhfQkNfVVNFX0RLIHwgUlRXX1NFQ19SWF9CQ19VU0VfREspOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJUV19TRUNfQ09ORklHLCBzZWMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfZW5hYmxlX3RzZl91cGRhdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJ0d193cml0ZThfY2xyKHJ0d2RldiwgUkVHX0JDTl9DVFJMLCBCSVRfRElTX1RTRl9VRFQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgICAgYm9vbCBzaG9ydF9wcmVhbWJsZSkKJiM0Mzt7CiYjNDM7CXU4IHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19SUlNSICYjNDM7IDIpICZhbXA7IH5SVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUOwomIzQzOwomIzQzOwlpZiAoc2hvcnRfcHJlYW1ibGUpCiYjNDM7CQl2YWwgfD0gUlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVDsKJiM0MzsJcnR3X3dyaXRlOChydHdkZXYsIFJFR19SUlNSICYjNDM7IDIsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgc2hvcnRfc2xvdCkKJiM0Mzt7CiYjNDM7CXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfU0xPVCwKJiM0MzsJCSAgIHNob3J0X3Nsb3QgPyBSVFc4NzIzQlNfU0hPUlRfU0xPVF9USU1FIDoKJiM0MzsJCQkJUlRXODcyM0JTX0xPTkdfU0xPVF9USU1FKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUxNiBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUodTggcmF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocmF0ZSAmYW1wOyAweDdmKSB7CiYjNDM7CWNhc2UgMjogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMU07CiYjNDM7CWNhc2UgNDogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMk07CiYjNDM7CWNhc2UgMTE6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNV81TTsKJiM0MzsJY2FzZSAyMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMU07CiYjNDM7CWNhc2UgMTI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNk07CiYjNDM7CWNhc2UgMTg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfOU07CiYjNDM7CWNhc2UgMjQ6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMTJNOwomIzQzOwljYXNlIDM2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzE4TTsKJiM0MzsJY2FzZSA0ODogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8yNE07CiYjNDM7CWNhc2UgNzI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMzZNOwomIzQzOwljYXNlIDk2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzQ4TTsKJiM0MzsJY2FzZSAxMDg6IHJldHVybiBSVFc4NzIzQlNfUlJTUl81NE07CiYjNDM7CWRlZmF1bHQ6ICByZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhjb25zdCB1OCAqaWUsIHUxNiAqYmFzaWNfcmF0ZXMsCiYjNDM7CQkJCQkgIGJvb2wgKnZhbGlkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghaWUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpZVsxXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUxNiByOwomIzQzOwomIzQzOwkJaWYgKCEoaWVbaSAmIzQzOyAyXSAmYW1wOyAweDgwKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXIgPSBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUoaWVbaSAmIzQzOyAyXSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkqYmFzaWNfcmF0ZXMgfD0gcjsKJiM0MzsJCSp2YWxpZCA9IHRydWU7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX3Jlc2V0X3Jlc3BvbnNlX3JhdGVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUlNSLCAweGZmZmYxKTsKJiM0MzsJcnR3ZGV2LSZndDtkbV9pbmZvLnJyc3JfdmFsX2luaXQgPSAweGZmZmYxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXBwbHlfYmFzaWNfcmF0ZXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiYjNDM7CQkJCQljb25zdCB1OCAqYnNzaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJmFtcDt2aWYtJmd0O2Jzc19jb25mOwomIzQzOwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpsb29rdXBfYnNzID0gTlVMTDsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKJiM0MzsJYm9vbCB2YWxpZCA9IGZhbHNlOwomIzQzOwl1MTYgYmFzaWNfcmF0ZXMgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtJmd0O3R5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGNvbmYtJmd0O2JzcykgewomIzQzOwkJYnNzID0gY29uZi0mZ3Q7YnNzOwomIzQzOwl9IGVsc2UgaWYgKGJzc2lkICZhbXA7JmFtcDsgaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKJiM0MzsJCWxvb2t1cF9ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHJ0d2Rldi0mZ3Q7aHctJmd0O3dpcGh5LCBOVUxMLAomIzQzOwkJCQkJICAgICAgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCQkgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAomIzQzOwkJCQkJICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJCWJzcyA9IGxvb2t1cF9ic3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJzcykgewomIzQzOwkJY29uc3QgdTggKnJhdGVzLCAqZXh0OwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJcmF0ZXMgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpOwomIzQzOwkJZXh0ID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUyk7CiYjNDM7CQlydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhyYXRlcywgJmFtcDtiYXNpY19yYXRlcywgJmFtcDt2YWxpZCk7CiYjNDM7CQlydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhleHQsICZhbXA7YmFzaWNfcmF0ZXMsICZhbXA7dmFsaWQpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZhbGlkKSB7CiYjNDM7CQliYXNpY19yYXRlcyB8PSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRTsKJiM0MzsJCWJhc2ljX3JhdGVzICZhbXA7PSBSVFc4NzIzQlNfUlJTUl8yR19BTExPVzsKJiM0MzsJCXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JSU1IsIGJhc2ljX3JhdGVzKTsKJiM0MzsJCXJ0d193cml0ZTgocnR3ZGV2LCBSRUdfUlJTUiAmIzQzOyAyLAomIzQzOwkJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19SUlNSICYjNDM7IDIpICZhbXA7IDB4ZjApOwomIzQzOwkJcnR3ZGV2LSZndDtkbV9pbmZvLnJyc3JfdmFsX2luaXQgPSBiYXNpY19yYXRlczsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobG9va3VwX2JzcykKJiM0MzsJCWNmZzgwMjExX3B1dF9ic3MocnR3ZGV2LSZndDtody0mZ3Q7d2lwaHksIGxvb2t1cF9ic3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQcm9ncmFtIHJlc3BvbnNlIHNsb3QgdGltZSAoYW5kLCB3aGVuIHNldF9wcmVhbWJsZSwgdGhlIEFDSyBwcmVhbWJsZSkgZnJvbQomIzQzOyAqIHRoZSBzZWxlY3RlZCBzY2FuIEJTUyBjYXBhYmlsaXRpZXM7IHRoZSBBUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCB5ZXQgaW4KJiM0MzsgKiBic3NfY29uZiBhdCBtZ2RfcHJlcGFyZV90eCgpIHRpbWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiYjNDM7CQkJCSAgICBjb25zdCB1OCAqYnNzaWQsIGJvb2wgc2V0X3ByZWFtYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZhbXA7dmlmLSZndDtic3NfY29uZjsKJiM0MzsJc3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7CiYjNDM7CWJvb2wgc2hvcnRfcHJlYW1ibGUsIHNob3J0X3Nsb3Q7CiYjNDM7CXUxNiBjYXAgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtJmd0O3R5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGNvbmYtJmd0O2JzcykgewomIzQzOwkJYnNzID0gY29uZi0mZ3Q7YnNzOwomIzQzOwl9IGVsc2UgaWYgKGJzc2lkICZhbXA7JmFtcDsgaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKJiM0MzsJCWxvb2t1cF9ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHJ0d2Rldi0mZ3Q7aHctJmd0O3dpcGh5LCBOVUxMLAomIzQzOwkJCQkJICAgICAgYnNzaWQsIE5VTEwsIDAsCiYjNDM7CQkJCQkgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAomIzQzOwkJCQkJICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJCWJzcyA9IGxvb2t1cF9ic3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJzcykgewomIzQzOwkJY2FwID0gYnNzLSZndDtjYXBhYmlsaXR5OwomIzQzOwl9IGVsc2UgaWYgKGNvbmYtJmd0O2Fzc29jX2NhcGFiaWxpdHkpIHsKJiM0MzsJCWNhcCA9IGNvbmYtJmd0O2Fzc29jX2NhcGFiaWxpdHk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzaG9ydF9wcmVhbWJsZSA9IGNvbmYtJmd0O3VzZV9zaG9ydF9wcmVhbWJsZTsKJiM0MzsJCXNob3J0X3Nsb3QgPSBjb25mLSZndDt1c2Vfc2hvcnRfc2xvdDsKJiM0MzsJCWdvdG8gcHJvZ3JhbTsKJiM0MzsJfQomIzQzOwlzaG9ydF9wcmVhbWJsZSA9ICEhKGNhcCAmYW1wOyBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpOwomIzQzOwlzaG9ydF9zbG90ID0gISEoY2FwICZhbXA7IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpOwomIzQzOwomIzQzO3Byb2dyYW06CiYjNDM7CWlmIChzZXRfcHJlYW1ibGUpCiYjNDM7CQlydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTsKJiM0MzsJcnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBzaG9ydF9zbG90KTsKJiM0MzsKJiM0MzsJaWYgKGxvb2t1cF9ic3MpCiYjNDM7CQljZmc4MDIxMV9wdXRfYnNzKHJ0d2Rldi0mZ3Q7aHctJmd0O3dpcGh5LCBsb29rdXBfYnNzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKJiM0Mzt7CiYjNDM7CXUxNiBiZWFjb25faW50ID0gdmlmLSZndDtic3NfY29uZi5iZWFjb25faW50OwomIzQzOwl1bnNpZ25lZCBpbnQgd2FpdF9tczsKJiM0MzsKJiM0MzsJaWYgKCFiZWFjb25faW50KQomIzQzOwkJcmV0dXJuIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9GQUxMQkFDS19NUzsKJiM0MzsKJiM0MzsJd2FpdF9tcyA9IERJVl9ST1VORF9VUChiZWFjb25faW50ICogMTAyNCwgMTAwMCkgJiM0MzsgMjA7CiYjNDM7CXJldHVybiBjbGFtcF90KHVuc2lnbmVkIGludCwgd2FpdF9tcywgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX01JTl9NUywKJiM0MzsJCSAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3luYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoc3luYy0mZ3Q7YnNzaWQsIGJzc2lkKTsKJiM0MzsJc3luYy0mZ3Q7c2VlbiA9IGZhbHNlOwomIzQzOwlzeW5jLSZndDtzZWVuX2NvdW50ID0gMDsKJiM0MzsJc3luYy0mZ3Q7YWN0aXZlID0gdHJ1ZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N5bmMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdG9wKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3luYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlzeW5jLSZndDthY3RpdmUgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N5bmMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnR3ODcyM2JzX2F1dGhfc3luY19zZWVuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgc2VlbjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzeW5jLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXNlZW4gPSBzeW5jLSZndDtzZWVuOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3luYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnR3ODcyM2JzX2F1dGhfc3luY193YWl0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgaW50IHdhaXRfbXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9ICZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmM7CiYjNDM7CiYjNDM7CXJldHVybiB3YWl0X2V2ZW50X3RpbWVvdXQoc3luYy0mZ3Q7d2FpdCwgcnR3ODcyM2JzX2F1dGhfc3luY19zZWVuKHJ0d2RldiksCiYjNDM7CQkJCSAgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSkgJmd0OyAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfaXNfYXV0aChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXJldHVybiBydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBpbmZvICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGluZm8tJmd0O3N1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0FVVEg7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlcGxpY2F0ZSB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIHJlZ2lzdGVyIHByb2dyYW1taW5nIHJpZ2h0IGJlZm9yZQomIzQzOyAqIGF1dGguIFJldHVybnMgdHJ1ZSBmb3IgYSBmcmVzaCBqb2luIChCU1NJRCBjaGFuZ2VkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfam9pbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfdmlmICpydHd2aWYgPSAoc3RydWN0IHJ0d192aWYgKil2aWYtJmd0O2Rydl9wcml2OwomIzQzOwlib29sIGZyZXNoX2pvaW47CiYjNDM7CXUxNiByZXRyeV9saW1pdDsKJiM0MzsKJiM0MzsJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZnJlc2hfam9pbiA9ICFldGhlcl9hZGRyX2VxdWFsKHJ0d3ZpZi0mZ3Q7YnNzaWQsIGJzc2lkKTsKJiM0MzsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KHJ0d3ZpZi0mZ3Q7YnNzaWQsIGJzc2lkKTsKJiM0MzsJcnR3dmlmLSZndDthaWQgPSAwOwomIzQzOwlydHd2aWYtJmd0O25ldF90eXBlID0gUlRXX05FVF9NR0RfTElOS0VEOwomIzQzOwlydHdfdmlmX3BvcnRfY29uZmlnKHJ0d2RldiwgcnR3dmlmLAomIzQzOwkJCSAgICBQT1JUX1NFVF9CU1NJRCB8IFBPUlRfU0VUX0FJRCB8IFBPUlRfU0VUX05FVF9UWVBFKTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IG5hcnJvdyBSUlNSIG9yIHN3aXRjaCB0byBzaG9ydC1wcmVhbWJsZSByZXNwb25zZXMgYmVmb3JlIHRoZQomIzQzOwkgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXQKJiM0MzsJICogKDB4ZmZmZjEsIGxvbmcgcHJlYW1ibGUpLiBPbmx5IHNsb3QgdGltZSBpcyBwcm9ncmFtbWVkIGVhcmx5LgomIzQzOwkgKi8KJiM0MzsJcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJ0d19md19iZWFjb25fZmlsdGVyX2NvbmZpZyhydHdkZXYsIGZhbHNlLCB2aWYpOwomIzQzOwomIzQzOwkvKiBNYXRjaCB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpIFRYIHN0YXRlIChzZXRfbXNyIGRpcmVjdGx5LCBrZWVwCiYjNDM7CSAqIEJDTl9DVFJMIC8gQkNOUV9ETCBzZXQsIHJlYXNzZXJ0IFRCVFQvUkVTUF9TSUZTIGV2ZXJ5IGpvaW4pLgomIzQzOwkgKi8KJiM0MzsJcnR3X3dyaXRlOChydHdkZXYsIFJFR19CQ05fQ1RSTCwKJiM0MzsJCSAgIEJJVF9ESVNfVFNGX1VEVCB8IEJJVF9FTl9CQ05fRlVOQ1RJT04pOwomIzQzOwlydHdfd3JpdGUzMl9zZXQocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCwgQklUX0VOX0JDTlFfREwpOwomIzQzOwlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgJiM0MzsgMSwgMHg2NCAmYW1wOyAweGZmKTsKJiM0MzsJcnR3X3dyaXRlOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICYjNDM7IDIsCiYjNDM7CQkgICAocnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgJiM0MzsgMikgJmFtcDsgMHhmMCkgfCAoMHg2NCAmZ3Q7Jmd0OyA4KSk7CiYjNDM7CXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFU1BfU0lGU19DQ0ssIDB4MDgwOCk7CiYjNDM7CXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFU1BfU0lGU19PRkRNLCAweDBhMGEpOwomIzQzOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJFR19SWEZMVE1BUDAsIDB4ZmZmZik7CiYjNDM7CXJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JYRkxUTUFQMiwgMHhmZmZmKTsKJiM0MzsJcnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHJ0d2RldiwgdHJ1ZSk7CiYjNDM7CiYjNDM7CXJldHJ5X2xpbWl0ID0gKFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUICZsdDsmbHQ7IDgpIHwKJiM0MzsJCSAgICAgIFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUOwomIzQzOwlydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVRSWV9MSU1JVCwgcmV0cnlfbGltaXQpOwomIzQzOwomIzQzOwlydHc4NzIzYnNfY29uZmlnX3NlY19jZmcocnR3ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZXNoX2pvaW47CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSB2ZW5kb3Igc2VuZHMgYSBkZWF1dGggdG8gdGhlIHRhcmdldCBiZWZvcmUgYXV0aCB0byBjbGVhciBzdGFsZSBBUC1zaWRlCiYjNDM7ICogc3RhdGU7IHN5bnRoZXNpemUgYW5kIFRYIG9uZSwgdGhlbiBsZXQgdGhlIEFQIHNldHRsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfdHhfcHJlX2F1dGhfZGVhdXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkJCSBjb25zdCB1OCAqYnNzaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbCA9IHt9OwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdW5zaWduZWQgaW50IGZyYW1lX2xlbiwgaGVhZHJvb207CiYjNDM7CiYjNDM7CWZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgJiM0Mzsgc2l6ZW9mKG1nbXQtJmd0O3UuZGVhdXRoKTsKJiM0MzsJaGVhZHJvb20gPSBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3BrdF9kZXNjX3N6ICYjNDM7IDg7CiYjNDM7CiYjNDM7CXNrYiA9IGRldl9hbGxvY19za2IoaGVhZHJvb20gJiM0MzsgZnJhbWVfbGVuKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pOwomIzQzOwltZ210ID0gc2tiX3B1dF96ZXJvKHNrYiwgZnJhbWVfbGVuKTsKJiM0MzsJbWdtdC0mZ3Q7ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKJiM0MzsJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCk7CiYjNDM7CW1lbWNweShtZ210LSZndDtkYSwgYnNzaWQsIEVUSF9BTEVOKTsKJiM0MzsJbWVtY3B5KG1nbXQtJmd0O3NhLCB2aWYtJmd0O2FkZHIsIEVUSF9BTEVOKTsKJiM0MzsJbWVtY3B5KG1nbXQtJmd0O2Jzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwomIzQzOwltZ210LSZndDt1LmRlYXV0aC5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKJiM0MzsKJiM0MzsJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKJiM0MzsJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwomIzQzOwlpbmZvLSZndDtjb250cm9sLnZpZiA9IHZpZjsKJiM0MzsKJiM0MzsJcnR3X3R4KHJ0d2RldiwgJmFtcDtjb250cm9sLCBza2IpOwomIzQzOwltc2xlZXAoMTAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT3JjaGVzdHJhdGUgdGhlIHByZS1hdXRoIGpvaW46IHByb2dyYW0gdGhlIHZlbmRvciBqb2luIHN0YXRlLCBzZW5kIHRoZQomIzQzOyAqIHByZS1hdXRoIGRlYXV0aCwgd2FpdCBmb3IgYSBiZWFjb24gZnJvbSB0aGUgdGFyZ2V0LCB0aGVuIHJlcGxheSB0aGUKJiM0MzsgKiBwcmUtYXV0aCBjb2V4IEgyQ3MgLSBvbmNlIHBlciBmcmVzaCBCU1NJRC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfdmlmICpydHd2aWY7CiYjNDM7CWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CiYjNDM7CWJvb2wgZnJlc2hfam9pbjsKJiM0MzsKJiM0MzsJaWYgKCFydHc4NzIzYnNfbWdkX3ByZXBhcmVfaXNfYXV0aChydHdkZXYsIGluZm8pIHx8ICF2aWYgfHwKJiM0MzsJICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcnR3dmlmID0gKHN0cnVjdCBydHdfdmlmICopdmlmLSZndDtkcnZfcHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIodmlmLSZndDtjZmcuYXBfYWRkcikpCiYjNDM7CQlic3NpZCA9IHZpZi0mZ3Q7Y2ZnLmFwX2FkZHI7CiYjNDM7CWVsc2UgaWYgKHZpZi0mZ3Q7YnNzX2NvbmYuYnNzaWQgJmFtcDsmYW1wOyAhaXNfemVyb19ldGhlcl9hZGRyKHZpZi0mZ3Q7YnNzX2NvbmYuYnNzaWQpKQomIzQzOwkJYnNzaWQgPSB2aWYtJmd0O2Jzc19jb25mLmJzc2lkOwomIzQzOwomIzQzOwlpZiAoIWJzc2lkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmcmVzaF9qb2luID0gcnR3ODcyM2JzX21nZF9wcmVwYXJlX2pvaW4ocnR3ZGV2LCB2aWYsIGJzc2lkKTsKJiM0MzsKJiM0MzsJaWYgKGZyZXNoX2pvaW4gfHwgIXJ0d3ZpZi0mZ3Q7cHJlX2F1dGhfam9pbl9kb25lKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgd2FpdF9tcyA9IHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdF9tcyh2aWYpOwomIzQzOwomIzQzOwkJcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChydHdkZXYsIGJzc2lkKTsKJiM0MzsJCXJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgocnR3ZGV2LCB2aWYsIGJzc2lkKTsKJiM0MzsJCXJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChydHdkZXYsIHdhaXRfbXMpOwomIzQzOwkJcnR3ODcyM2JzX2F1dGhfc3luY19zdG9wKHJ0d2Rldik7CiYjNDM7CQlydHd2aWYtJmd0O3ByZV9hdXRoX2pvaW5fZG9uZSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFydHd2aWYtJmd0O3ByZV9hdXRoX2gyY19zZW50KSB7CiYjNDM7CQlydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7CiYjNDM7CQlydHd2aWYtJmd0O3ByZV9hdXRoX2gyY19zZW50ID0gdHJ1ZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0d19vcHNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzg3LDYgJiM0Mzs4NDQsMTMgQEAgc3RhdGljIHZvaWQgcnR3X29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0FTU09DKSB7CiAJCXJ0d192aWZfYXNzb2NfY2hhbmdlZChydHd2aWYsIGNvbmYpOwogCQlpZiAodmlmLSZndDtjZmcuYXNzb2MpIHsKJiM0MzsJCQlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKJiM0MzsJCQkJcnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHJ0d2RldiwgZmFsc2UpOwomIzQzOwkJCQlydHc4NzIzYnNfYXBwbHlfYmFzaWNfcmF0ZXMocnR3ZGV2LCB2aWYsIE5VTEwpOwomIzQzOwkJCQlydHc4NzIzYnNfZW5hYmxlX3RzZl91cGRhdGUocnR3ZGV2KTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX0ZJTklTSCk7CiAKIAkJCXJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTsKQEAgLTQwOCw2ICYjNDM7ODcyLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCWlmICh0ZXN0X2JpdChSVFdfRkxBR19TQ0FOTklORywgcnR3ZGV2LSZndDtmbGFncykpCiAJCQkJcnR3X2h3X3NjYW5fYWJvcnQocnR3ZGV2KTsKIAomIzQzOwkJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOwomIzQzOwkJCSAgICB2aWYtJmd0O3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewomIzQzOwkJCQlydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCBmYWxzZSk7CiYjNDM7CQkJCXJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhydHdkZXYpOwomIzQzOwkJCQlydHd2aWYtJmd0O3ByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7CiYjNDM7CQkJCXJ0d3ZpZi0mZ3Q7cHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7CiYjNDM7CQkJfQogCQl9CiAKIAkJY29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFOwpAQCAtNDE1LDggJiM0Mzs4ODYsMjYgQEAgc3RhdGljIHZvaWQgcnR3X29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0JTU0lEKSB7CiYjNDM7CQlib29sIGJzc2lkX2NsZWFyZWQgPSBpc196ZXJvX2V0aGVyX2FkZHIoY29uZi0mZ3Q7YnNzaWQpOwomIzQzOwkJYm9vbCBic3NpZF9jaGFuZ2VkID0gIWV0aGVyX2FkZHJfZXF1YWwocnR3dmlmLSZndDtic3NpZCwKJiM0MzsJCQkJCQkgICAgICAgY29uZi0mZ3Q7YnNzaWQpOwomIzQzOwomIzQzOwkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJmFtcDsmYW1wOyBic3NpZF9jaGFuZ2VkKSB7CiYjNDM7CQkJcnR3dmlmLSZndDtwcmVfYXV0aF9oMmNfc2VudCA9IGZhbHNlOwomIzQzOwkJCXJ0d3ZpZi0mZ3Q7cHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7CiYjNDM7CQl9CiAJCWV0aGVyX2FkZHJfY29weShydHd2aWYtJmd0O2Jzc2lkLCBjb25mLSZndDtic3NpZCk7CiAJCWNvbmZpZyB8PSBQT1JUX1NFVF9CU1NJRDsKJiM0MzsJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICZhbXA7JmFtcDsgYnNzaWRfY2xlYXJlZCkgewomIzQzOwkJCXJ0d3ZpZi0mZ3Q7YWlkID0gMDsKJiM0MzsJCQlydHd2aWYtJmd0O25ldF90eXBlID0gUlRXX05FVF9OT19MSU5LOwomIzQzOwkJCWNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRSB8IFBPUlRfU0VUX0FJRDsKJiM0MzsJCQlydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLAomIzQzOwkJCQkgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OIHwKJiM0MzsJCQkJICAgQklUX0RJU19BVElNKTsKJiM0MzsJCX0KIAkJaWYgKCFydHdfY29yZV9jaGVja19zdGFfYWN0aXZlKHJ0d2RldikpCiAJCQlydHdfY2xlYXJfb3BfY2hhbihydHdkZXYpOwogCQllbHNlCkBAIC00NDgsOCAmIzQzOzkzNywxNyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfTVVfR1JPVVBTKQogCQlydHdfY2hpcF9zZXRfZ2lkX3RhYmxlKHJ0d2RldiwgdmlmLCBjb25mKTsKIAotCWlmIChjaGFuZ2VkICZhbXA7IEJTU19DSEFOR0VEX0VSUF9TTE9UKQomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUgJmFtcDsmYW1wOwomIzQzOwkgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQomIzQzOwkJcnR3ODcyM2JzX3NldF9hY2tfcHJlYW1ibGUocnR3ZGV2LCBjb25mLSZndDt1c2Vfc2hvcnRfcHJlYW1ibGUpOwomIzQzOwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgewomIzQzOwkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiYjNDM7CQkJcnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBjb25mLSZndDt1c2Vfc2hvcnRfc2xvdCk7CiAJCXJ0d19jb25mX3R4KHJ0d2RldiwgcnR3dmlmKTsKJiM0MzsJfQogCiAJaWYgKGNoYW5nZWQgJmFtcDsgQlNTX0NIQU5HRURfUFMpCiAJCXJ0d19yZWNhbGNfbHBzKHJ0d2RldiwgTlVMTCk7CkBAIC02MDksMTEgJiM0MzsxMTA3LDE5IEBAIHN0YXRpYyBpbnQgcnR3X29wc19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKIAkJa2V5LSZndDtod19rZXlfaWR4ID0gaHdfa2V5X2lkeDsKIAkJcnR3X3NlY193cml0ZV9jYW0ocnR3ZGV2LCBzZWMsIHN0YSwga2V5LAogCQkJCSAgaHdfa2V5X3R5cGUsIGh3X2tleV9pZHgpOwomIzQzOwkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7IHZpZiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdmlmLSZndDt0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJmFtcDsmYW1wOwomIzQzOwkJICAgICEoa2V5LSZndDtmbGFncyAmYW1wOyBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKQomIzQzOwkJCXJ0dzg3MjNic19jb25maWdfZGVmYXVsdF9rZXlfc2VhcmNoKHJ0d2RldiwgdHJ1ZSk7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6CiAJCXJ0d19oY2lfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTsKIAkJcnR3X21hY19mbHVzaF9hbGxfcXVldWVzKHJ0d2RldiwgZmFsc2UpOwogCQlydHdfc2VjX2NsZWFyX2NhbShydHdkZXYsIHNlYywga2V5LSZndDtod19rZXlfaWR4KTsKJiM0MzsJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyB2aWYgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZpZi0mZ3Q7dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGtleS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkKJiM0MzsJCQlydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIGZhbHNlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC03MDMsOCAmIzQzOzEyMDksMjMgQEAgc3RhdGljIHZvaWQgcnR3X29wc19tZ2RfcHJlcGFyZV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAogCW11dGV4X2xvY2soJmFtcDtydHdkZXYtJmd0O211dGV4KTsKIAlydHdfbGVhdmVfbHBzX2RlZXAocnR3ZGV2KTsKLQlydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTsKLQlydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCS8qIFdha2UgZnJvbSBzb2Z0IElQUyBhbmQgcnVuIHRoZSB2ZW5kb3Igam9pbiBzZXF1ZW5jZS4gVGhlIFJGSwomIzQzOwkJICogaXMgaGFuZGxlZCBieSB0aGUgb25jZS1vbmx5IHBvd2VyLW9uIElRSyBwbHVzIHRoZSBwcy5jCiYjNDM7CQkgKiBwb3N0LUlQUyBSRi1idXMgcmVjb3ZlcnksIG5vdCBhIGZyZXNoIGNhbGlicmF0aW9uIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChydHdfbGVhdmVfaXBzKHJ0d2RldikpIHsKJiM0MzsJCQlydHdfZXJyKHJ0d2RldiwgJiMzNDtmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0ZSBmb3IgbWdkIHR4XG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTsKJiM0MzsJCXJ0dzg3MjNic19tZ2RfcHJlcGFyZV9hdXRoX2pvaW4ocnR3ZGV2LCB2aWYsIGluZm8pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcnR3X2NvZXhfY29ubmVjdF9ub3RpZnkocnR3ZGV2LCBDT0VYX0FTU09DSUFURV9TVEFSVCk7CiYjNDM7CQlydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7CiYjNDM7CX0KJiM0MztvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cnR3ZGV2LSZndDttdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmMKaW5kZXggY2Q5MjU0MzcwZmNjNzIuLjE2MjI4Y2FlMjUyZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYwpAQCAtMjE3NCwxMSAmIzQzOzIxNzQsMTMgQEAgaW50IHJ0d19jb3JlX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cnR3ZGV2LSZndDt0eHFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtydHdkZXYtJmd0O3R4X3JlcG9ydC5xX2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3J0d2Rldi0mZ3Q7YXV0aF9zeW5jLmxvY2spOwogCiAJbXV0ZXhfaW5pdCgmYW1wO3J0d2Rldi0mZ3Q7bXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtydHdkZXYtJmd0O2hhbC50eF9wb3dlcl9tdXRleCk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cnR3ZGV2LSZndDtjb2V4LndhaXQpOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cnR3ZGV2LSZndDthdXRoX3N5bmMud2FpdCk7CiAJaW5pdF9jb21wbGV0aW9uKCZhbXA7cnR3ZGV2LSZndDtscHNfbGVhdmVfY2hlY2spOwogCWluaXRfY29tcGxldGlvbigmYW1wO3J0d2Rldi0mZ3Q7Zndfc2Nhbl9kZW5zaXR5KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaAppbmRleCA5YzBiNzQ2NTQwYjBlZS4uOTliOTlhYTNkNjAwZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC04MjgsNiAmIzQzOzgyOSw4IEBAIHN0cnVjdCBydHdfdmlmIHsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggcG9ydDsKIAl1OCBiY25fY3RybDsKJiM0MzsJYm9vbCBwcmVfYXV0aF9oMmNfc2VudDsKJiM0MzsJYm9vbCBwcmVfYXV0aF9qb2luX2RvbmU7CiAJc3RydWN0IGxpc3RfaGVhZCByc3ZkX3BhZ2VfbGlzdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB0eF9wYXJhbXNbSUVFRTgwMjExX05VTV9BQ1NdOwogCWNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7CkBAIC0yMDU2LDYgJiM0MzsyMDU5LDIwIEBAIHN0cnVjdCBydHdfaHdfc2Nhbl9pbmZvIHsKIAl1OCBvcF9idzsKIH07CiAKJiM0MzsvKgomIzQzOyAqIFN5bmNocm9uaXNlcyB0aGUgcHJlLWF1dGggd2FpdCBvbiBhIGJlYWNvbiBvciBwcm9iZSByZXNwb25zZSBmcm9tIHRoZQomIzQzOyAqIHRhcmdldCBCU1NJRCBiZWZvcmUgdGhlIGpvaW4gc2VxdWVuY2UgY29udGludWVzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBydHdfYXV0aF9zeW5jIHsKJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKJiM0MzsJLyogUHJvdGVjdHMgdGhlIGZpZWxkcyBiZWxvdy4gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwl1OCBic3NpZFtFVEhfQUxFTl07CiYjNDM7CWJvb2wgYWN0aXZlOwomIzQzOwlib29sIHNlZW47CiYjNDM7CXUzMiBzZWVuX2NvdW50OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcnR3X2RldiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwpAQCAtMjEzMiw2ICYjNDM7MjE0OSw4IEBAIHN0cnVjdCBydHdfZGV2IHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBmd19zY2FuX2RlbnNpdHk7CiAJYm9vbCBhcF9hY3RpdmU7CiAKJiM0MzsJc3RydWN0IHJ0d19hdXRoX3N5bmMgYXV0aF9zeW5jOwomIzQzOwogCWJvb2wgbGVkX3JlZ2lzdGVyZWQ7CiAJY2hhciBsZWRfbmFtZVszMl07CiAJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfY2RldjsKQEAgLTIxOTMsNiAmIzQzOzIyMTIsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7dHhfc3RiYzsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXVuc2lnbmVkIGxvbmcgbWFjX2lkOwpAQCAtMjI4Myw0ICYjNDM7MjMwOCw4IEBAIGJvb2wgcnR3X2NvcmVfY2hlY2tfc3RhX2FjdGl2ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTsKIHZvaWQgcnR3X2NvcmVfZW5hYmxlX2JlYWNvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVuYWJsZSk7CiB2b2lkIHJ0d19zZXRfYW1wZHVfZmFjdG9yKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKTsKJiM0Mzt2b2lkIHJ0dzg3MjNic19hdXRoX3N5bmNfcngoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IHJ0d19yeF9wa3Rfc3RhdCAqcGt0X3N0YXQsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaAppbmRleCAwOGU5NDk0OTc3ZTA2YS4uYjZkNGU4ZWQ5OGM3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaApAQCAtNDc5LDYgJiM0Mzs0NzksNyBAQAogI2RlZmluZSBCSVRfRElTX1RTRl9VRFQJCUJJVCg0KQogI2RlZmluZSBCSVRfRU5fQkNOX0ZVTkNUSU9OCUJJVCgzKQogI2RlZmluZSBCSVRfRU5fVFhCQ05fUlBUCUJJVCgyKQomIzQzOyNkZWZpbmUgQklUX0RJU19BVElNCQlCSVQoMCkKICNkZWZpbmUgUkVHX0JDTl9DVFJMX0NMSU5UMAkweDA1NTEKICNkZWZpbmUgUkVHX0RSVkVSTFlJTlQJCTB4MDU1OAogI2RlZmluZSBSRUdfQkNORE1BVElNCQkweDA1NTkKQEAgLTUxOCw2ICYjNDM7NTE5LDcgQEAKICNkZWZpbmUgQklUX1VDX01EX0VOCQlCSVQoMTYpCiAjZGVmaW5lIEJJVF9SWFNLX1BFUlBLVAkJQklUKDE1KQogI2RlZmluZSBCSVRfSFRDX0xPQ19DVFJMCUJJVCgxNCkKJiM0MzsjZGVmaW5lIEJJVF9BTUYJCQlCSVQoMTMpCiAjZGVmaW5lIEJJVF9SUEZNX0NBTV9FTkFCTEUJQklUKDEyKQogI2RlZmluZSBCSVRfVEFfQkNOCQlCSVQoMTEpCiAjZGVmaW5lIEJJVF9SQ1JfQURGCQlCSVQoMTEpCkBAIC02MjgsNiAmIzQzOzYzMCw3IEBACiAjZGVmaW5lIFJFR19QU0QJCQkweDA5MTAKICNkZWZpbmUgQklUX1BTRF9JTkkJCUdFTk1BU0soMjMsIDIyKQogI2RlZmluZSBSRUdfU0lOR0xFX1RPTkVfQ09OVF9UWAkweDA5MTQKJiM0MzsjZGVmaW5lIFJFR19CQl9TRUxfQlRHXzg3MjNCCTB4MDk0OAogI2RlZmluZSBSRUdfQUdDX1RBQkxFCQkweDA5NTgKICNkZWZpbmUgUkVHX1JGRV9DVFJMX0UJCTB4MDk3NAogI2RlZmluZSBSRUdfMk5EX0NDQV9DVFJMCTB4MDk3NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCmluZGV4IDAxZmQyOTlhYmI3ZmU5Li41MzAzOTc1ZDAwYTJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwpAQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJcnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTsKIAotCS8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplICZsdDsgMTQgb3Igc2l6ZSAmZ3Q7IDgxOTIgYW5kCi0JICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuCiYjNDM7CS8qIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MgomIzQzOwkgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC4KIAkgKi8KLQlpZiAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCICZhbXA7JmFtcDsgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewomIzQzOwlpZiAoKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fAomIzQzOwkgICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwOC4uYjI5NGJjYzRkODI4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jCkBAIC0yMCw2ICYjNDM7MjAsMTYgQEAKICNpbmNsdWRlICYjMzQ7dHguaCYjMzQ7CiAKICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFUwkJCTUwCiYjNDM7I2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NUwkJCQkxMDAwCiYjNDM7CiYjNDM7LyogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OCw5MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDsKJiM0MzsJdTMyIGZyZWVfdHhwZzsKJiM0MzsJdTE2IHB1YnFfbnVtOwomIzQzOwomIzQzOwlpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGdfdGJsID0gJmFtcDtydHdkZXYtJmd0O2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXB1YnFfbnVtID0gcnR3ZGV2LSZndDtmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtJmd0O2hxX251bSAtIHBnX3RibC0mZ3Q7bHFfbnVtIC0KJiM0MzsJCSAgIHBnX3RibC0mZ3Q7bnFfbnVtIC0gcGdfdGJsLSZndDtleHFfbnVtIC0gcGdfdGJsLSZndDtnYXBxX251bTsKJiM0MzsJZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CWlmIChmcmVlX3R4cGcpIHsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2hpZ2gsIGZyZWVfdHhwZyAmYW1wOyAweGZmKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2xvdywgKGZyZWVfdHhwZyAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZik7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsIChmcmVlX3R4cGcgJmd0OyZndDsgMjQpICZhbXA7IDB4ZmYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwl1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CiYjNDM7CWlmICghZnJlZV90eHBnKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoLCBmcmVlX3R4cGcgJmFtcDsgMHhmZik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93LCAoZnJlZV90eHBnICZndDsmZ3Q7IDE2KSAmYW1wOyAweGZmKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCAoZnJlZV90eHBnICZndDsmZ3Q7IDI0KSAmYW1wOyAweGZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJc3dpdGNoIChxdWV1ZSkgewomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CQ046CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0gyQzoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSEkwOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9NR01UOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9WTzoKJiM0MzsJCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCk7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZJOgomIzQzOwkJcmV0dXJuIGF0b21pY19yZWFkKCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwpOwomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CRToKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQks6CiYjNDM7CQlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2xvdyk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAogCQkJCSAgICBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDsKIAotCWlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkgewomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwkJaW50IGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CiYjNDM7CQlpZiAoZGVkaWNhdGVkICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gZGVkaWNhdGVkOwomIzQzOwkJcGFnZXNfZnJlZSA9IGRlZGljYXRlZCAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fc3luY19mcmVlX3R4cGcocnR3ZGV2KTsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlwYWdlc19mcmVlID0gZGVkaWNhdGVkICYjNDM7IGF0b21pY19yZWFkKCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzcyMSwxMzEgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgaTsKJiM0MzsJdTggZnJlZTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIC0xLCAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpOwomIzQzOwkJaWYgKGZyZWUpIHsKJiM0MzsJCQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIGZyZWUgLSAxKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBwYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlzd2l0Y2ggKHF1ZXVlKSB7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZJOgomIzQzOwkJZGVkaWNhdGVkID0gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CRToKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQks6CiYjNDM7CQlkZWRpY2F0ZWQgPSAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZWRpY2F0ZWQgPSAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpOwomIzQzOwlpZiAocGFnZXMgJmx0Oz0gZnJlZSkgewomIzQzOwkJYXRvbWljX3N1YihwYWdlcywgZGVkaWNhdGVkKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWF0b21pY19zZXQoZGVkaWNhdGVkLCAwKTsKJiM0MzsJCWF0b21pY19zdWIocGFnZXMgLSBmcmVlLCAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZXM7CiAJYm9vbCBidXNfY2xhaW07CiAJc2l6ZV90IHR4c2l6ZTsKJiM0MzsJc2l6ZV90IHdyaXRlX3NpemU7CiAJdTMyIHR4YWRkcjsKIAlpbnQgcmV0OwogCi0JdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItJmd0O2xlbiwgcXVldWUpOwotCWlmICghdHhhZGRyKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJdHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpOwomIzQzOwkJd3JpdGVfc2l6ZSA9IHR4c2l6ZSAmZ3Q7IFJUV19TRElPX0JMT0NLX1NJWkUgPwomIzQzOwkJCSAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIG9yaWdfbGVuKTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikgewomIzQzOwkJdW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47CiAKLQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBza2ItJmd0O2xlbik7CiYjNDM7CQlpZiAoc2tiX3RhaWxyb29tKHNrYikgJmx0OyBwYWRkaW5nKSB7CiYjNDM7CQkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsCiYjNDM7CQkJCQkgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLAomIzQzOwkJCQkJICAgICAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwl0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpOwomIzQzOwlpZiAoIXR4YWRkcikgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCXJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwlyZXQgPSBydHdfc2Rpb193YWl0X3R4X29xdChydHdkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdHJpbTsKIAogCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItJmd0O2RhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSkKIAkJcnR3X3dhcm4ocnR3ZGV2LCAmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XG4mIzM0OywKIAkJCSBfX2Z1bmNfXywgcXVldWUpOwogCiAJYnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTsKLQogCWlmIChidXNfY2xhaW0pCiAJCXNkaW9fY2xhaW1faG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwotCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLCB0eHNpemUpOwotCiYjNDM7CXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCB0eGFkZHIsIHNrYi0mZ3Q7ZGF0YSwKJiM0MzsJCQkgICAgICAgd3JpdGVfc2l6ZSk7CiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jKTsKIAomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJ0bDg3MjNicykgewomIzQzOwkJcGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtJmd0O2NoaXAtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CQlydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTsKJiM0MzsJfQogCWlmIChyZXQpCiAJCXJ0d193YXJuKHJ0d2RldiwKIAkJCSAmIzM0O0ZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4JiMzNDssCi0JCQkgdHhzaXplLCB0eGFkZHIpOwomIzQzOwkJCSB3cml0ZV9zaXplLCB0eGFkZHIpOwogCiYjNDM7b3V0X3RyaW06CiYjNDM7CWlmICh3cml0ZV9zaXplICZndDsgb3JpZ19sZW4pCiYjNDM7CQlza2JfdHJpbShza2IsIG9yaWdfbGVuKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NzcsNyAmIzQzOzg1MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAotCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUOwomIzQzOwllbHNlCiYjNDM7CQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8CiYjNDM7CQkJCSAgICAgICBSRUdfU0RJT19ISU1SX0NQV00xOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTY4NSw2ICYjNDM7ODY1LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJdTggc2l6ZSwgdGltZW91dDsKIAogCXN3aXRjaCAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCkgewomIzQzOwljYXNlIFJUV19DSElQX1RZUEVfODcyM0I6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOgogCWNhc2UgUlRXX0NISVBfVFlQRV84ODIxQToKIAljYXNlIFJUV19DSElQX1RZUEVfODgxMkE6CkBAIC03MTIsNiAmIzQzOzg5Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQkgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpOwogCiAJcnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIDMgJmx0OyZsdDsgMik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTc0OSw5ICYjNDM7OTMyLDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi0mZ3Q7Y2hpcDsKJiM0MzsJc3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSAmYW1wO3J0d2Rldi0mZ3Q7ZmlmbzsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7CiYjNDM7CXUzMiBmcmVlX3R4cGc7CiYjNDM7CXUxNiBwdWJxX251bTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnIHx8ICFmaWZvLSZndDthY3FfcGdfbnVtKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CWlmIChmaWZvLSZndDthY3FfcGdfbnVtICZsdDs9IHBnX3RibC0mZ3Q7aHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bHFfbnVtICYjNDM7CiYjNDM7CQkJCSAgICBwZ190YmwtJmd0O25xX251bSAmIzQzOyBwZ190YmwtJmd0O2V4cV9udW0gJiM0MzsKJiM0MzsJCQkJICAgIHBnX3RibC0mZ3Q7Z2FwcV9udW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXB1YnFfbnVtID0gZmlmby0mZ3Q7YWNxX3BnX251bSAtIHBnX3RibC0mZ3Q7aHFfbnVtIC0gcGdfdGJsLSZndDtscV9udW0gLQomIzQzOwkJICAgcGdfdGJsLSZndDtucV9udW0gLSBwZ190YmwtJmd0O2V4cV9udW0gLSBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSwKJiM0MzsJCSAgICBCSVRfUlFQTl9ORShwZ190YmwtJmd0O25xX251bSwgcGdfdGJsLSZndDtleHFfbnVtKSk7CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sCiYjNDM7CQkgICAgQklUX1JRUE5fSExQKHBnX3RibC0mZ3Q7aHFfbnVtLCBwZ190YmwtJmd0O2xxX251bSwgcHVicV9udW0pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsJcnR3X3NkaW9faW5pdF9mcmVlX3R4cGcocnR3ZGV2KTsKIAlydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJY2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgJmFtcDsKJiM0MzsJCQlSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7CiYjNDM7CQlpZiAoY2xlYXIpCiYjNDM7CQkJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7CiYjNDM7CX0KJiM0MzsKIAlydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNSw3ICYjNDM7MTAzOSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAotCXF1ZXVlX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwomIzQzOwltb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKQpAQCAtODMxLDYgJiM0MzsxMDU1LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCiAJdmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpOwogCXZhbCAmYW1wOz0gMHhmZmY4OwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJdmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTsKIAlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7CiB9CiAKQEAgLTkzNyw2ICYjNDM7MTE2MywxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlza2JfcXVldWVfdGFpbCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKIAomIzQzOwkvKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBGSUZPIGZpbGxzIHBhc3QKJiM0MzsJICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzCiYjNDM7CSAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWAomIzQzOwkgKiBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZHJhaW5zIGJlbG93IHRoZSBsb3cgd2F0ZXJtYXJrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7IHF1ZXVlICZsdDsgUlRXX1RYX1FVRVVFX0JDTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gJmFtcDsmYW1wOwomIzQzOwkgICAgc2tiX3F1ZXVlX2xlbigmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSkgJmd0Oz0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7CiYjNDM7CQlpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtJmd0O2h3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTY1LDYgJiM0MzsxMjAzLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3J4X3NrYihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJ0d191cGRhdGVfcnhfZnJlcV9mb3JfaW52YWxpZChydHdkZXYsIHNrYiwgcnhfc3RhdHVzLCBwa3Rfc3RhdCk7CiAJcnR3X3J4X3N0YXRzKHJ0d2RldiwgcGt0X3N0YXQtJmd0O3ZpZiwgc2tiKTsKIAomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmd0Oz0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkKJiM0MzsJCXJ0dzg3MjNic19hdXRoX3N5bmNfcngocnR3ZGV2LAomIzQzOwkJCQkgICAgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhLAomIzQzOwkJCQkgICAgICAgc2tiLSZndDtsZW4sIHBrdF9zdGF0LCByeF9zdGF0dXMpOwomIzQzOwogCWllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0d2Rldi0mZ3Q7aHcsIHNrYik7CiB9CiAKQEAgLTEwOTUsNiAmIzQzOzEzMzgsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpCiAJCXJ0d19zZGlvX3J4X2lzcihydHdkZXYpOwogCX0KIAomIzQzOwkvKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWQKJiM0MzsJICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZQomIzQzOwkgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJaGlzciAmYW1wOz0gcnR3c2Rpby0mZ3Q7aXJxX21hc2sgJmFtcDsgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7CiAKIAlydHdzZGlvLSZndDtpcnFfdGhyZWFkID0gTlVMTDsKQEAgLTEyMzEsMzIgJiM0MzsxNDgxLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAotCQkJCSAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiYjNDM7c3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCSAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJICAgICBib29sICpwcm9jZXNzZWQpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgcV9tYXA7CiAJaW50IHJldDsKIAomIzQzOwkqcHJvY2Vzc2VkID0gZmFsc2U7CiAJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pOwogCWlmICghc2tiKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAomIzQzOwkqcHJvY2Vzc2VkID0gdHJ1ZTsKJiM0MzsJcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7CiAJaWYgKHJldCkgewogCQlza2JfcXVldWVfaGVhZCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAKIAlydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsgcXVldWUgJmx0OyBSVFdfVFhfUVVFVUVfQkNOICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDs9IFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikgewomIzQzOwkJcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTsKJiM0MzsJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi0mZ3Q7aHcsIHFfbWFwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspOwomIzQzOwkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwKJiM0MzsJCQkgICAgIHdvcmspOwogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbzsKIAlzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2OwomIzQzOwlib29sIHByb2Nlc3NlZDsKIAlpbnQgbGltaXQsIHF1ZXVlOwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CkBAIC0xMjY3LDcgJiM0MzsxNTMzLDI0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJZm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgJmd0Oz0gMDsgcXVldWUtLSkgewogCQlmb3IgKGxpbWl0ID0gMDsgbGltaXQgJmx0OyAxMDAwOyBsaW1pdCYjNDM7JiM0MzspIHsKLQkJCXJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsICZhbXA7cHJvY2Vzc2VkKTsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyByZXQgPT0gLUVCVVNZKSB7CiYjNDM7CQkJCQltb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJCSAmYW1wO3dvcmtfZGF0YS0mZ3Q7d29yaywKJiM0MzsJCQkJCQkJIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTsKJiM0MzsJCQkJCXJldHVybjsKJiM0MzsJCQkJfQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UICZhbXA7JmFtcDsgcHJvY2Vzc2VkKSB7CiYjNDM7CQkJCW1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIDApOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQogCiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSkKIAkJCQlicmVhazsKQEAgLTEyOTQsMTQgJiM0MzsxNTc3LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtpXSk7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7CiYjNDM7CX0KIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIAlpZiAoIXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSkKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7cnR3ZGV2ID0gcnR3ZGV2OwotCUlOSVRfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzE1LDYgJiM0MzsxNjAwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlpbnQgaTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tJmd0O3R4d3EpOwogCWtmcmVlKHJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKaW5kZXggNDU3ZThiMDIzODBlNWIuLmYxZjU5ZjgzMDFiOGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogLyogU0RJTyBUeCBDb250cm9sICovCiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkwJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKQomIzQzOyNkZWZpbmUgQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFCUJJVCg0KQogCiAvKlNESU8gc3RhdHVzIHRpbWVvdXQqLwogI2RlZmluZSBSRUdfU0RJT19USU1FT1VUCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMikKQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQAogLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqLwogI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlIJCQlCSVQoMjgpCiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRQkJQklUKDI5KQomIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLCQlcCiYjNDM7CShSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVCkKIAogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTQkJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KQpAQCAtMTQzLDcgJiM0MzsxNTIsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7CiB9OwogCiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7CiB9OwogCkBAIC0xNTksNiAmIzQzOzE2OCwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8gewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxOwogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsJYm9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19oaWdoOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX25vcm1hbDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19sb3c7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfcHViOwomIzQzOwlhdG9taWNfdCB0eF9vcXRfZnJlZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NlYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaAppbmRleCBlZmNmNDU0MzM5OTlhZi4uNzNmMmFmNjZlZmZlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNkZWZpbmUgUlRXX1NFQ19SWF9ERUNfRU4JCUJJVCgzKQogI2RlZmluZSBSVFdfU0VDX1RYX0JDX1VTRV9ESwkJQklUKDYpCiAjZGVmaW5lIFJUV19TRUNfUlhfQkNfVVNFX0RLCQlCSVQoNykKJiM0MzsjZGVmaW5lIFJUV19TRUNfQ0hLX0tFWUlECQlCSVQoOCkKIAogI2RlZmluZSBSVFdfU0VDX0VOR0lORV9FTgkJQklUKDkpCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0ODgKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMjAwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCBmb2N1c2luZyBvbiB0aGUgUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBXaUZpL0JUIGNvZXhpc3RlbmNlLCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZy4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1NESU8uLi4gdGhhdCYjMzk7cyBhIHByb2JsZW0uJiMzNDsgIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBjb2V4LmNgLCBgZncuY2AsIGBtYWM4MDIxMS5jYCwgYG1haW4uY2AsIGByeC5jYCwgYW5kLCBjcnVjaWFsbHksIGBzZGlvLmNgLiAgVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYW4gU0RJTyBkcml2ZXIsIGFuZCBtZW50aW9ucyB0aGUgODcyM0JTIFNESU8gaGFyZHdhcmUuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjb2RlIGV2ZW4gKnJ1bnMqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGlzIGRyaXZlciwgYHJ0dzg4YCwgaXMgYSBSZWFsdGVrIHdpcmVsZXNzIGRyaXZlciwgYW5kIHRoZSBjaGFuZ2VzIHRvIGBzZGlvLmNgIGltbWVkaWF0ZWx5IHN1Z2dlc3QgYW4gU0RJTyBpbnRlcmZhY2UgaXMgaW52b2x2ZWQuIFRoZSBpc3N1ZSBpcyB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgaGF2ZSBhIGdvb2QsIGdlbmVyaWMgU0RJTyBlbXVsYXRvciB0aGF0IHN5emthbGxlciBjYW4gdXNlLiAgU3l6a2FsbGVyIGRvZXMgYSBncmVhdCBqb2Igd2l0aCBQQ0kgYW5kIFVTQiwgdmlhIGBkdW1teV9oY2RgIGFuZCBgcmF3LWdhZGdldGAsIGJ1dCB0aGUgU0RJTyBpbnRlcmZhY2UgaGFzIG5vdCBiZWVuIHByaW9yaXRpemVkLgoKRG9lcyBzeXprYWxsZXIgZnV6eiBTRElPPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBObywgU0RJTyBpc24mIzM5O3QgZGlyZWN0bHkgc3VwcG9ydGVkLiAgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3Mgc29tZWhvdyByZWFjaGFibGUgdmlhIGBtYWM4MDIxMWAuIFRoZSBkcml2ZXIgKnJlZ2lzdGVycyogd2l0aCBtYWM4MDIxMSwgYnV0IHRvIGdldCB0byB0aGUgZHJpdmVyLXNwZWNpZmljIGNvZGUsIHlvdSBuZWVkIHRoZSBhY3R1YWwgaGFyZHdhcmUgdG8gYmUgcHJlc2VudCBhbmQgcHJvYmVkLiBJZiBubyBoYXJkd2FyZSwgbm8gcHJvYmUsIG5vIGRyaXZlciBjYWxsYmFja3MuCgpDYW4gdGhlcmUgYmUgYW55IGVtdWxhdGlvbiBmb3IgU0RJTyBkZXZpY2VzPyBMZXQmIzM5O3MgY2hlY2suIFN0YW5kYXJkIFFFTVUsIGFzIHN5emthbGxlciB1c2VzIGl0LCBkb2VzbiYjMzk7dCBoYXZlIGEgd2F5IHRvIGVtdWxhdGUgU0RJTy4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiAodmlhIGR1bW15X2hjZC9yYXctZ2FkZ2V0KSBhbmQgUENJICh2aWEgc29tZSBiYXNpYyBQQ0kgZnV6emluZyBvciBqdXN0IHByb2JpbmcgaWYgUUVNVSBoYXMgdGhlIGRldmljZSkuIEJ1dCBTRElPIGlzIG5vdCBzdXBwb3J0ZWQuCgpMZXQmIzM5O3MgZG8gYSBrZXJuZWwgc2VhcmNoIGZvciBgcnR3ODhgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgaW50ZXJmYWNlcy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jYC4gT2theSwgbGV0IG1lIGNvbmZpcm0gaWYgYHJ0dzg4YCBoYXMgUENJIG9yIFVTQiBpbnRlcmZhY2VzLiBZZXMsIGl0IGRvZXMgc3VwcG9ydCBQQ0ksIFVTQiwgYW5kIFNESU8uIFRoZSBuZXcgY29kZSBoZWF2aWx5IHJlbGllcyBvbiBgcnR3X2lzXzg3MjNicyhydHdkZXYpYC4gVGhpcyBjaGVja3MgdGhlIGBydHdkZXYtJmd0O2NoaXAtJmd0O2lkYCBhbmQgYHJ0d2Rldi0mZ3Q7aGNpLnR5cGVgIHRvIGJlIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhbmQgYFJUV19IQ0lfVFlQRV9TRElPYC4gIEluIHNob3J0LCB0aGlzIGlzIFNESU8tc3BlY2lmaWMgY29kZS4KClNvLCBzaW5jZSBgcnR3X2lzXzg3MjNic2AgZGVtYW5kcyBgUlRXX0hDSV9UWVBFX1NESU9gLCB0aGUgc3BlY2lmaWMgY2hhbmdlcyBhcmUgb25seSByZWxldmFudCBpZiBhbiBTRElPIGRldmljZSBpcyBhY3R1YWxseSAqcHJvYmVkKi4KCkNhbiB3ZSBkbyB0aGF0IGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgU0RJTyBlbXVsYXRpb24uIEkgbmVlZCB0byBiZSBleHBsaWNpdDogdGhlIGNvZGUgZ3VhcmRlZCBieSBgcnR3X2lzXzg3MjNic2AgKmlzIHVucmVhY2hhYmxlKiBpbiB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50LgoKQnV0LCBhcmUgdGhlcmUgYW55IGNoYW5nZXMgdGhhdCBhcmUgKm5vdCogZ3VhcmRlZCBieSB0aGlzIHNwZWNpZmljIGNoZWNrPyBMZXQmIzM5O3MgYW5hbHl6ZSBgY29leC5jYCwgYGZ3LmNgLCBgbWFjODAyMTEuY2AsIGByeC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiBhbnkgY2hhbmdlcyBhcmUgdHJpZ2dlcmVkIGZvciBvdGhlciBoYXJkd2FyZSBpbnRlcmZhY2VzLgoKYGNvZXguY2AmIzM5O3MgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgQlQgY29leCBhbmQgc2NhbjsgYWxsIGFyZSBkZXBlbmRlbnQgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4KCmBmdy5jYCBoYXMgYSBuZXcgZnVuY3Rpb24sIGBydHdfZndfc2V0X2dudF9idGAuICBUaGF0JiMzOTtzIDg3MjNicy1zcGVjaWZpYy4gVGhlcmUgaXMgYSBjaGFuZ2UgaW4gIGBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2VgIHdoaWNoIGp1c3QgYWRkcyBgaXNfODcyM2JzX3NkaW9gIHRvIHRoZSBvciBjb25kaXRpb24uCgpgbWFjODAyMTEuY2AgaGFzIHNvbWUgY2hhbmdlczogVGhlIGBhdXRoX3N5bmNfcnhgIGNvZGUgaGFzIGxvZ2ljIHRoYXQgYXZvaWRzIHJ1bm5pbmcgb24gdGhlIFNESU8gaGFyZHdhcmUuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBndWFyZGVkIGJ5IHRoaXMuCgpgcnguY2AgIGluY2x1ZGVzIHRoZSBzYW1lIGNvZGUgb24gODcwM0IgaGFyZHdhcmUsIGJ1dCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGNvbmRpdGlvbmVkIGJ5IHRoaXMgbmV3IGhhcmR3YXJlLgoKVGhlIFNESU8gZHJpdmVyIGl0c2VsZiwgYHNkaW8uY2AsIHdvbiYjMzk7dCBiZSB0cmlnZ2VyZWQuCgpUaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgY29uZmluZWQgdG8gYHNkaW8uY2Agb3IgZ2F0ZWQgYnkgdGhlIFNESU8gZGV2aWNlIGNoZWNrLCB3aGljaCByZXF1aXJlcyBhbgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBXaUZpL0JsdWV0b290aCBjb2V4aXN0ZW5jZSBhbmQgbW9kaWZpZXMgU0RJTy1zcGVjaWZpYyBUWC9SWCBoYW5kbGluZy4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGNvbmZpbmVkIHRvIHRoZSBTRElPIGludGVyZmFjZSAoc2Rpby5jKSBvciBleHBsaWNpdGx5IGd1YXJkZWQgYnkgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIHdoaWNoIGNoZWNrcyBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpIHVzZWQgYnkgc3l6a2FsbGVyIGRvIG5vdCBlbXVsYXRlIHBoeXNpY2FsIFNESU8gV2lGaSBjYXJkcywgdGhpcyBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMyOjQ1Ljg5MzU1NjAyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTYwNTExMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMyOjQ1Ljg5MzU2MzA3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNzg4ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTA4OWI3ZDU5YWI5ZDkzZWE1MWE3MTQyZjJlNDkxZTBjMGNmNTE2YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXFxuaW5kZXggMzdjMzM2ZGVmNDE5MTUuLjMxNGIyYTM2OGE4ZjE3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmNcXG5AQCAtMTQ0Myw2ICsxNDQzLDE5MSBAQCBzdGF0aWMgdm9pZCBydHdfY29leF9zZXRfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSwgdTggcGhhc2UpXFxuICNkZWZpbmUgY2FzZV9BTEdPKHNyYykgXFxcXFxcbiBcXHRjYXNlIENPRVhfQUxHT18jI3NyYzogcmV0dXJuICNzcmNcXG4gXFxuKy8qIDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UgYW50ZW5uYSBoYW5kbGluZy4gT24gQlQtZGlzYWJsZWQgYm9hcmRzIHRoZVxcbisgKiBzY2FuL2F1dGggd2luZG93IHN0aWxsIHJvdXRlcyB0aHJvdWdoIHRoZSBQVEEgbXV4OyB0aGVzZSBoZWxwZXJzIGZvcmNlIHRoZVxcbisgKiB2ZW5kb3Itc2hhcGVkIFdpRmktb3duZWQgYW50ZW5uYSBwYXRoIHNvIGRpcmVjdGVkIG1hbmFnZW1lbnQgVFggcmVhY2hlcyBhaXIuXFxuKyAqL1xcbisjZGVmaW5lIFJFR184NzIzQlNfQlRfQ09FWF9DVFJMXFx0XFx0MHgwMDM5XFxuKyNkZWZpbmUgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHXFx0XFx0MHgwOTMwXFxuKyNkZWZpbmUgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMVxcdFxcdDB4MDk0NFxcbisjZGVmaW5lIFJFR184NzIzQlNfQkJfQU5UX0JVRlxcdFxcdDB4MDk3NFxcbisjZGVmaW5lIFJUVzg3MjNCU19DT0VYX0hfV0xBTl9BQ1RJVkVcXHQweDE4MDAxMDFiXFxuK1xcbitzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYW50X2lzX2F1eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiAhIShydHdkZXYtXFx1MDAzZWVmdXNlLmJ0X3NldHRpbmcgXFx1MDAyNiBCSVQoNikpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2IHJ0d2Rldi1cXHUwMDNlY29leC5zdGF0LmJ0X2Rpc2FibGVkO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRyZXR1cm4gcnR3X2NvZXhfODcyM2JzX2FudF9pc19hdXgocnR3ZGV2KSA/IDB4ODAgOiAweDIwMDtcXG4rfVxcbitcXG4rLyogV3JpdGUgQkJfU0VMX0JURywgcmV0cnlpbmcgb25jZSB3aXRoIFNZU19GVU5DIEJCIHJlc2V0IGlmIHRoZSBmaXJzdFxcbisgKiB3cml0ZSBkb2VzIG5vdCBzdGljayAoUkYvQkIgY2xvY2sgbWF5IGhhdmUgYmVlbiBnYXRlZCkuXFxuKyAqL1xcbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiB2YWx1ZSlcXG4re1xcbitcXHR1OCBzeXNfZnVuY19iZWZvcmU7XFxuK1xcdHUzMiByZWFkYmFjaztcXG4rXFxuK1xcdHN5c19mdW5jX2JlZm9yZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TWVNfRlVOQ19FTik7XFxuK1xcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFxcdTAwMjYgKEJJVCgwKSB8IEJJVCgxKSkpICE9IChCSVQoMCkgfCBCSVQoMSkpKSB7XFxuK1xcdFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAsIDExKTtcXG4rXFx0fVxcbitcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQiwgdmFsdWUpO1xcbitcXHRyZWFkYmFjayA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQik7XFxuK1xcdGlmIChyZWFkYmFjayA9PSB2YWx1ZSlcXG4rXFx0XFx0cmV0dXJuIHJlYWRiYWNrO1xcbitcXG4rXFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XFxuK1xcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOLCBCSVQoMCkgfCBCSVQoMSkpO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XFxuK1xcbitcXHRyZXR1cm4gcnR3X3JlYWQzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCKTtcXG4rfVxcbitcXG4rc3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdfY29leF84NzIzYnNfd3JpdGVfYmJfc2VsX2J0ZyhydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGhpZ2gpXFxuK3tcXG4rXFx0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGhpZ2gpIHtcXG4rXFx0XFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfQlRfQ09FWF9UQUJMRV9ILFxcbitcXHRcXHRcXHQgICAgUlRXODcyM0JTX0NPRVhfSF9XTEFOX0FDVElWRSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfVFhfQ0NLLCBmYWxzZSk7XFxuK1xcdFxcdHJ0d19jb2V4X3NldF93bF9wcmlfbWFzayhydHdkZXYsIENPRVhfV0xQUklfUlhfQ0NLLCBmYWxzZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGtlZXBfcHRhX293bmVyKVxcbit7XFxuK1xcdHUzMiBiZWZvcmUsIGFmdGVyO1xcbitcXG4rXFx0YmVmb3JlID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19QQURfQ1RSTDEpO1xcbitcXHRhZnRlciA9IGJlZm9yZSBcXHUwMDI2IH4oQklUX0xOQU9OX1dMQlRfU0VMIHwgQklUX1NXX0RQRFRfU0VMX0RBVEEpO1xcbitcXHRpZiAoa2VlcF9wdGFfb3duZXIpXFxuK1xcdFxcdGFmdGVyIHw9IEJJVF9QQVBFX1dMQlRfU0VMO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFmdGVyIFxcdTAwMjY9IH5CSVRfUEFQRV9XTEJUX1NFTDtcXG4rXFx0aWYgKGFmdGVyICE9IGJlZm9yZSlcXG4rXFx0XFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUEFEX0NUUkwxLCBhZnRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHJ0d19yZWFkOChydHdkZXYsIFJFR19HTlRfQlQpID09IDB4MDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19CVF9DT0VYX0VOSF9JTlRSX0NUUkwpID09IDB4MGMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0d19md19zZXRfZ250X2J0KHJ0d2RldiwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGFudF90YXJnZXQ7XFxuK1xcbitcXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhbnRfdGFyZ2V0ID0gcnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChydHdkZXYpO1xcbitcXG4rXFx0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcXG4rXFx0cnR3X2NvZXhfc2V0X2FudF9zd2l0Y2gocnR3ZGV2LCBDT0VYX1NXSVRDSF9DVFJMX0JZX1BUQSxcXG4rXFx0XFx0XFx0XFx0Q09FWF9TV0lUQ0hfVE9fTk9DQVJFKTtcXG4rXFx0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHJ0d2RldiwgYW50X3RhcmdldCk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHJ0d2RldiwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTggc3lzX2Z1bmNfYmVmb3JlO1xcbitcXG4rXFx0c3lzX2Z1bmNfYmVmb3JlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOKTtcXG4rXFx0aWYgKChzeXNfZnVuY19iZWZvcmUgXFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcXG4rXFx0XFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMCwgMTEpO1xcbitcXHR9XFxuK1xcbitcXHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfODcyM0JTX0JUX0NPRVhfQ1RSTCwgQklUKDMpLCAweDEpO1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQlVGLCAweGZmKTtcXG4rXFx0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMSwgMHgzLCAweDMpO1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHLCAweDc3KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2FwcGx5X3NjYW5fdGFibGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRydHdkZXYtXFx1MDAzZWNvZXguZG0uY3VyX3RhYmxlID0gMjtcXG4rXFx0cnR3X2NvZXhfc2V0X3RhYmxlKHJ0d2RldiwgdHJ1ZSwgMHg1YTVhNWE1YSwgMHg1YTVhNWE1YSk7XFxuK31cXG4rXFxuKy8qIE5vbi1jb25uZWN0ZWQgc2Nhbi9hdXRoIHdvcmthcm91bmQ6IFBTLVRETUEgdHlwZSA4IG9mZiwgUFRBIGFudGVubmEgcGF0aCxcXG4rICogY29leCB0YWJsZSB0eXBlIDIgKG1hdGNoZXMgdGhlIHZlbmRvciBub24tY29ubmVjdGVkIGFyYml0cmF0aW9uKS5cXG4rICovXFxuK3ZvaWQgcnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfY29leF9kbSAqY29leF9kbSA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWNvZXguZG07XFxuK1xcdHN0cnVjdCBydHdfY29leF9zdGF0ICpjb2V4X3N0YXQgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2Vjb2V4LnN0YXQ7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y29leF9kbS1cXHUwMDNlY3VyX3BzX3RkbWFfb24gPSBmYWxzZTtcXG4rXFx0Y29leF9kbS1cXHUwMDNlY3VyX3BzX3RkbWEgPSA4O1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbMF0gPSAweDA4O1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbMV0gPSAweDAwO1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbMl0gPSAweDAwO1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbM10gPSAweDAwO1xcbitcXHRjb2V4X2RtLVxcdTAwM2Vwc190ZG1hX3BhcmFbNF0gPSAweDAwO1xcbitcXG4rXFx0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHJ0d2Rldik7XFxuK1xcdHJ0d19jb2V4X3NldF9hbnRfcGF0aChydHdkZXYsIHRydWUsIENPRVhfU0VUX0FOVF8yRyk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHJ0d2Rldik7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19hcHBseV9zY2FuX3RhYmxlKHJ0d2Rldik7XFxuK1xcdGlmIChjb2V4X3N0YXQtXFx1MDAzZWJ0X2Rpc2FibGVkKVxcbitcXHRcXHRydHdfY29leF84NzIzYnNfc2V0X2Nja19wcmkocnR3ZGV2LCB0cnVlKTtcXG4rXFx0cnR3X2NvZXhfODcyM2JzX3JlYXNzZXJ0X3B0YV9hbnQocnR3ZGV2KTtcXG4rXFx0cnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwocnR3ZGV2LCB0cnVlKTtcXG4rfVxcbitcXG4rLyogUmVwbGF5ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHN0YXJ0X2NsbnRfam9pbigpL2F1dGg6IEJUX0lORk8gKyBQUy1URE1BIHR5cGUgOFxcbisgKiB0aGVuIHRoZSBmb3JjZWQgV2lGaSBQVEEgYW50ZW5uYSBwYXRoLCBzbyB0aGUgYXV0aCB3aW5kb3cgaXMgY2xlYW4uXFxuKyAqL1xcbit2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZydHdkZXYtXFx1MDAzZW11dGV4KTtcXG4rXFxuK1xcdGlmICghcnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0d19md19xdWVyeV9idF9pbmZvKHJ0d2Rldik7XFxuK1xcdHJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApO1xcbitcXHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcXG4rXFx0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHJ0d2Rldik7XFxuK1xcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBjaGFyICpydHdfY29leF9nZXRfYWxnb19zdHJpbmcodTggYWxnbylcXG4ge1xcbiBcXHRzd2l0Y2ggKGFsZ28pIHtcXG5AQCAtMjc3MCw3ICsyOTU1LDcgQEAgdm9pZCBydHdfY29leF9wb3dlcl9vbl9zZXR0aW5nKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdGNvZXgtXFx1MDAzZXN0b3BfZG0gPSB0cnVlO1xcbiBcXHRjb2V4LVxcdTAwM2V3bF9yZl9vZmYgPSBmYWxzZTtcXG4gXFxuLVxcdC8qIGVuYWJsZSBCQiwgd2UgY2FuIHdyaXRlIDB4OTQ4ICovXFxuK1xcdC8qIGVuYWJsZSBCQiwgc28gQkJfU0VMX0JURyBpcyB3cml0YWJsZSAqL1xcbiBcXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19TWVNfRlVOQ19FTixcXG4gXFx0XFx0ICAgICAgIEJJVF9GRU5fQkJfR0xCX1JTVCB8IEJJVF9GRU5fQkJfUlNUQik7XFxuIFxcbkBAIC0yODc3LDYgKzMwNjIsMzMgQEAgdm9pZCBydHdfY29leF9zY2FuX25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKVxcbiBcXHRjb2V4LVxcdTAwM2VmcmVlemUgPSBmYWxzZTtcXG4gXFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xcbiBcXG4rXFx0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IGtlZXAgdGhlIHNjYW4vYXV0aCBQVEEgYW50ZW5uYSBzdGF0ZSB0aGVcXG4rXFx0ICogdmVuZG9yIHVzZXMgYW5kIHNraXAgdGhlIGdlbmVyaWMgY29leCBydW4uIEF0IHNjYW4gc3RhcnQgKGZpcm13YXJlXFxuK1xcdCAqIGhhcyBiZWVuIHVwIGxvbmcgZW5vdWdoIGZvciBzdGFibGUgUlggRE1BKSByZXBsYXkgdGhlIHZlbmRvciBCVF9NUCAvXFxuK1xcdCAqIEJUX0lORk8gcXVlcmllcywgdGhlbiByZS1lc3RhYmxpc2ggdGhlIHNjYW4tcGF0aCBQVEEgc2V0dXAuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpIHtcXG4rXFx0XFx0aWYgKHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUXzJHIHx8IHR5cGUgPT0gQ09FWF9TQ0FOX1NUQVJUKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBydHdfY29leF9pbmZvX3JlcSByZXEgPSB7fTtcXG4rXFxuK1xcdFxcdFxcdGNvZXhfc3RhdC1cXHUwMDNlY250X3dsW0NPRVhfQ05UX1dMX1NDQU5BUF0gPSAwO1xcbitcXHRcXHRcXHRjb2V4X3N0YXQtXFx1MDAzZXdsX2hpX3ByaV90YXNrMiA9IHRydWU7XFxuK1xcbitcXHRcXHRcXHRyZXEuc2VxID0gMHgwZTtcXG4rXFx0XFx0XFx0cmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1NVUFBfVkVSO1xcbitcXHRcXHRcXHRydHdfZndfcXVlcnlfYnRfbXBfaW5mbyhydHdkZXYsIFxcdTAwMjZyZXEpO1xcbitcXHRcXHRcXHRyZXEuc2VxID0gMHgwZjtcXG4rXFx0XFx0XFx0cmVxLm9wX2NvZGUgPSBCVF9NUF9JTkZPX09QX1BBVENIX1ZFUjtcXG4rXFx0XFx0XFx0cnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCBcXHUwMDI2cmVxKTtcXG4rXFx0XFx0XFx0cnR3X2Z3X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTtcXG4rXFxuK1xcdFxcdFxcdHJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQocnR3ZGV2KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Y29leF9zdGF0LVxcdTAwM2V3bF9oaV9wcmlfdGFzazIgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0eXBlID09IENPRVhfU0NBTl9TVEFSVF81Rykge1xcbiBcXHRcXHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19DT0VYLFxcbiBcXHRcXHRcXHRcXFwiW0JUQ29leF0sIFNDQU4gU1RBUlQgbm90aWZ5ICg1RylcXFxcblxcXCIpO1xcbkBAIC0yOTM4LDYgKzMxNTAsMTcgQEAgdm9pZCBydHdfY29leF9jb25uZWN0X25vdGlmeShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCB0eXBlKVxcbiBcXHRpZiAoY29leC1cXHUwMDNlbWFudWFsX2NvbnRyb2wgfHwgY29leC1cXHUwMDNlc3RvcF9kbSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IHRoZSB2ZW5kb3IgQ29ubmVjdE5vdGlmeSgpIGVhcmx5LXJldHVybnNcXG4rXFx0ICogd2l0aG91dCBzZW5kaW5nIEgyQ3M7IHNjYW5fd29ya2Fyb3VuZCBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZSBQVEFcXG4rXFx0ICogcGF0aCAvIGNvZXggdGFibGUgLyBQUy1URE1BLiBLZWVwIG9ubHkgdGhlIHJlZ2lzdGVyLWxldmVsIFBUQVxcbitcXHQgKiByZWFzc2VydGlvbiBhdCBhc3NvY2lhdGUtc3RhcnQuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpIHtcXG4rXFx0XFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpXFxuK1xcdFxcdFxcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xcbiBcXG4gXFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfNUdfU1RBUlQpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxcbmluZGV4IGMzOThiZTgzOTFmN2IwLi5jNThhZTBhNTBiMzBiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oXFxuQEAgLTQzMCw0ICs0MzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2NvZXhfYWN0aXZlX3F1ZXJ5X2J0X2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cnR3X2NvZXhfcXVlcnlfYnRfaW5mbyhydHdkZXYpO1xcbiB9XFxuIFxcbit2b2lkIHJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XFxuK3ZvaWQgcnR3X2NvZXhfODcyM2JzX3ByZV9hdXRoX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTtcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcXG5pbmRleCA5NDVmZWRjZDM3NWI2Mi4uN2MxNzA4NmNhYzMyYzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXFxuQEAgLTc4Niw2ICs3ODYsMTcgQEAgdm9pZCBydHdfZndfbWVkaWFfc3RhdHVzX3JlcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBtYWNfaWQsIGJvb2wgY29ubmVjdClcXG4gXFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcXG4gfVxcbiBcXG4rLyogODcyM0JTIFNESU86IHNldCB0aGUgZmlybXdhcmUgR05UX0JUIHN0YXRlICgwID0gV2lGaSBvd25zIHRoZSBhbnRlbm5hKS4gKi9cXG4rdm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSlcXG4re1xcbitcXHR1OCBoMmNfcGt0W0gyQ19QS1RfU0laRV0gPSB7MH07XFxuK1xcbitcXHRTRVRfSDJDX0NNRF9JRF9DTEFTUyhoMmNfcGt0LCBIMkNfQ01EX0dOVF9CVCk7XFxuK1xcdFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgc3RhdGUpO1xcbitcXG4rXFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcXG4rfVxcbitcXG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d190cmFmZmljX3N0YXRzICpzdGF0cyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZXN0YXRzO1xcbkBAIC0xNDY2LDEwICsxNDc3LDE0IEBAIHZvaWQgcnR3X2FkZF9yc3ZkX3BhZ2Vfc3RhKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcdHJ0d19hZGRfcnN2ZF9wYWdlKHJ0d2RldiwgcnR3dmlmLCBSU1ZEX0xQU19QR19JTkZPLCB0cnVlKTtcXG4gfVxcbiBcXG4rLyogUkVHX0RXQkNOMV9DVFJMIGJpdCAyMCAoU1dfQkNOX1NFTCBmb3IgcG9ydCAwKSwgcmVsYXRpdmUgdG8gYnl0ZSArMiAqL1xcbisjZGVmaW5lIEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDBcXHQoMjAgLSAxNilcXG4rXFxuIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXFxuIFxcdFxcdFxcdFxcdHU4ICpidWYsIHUzMiBzaXplKVxcbiB7XFxuLVxcdHU4IGJja3BbM107XFxuK1xcdGNvbnN0IGJvb2wgaXNfODcyM2JzX3NkaW8gPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XFxuK1xcdHU4IGJja3BbNF07XFxuIFxcdHU4IHZhbDtcXG4gXFx0dTE2IHJzdmRfcGdfaGVhZDtcXG4gXFx0dTMyIGJjbl92YWxpZF9hZGRyO1xcbkBAIC0xNDk5LDEzICsxNTE0LDI4IEBAIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXFxuIFxcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsXFxuIFxcdFxcdCAgIChiY2twWzJdIFxcdTAwMjYgfkJJVF9FTl9CQ05fRlVOQ1RJT04pIHwgQklUX0RJU19UU0ZfVURUKTtcXG4gXFxuLVxcdGlmIChydHdfaGNpX3R5cGUocnR3ZGV2KSA9PSBSVFdfSENJX1RZUEVfUENJRSkge1xcbitcXHQvKiBDbGVhciBCSVRfRU5fQkNOUV9ETCBzbyB0aGUgY2hpcCBkb2VzIG5vdCB0cmVhdCB0aGUgcmVzZXJ2ZWQtcGFnZVxcbitcXHQgKiB1cGxvYWQgYXMgYSByZWFsIGJlYWNvbjsgb3RoZXJ3aXNlIEJJVF9CQ05fVkFMSUQgbmV2ZXIgYXNzZXJ0cy4gVGhlXFxuK1xcdCAqIHZlbmRvciBydGw4NzIzYnMgZHJpdmVyIGRvZXMgdGhpcyB1bmNvbmRpdGlvbmFsbHk7IHJ0dzg4IG9ubHkgZGlkIGl0XFxuK1xcdCAqIGZvciBQQ0llLCB3aGljaCBsZWZ0IDg3MjNCUyBTRElPJ3MgQkNOX1ZBTElEIGhhbmRzaGFrZSBmYWlsaW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFIHx8IGlzXzg3MjNic19zZGlvKSB7XFxuIFxcdFxcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMik7XFxuIFxcdFxcdGJja3BbMV0gPSB2YWw7XFxuIFxcdFxcdHZhbCBcXHUwMDI2PSB+KEJJVF9FTl9CQ05RX0RMIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4gXFx0XFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMiwgdmFsKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogODcyM0JTIFNESU86IHBvaW50IHRoZSBTVyBiZWFjb24gZG93bmxvYWQgcGF0aCBhdCBwb3J0IDAsIGVsc2VcXG4rXFx0ICogQklUX0JDTl9WQUxJRCBpcyBuZXZlciBhc3NlcnRlZCBhZnRlciB0aGUgU0RJTyB1cGxvYWQgY29tcGxldGVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzXzg3MjNic19zZGlvKSB7XFxuK1xcdFxcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCArIDIpO1xcbitcXHRcXHRiY2twWzNdID0gdmFsO1xcbitcXHRcXHR2YWwgXFx1MDAyNj0gfkJJVChCSVRfT0ZGU0VUX0RXQkNOMV9TV19CQ05fU0VMX1BPUlQwKTtcXG4rXFx0XFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCArIDIsIHZhbCk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IHJ0d19oY2lfd3JpdGVfZGF0YV9yc3ZkX3BhZ2UocnR3ZGV2LCBidWYsIHNpemUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHJ0d19lcnIocnR3ZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIGRhdGEgdG8gcnN2ZCBwYWdlXFxcXG5cXFwiKTtcXG5AQCAtMTUyNiwxMSArMTU1NiwxMyBAQCBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLFxcbiBcXHR9XFxuIFxcbiByZXN0b3JlOlxcbitcXHRpZiAoaXNfODcyM2JzX3NkaW8pXFxuK1xcdFxcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgKyAyLCBiY2twWzNdKTtcXG4gXFx0cnN2ZF9wZ19oZWFkID0gcnR3ZGV2LVxcdTAwM2VmaWZvLnJzdmRfYm91bmRhcnk7XFxuIFxcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX0ZJRk9QQUdFX0NUUkxfMixcXG4gXFx0XFx0ICAgIHJzdmRfcGdfaGVhZCB8IEJJVF9CQ05fVkFMSURfVjEpO1xcbiBcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLCBiY2twWzJdKTtcXG4tXFx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKVxcbitcXHRpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pXFxuIFxcdFxcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRldIV19UWFFfQ1RSTCArIDIsIGJja3BbMV0pO1xcbiBcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0NSICsgMSwgYmNrcFswXSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcXG5pbmRleCA0OGFkOWNlYWI2ZWExMi4uZjVlZDY1YzQ2MzUwZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuQEAgLTU3Miw2ICs1NzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2gyY19wa3Rfc2V0X2hlYWRlcih1OCAqaDJjX3BrdCwgdTggc3ViX2lkKVxcbiAjZGVmaW5lIEgyQ19DTURfUVVFUllfQlRfTVBfSU5GT1xcdDB4NjdcXG4gI2RlZmluZSBIMkNfQ01EX0JUX1dJRklfQ09OVFJPTFxcdFxcdDB4NjlcXG4gI2RlZmluZSBIMkNfQ01EX1dJRklfQ0FMSUJSQVRJT05cXHQweDZkXFxuKyNkZWZpbmUgSDJDX0NNRF9HTlRfQlRcXHRcXHRcXHQweDZlXFxuICNkZWZpbmUgSDJDX0NNRF9RVUVSWV9CVF9ISURfSU5GT1xcdDB4NzNcXG4gXFxuICNkZWZpbmUgSDJDX0NNRF9LRUVQX0FMSVZFXFx0XFx0MHgwM1xcbkBAIC02ODQsNiArNjg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19oMmNfcGt0X3NldF9oZWFkZXIodTggKmgyY19wa3QsIHU4IHN1Yl9pZClcXG4gXFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAxLCB2YWx1ZSwgR0VOTUFTSygzMSwgMjQpKVxcbiAjZGVmaW5lIFNFVF9RVUVSWV9CVF9JTkZPKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbiBcXHRsZTMycF9yZXBsYWNlX2JpdHMoKF9fbGUzMiAqKShoMmNfcGt0KSArIDB4MDAsIHZhbHVlLCBCSVQoOCkpXFxuKyNkZWZpbmUgU0VUX0dOVF9CVF9TVEFURShoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuK1xcdGxlMzJwX3JlcGxhY2VfYml0cygoX19sZTMyICopKGgyY19wa3QpICsgMHgwMCwgdmFsdWUsIEJJVCg4KSlcXG4gI2RlZmluZSBTRVRfV0xfQ0hfSU5GT19MSU5LKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gXFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgR0VOTUFTSygxNSwgOCkpXFxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fQ0hOTChoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuQEAgLTg0OSw2ICs4NTIsNyBAQCB2b2lkIHJ0d19md19zZW5kX3Jzc2lfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSk7XFxuIHZvaWQgcnR3X2Z3X3NlbmRfcmFfaW5mbyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgcnR3X3N0YV9pbmZvICpzaSxcXG4gXFx0XFx0XFx0IGJvb2wgcmVzZXRfcmFfbWFzayk7XFxuIHZvaWQgcnR3X2Z3X21lZGlhX3N0YXR1c19yZXBvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkLCBib29sIGNvbm4pO1xcbit2b2lkIHJ0d19md19zZXRfZ250X2J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHN0YXRlKTtcXG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xcbiB2b2lkIHJ0d19md19iZWFjb25fZmlsdGVyX2NvbmZpZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGNvbm5lY3QsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jXFxuaW5kZXggNzY2ZjIyZDMxMDc5ZWUuLjkxMDE0YThlMjQyYjMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xcbkBAIC0xNSw2ICsxNSw0NjMgQEBcXG4gI2luY2x1ZGUgXFxcIndvdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic2FyLmhcXFwiXFxuIFxcbisvKiA4NzIzQlMgU0RJTzogcmVjb3JkIGEgYmVhY29uL3Byb2JlLXJlc3Agc2VlbiBmcm9tIHRoZSB0YXJnZXQgQlNTSUQgZHVyaW5nXFxuKyAqIHRoZSBwcmUtYXV0aCB3aW5kb3cgc28gdGhlIGpvaW4gc2VxdWVuY2UgKG1nZF9wcmVwYXJlX3R4KSBjYW4gd2FpdCBmb3IgaXQsXFxuKyAqIG1pcnJvcmluZyB0aGUgdmVuZG9yIHN0YXJ0X2NsbnRfam9pbigpLiBDYWxsZWQgZnJvbSB0aGUgU0RJTyBSWCBwYXRoLlxcbisgKi9cXG4rdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3J4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MzIgbGVuLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHJ0d19yeF9wa3Rfc3RhdCAqcGt0X3N0YXQsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRfX2xlMTYgZmMgPSBoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2w7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cXHUwMDNlZmxhZ3MpIHx8XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlY3JjX2VyciB8fCBwa3Rfc3RhdC1cXHUwMDNlaWN2X2VycilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGZjKSBcXHUwMDI2XFx1MDAyNiAhaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoc3luYy1cXHUwMDNlYWN0aXZlIFxcdTAwMjZcXHUwMDI2IGV0aGVyX2FkZHJfZXF1YWwoaGRyLVxcdTAwM2VhZGRyMywgc3luYy1cXHUwMDNlYnNzaWQpKSB7XFxuK1xcdFxcdHN5bmMtXFx1MDAzZXNlZW4gPSB0cnVlO1xcbitcXHRcXHRzeW5jLVxcdTAwM2VzZWVuX2NvdW50Kys7XFxuK1xcdFxcdHdha2VfdXAoXFx1MDAyNnN5bmMtXFx1MDAzZXdhaXQpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN5bmMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHJ0dzg3MjNic19hdXRoX3N5bmNfcngpO1xcbitcXG4rLyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqL1xcbitcXG4rI2RlZmluZSBSVFc4NzIzQlNfSk9JTl9SRVRSWV9MSU1JVFxcdFxcdDB4MzBcXG4rI2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfRkFMTEJBQ0tfTVNcXHQxMjBcXG4rI2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUlOX01TXFx0XFx0ODBcXG4rI2RlZmluZSBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TXFx0XFx0MTYwXFxuKyNkZWZpbmUgUlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lIFJUVzg3MjNCU19TSE9SVF9TTE9UX1RJTUVcXHRcXHQ5XFxuKyNkZWZpbmUgUlRXODcyM0JTX0xPTkdfU0xPVF9USU1FXFx0XFx0MjBcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xTVxcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJNXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNV81TVxcdFxcdFxcdEJJVCgyKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzExTVxcdFxcdFxcdEJJVCgzKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzZNXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfOU1cXHRcXHRcXHRCSVQoNSlcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xMk1cXHRcXHRcXHRCSVQoNilcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8xOE1cXHRcXHRcXHRCSVQoNylcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yNE1cXHRcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8zNk1cXHRcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl80OE1cXHRcXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNTRNXFx0XFx0XFx0QklUKDExKVxcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSX0NDS19SQVRFUyBcXFxcXFxuK1xcdChSVFc4NzIzQlNfUlJTUl8xTSB8IFJUVzg3MjNCU19SUlNSXzJNIHwgXFxcXFxcbitcXHQgUlRXODcyM0JTX1JSU1JfNV81TSB8IFJUVzg3MjNCU19SUlNSXzExTSlcXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRVxcdFxcdFxcdFJUVzg3MjNCU19SUlNSX0NDS19SQVRFU1xcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJHX0FMTE9XIFxcXFxcXG4rXFx0KFJUVzg3MjNCU19SUlNSX0NDS19SQVRFUyB8IFJUVzg3MjNCU19SUlNSXzZNIHwgXFxcXFxcbitcXHQgUlRXODcyM0JTX1JSU1JfMTJNIHwgUlRXODcyM0JTX1JSU1JfMjRNKVxcbitcXG4rLyogS2VlcCB0aGUgUkNSIGF0IHRoZSB2ZW5kb3IgdGFyZ2V0LW9ubHkgc3RhdGUgKEFNRiArIENCU1NJRCkgYWNyb3NzIHRoZSB3aG9sZVxcbisgKiBjb25uZWN0IHdpbmRvdywgbWF0Y2hpbmcgdGhlIHZlbmRvciBTVEEgcGF0aC4gYWNjZXB0X2FsbCBpcyBrZXB0IG9ubHkgZm9yIHRoZVxcbisgKiBjYWxsZXIncyBpbnRlbnQ7IGJvdGggcGF0aHMgY29udmVyZ2UgdGhlIGZpbHRlciB0byB0YXJnZXQtb25seS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGFjY2VwdF9hbGwpXFxuK3tcXG4rXFx0cnR3ZGV2LVxcdTAwM2VoYWwucmNyIHw9IEJJVF9BTUYgfCBCSVRfQ0JTU0lEX0RBVEEgfCBCSVRfQ0JTU0lEX0JDTjtcXG4rXFx0cnR3ZGV2LVxcdTAwM2VoYWwucmNyIFxcdTAwMjY9IH5CSVRfQUFQO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SQ1IsIHJ0d2Rldi1cXHUwMDNlaGFsLnJjcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHUxNiBzZWMgPSBydHdfcmVhZDE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcpO1xcbitcXG4rXFx0c2VjIHw9IFJUV19TRUNfQ0hLX0tFWUlEIHwgUlRXX1NFQ19UWF9ERUNfRU4gfCBSVFdfU0VDX1JYX0RFQ19FTjtcXG4rXFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2goc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBlbmFibGUpXFxuK3tcXG4rXFx0dTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7XFxuK1xcbitcXHRpZiAoZW5hYmxlKVxcbitcXHRcXHRzZWMgfD0gUlRXX1NFQ19UWF9CQ19VU0VfREsgfCBSVFdfU0VDX1RYX1VOSV9VU0VfREsgfFxcbitcXHRcXHQgICAgICAgUlRXX1NFQ19SWF9VTklfVVNFX0RLO1xcbitcXHRlbHNlXFxuK1xcdFxcdHNlYyBcXHUwMDI2PSB+KFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8IFJUV19TRUNfUlhfVU5JX1VTRV9ESyB8XFxuK1xcdFxcdFxcdCBSVFdfU0VDX1RYX0JDX1VTRV9ESyB8IFJUV19TRUNfUlhfQkNfVVNFX0RLKTtcXG4rXFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0cnR3X3dyaXRlOF9jbHIocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIEJJVF9ESVNfVFNGX1VEVCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIHNob3J0X3ByZWFtYmxlKVxcbit7XFxuK1xcdHU4IHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19SUlNSICsgMikgXFx1MDAyNiB+UlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVDtcXG4rXFxuK1xcdGlmIChzaG9ydF9wcmVhbWJsZSlcXG4rXFx0XFx0dmFsIHw9IFJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQ7XFxuK1xcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfUlJTUiArIDIsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgc2hvcnRfc2xvdClcXG4re1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1NMT1QsXFxuK1xcdFxcdCAgIHNob3J0X3Nsb3QgPyBSVFc4NzIzQlNfU0hPUlRfU0xPVF9USU1FIDpcXG4rXFx0XFx0XFx0XFx0UlRXODcyM0JTX0xPTkdfU0xPVF9USU1FKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBydHc4NzIzYnNfcnJzcl9mcm9tX2llX3JhdGUodTggcmF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKHJhdGUgXFx1MDAyNiAweDdmKSB7XFxuK1xcdGNhc2UgMjogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMU07XFxuK1xcdGNhc2UgNDogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMk07XFxuK1xcdGNhc2UgMTE6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNV81TTtcXG4rXFx0Y2FzZSAyMjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMU07XFxuK1xcdGNhc2UgMTI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNk07XFxuK1xcdGNhc2UgMTg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfOU07XFxuK1xcdGNhc2UgMjQ6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMTJNO1xcbitcXHRjYXNlIDM2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzE4TTtcXG4rXFx0Y2FzZSA0ODogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8yNE07XFxuK1xcdGNhc2UgNzI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMzZNO1xcbitcXHRjYXNlIDk2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzQ4TTtcXG4rXFx0Y2FzZSAxMDg6IHJldHVybiBSVFc4NzIzQlNfUlJTUl81NE07XFxuK1xcdGRlZmF1bHQ6ICByZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhjb25zdCB1OCAqaWUsIHUxNiAqYmFzaWNfcmF0ZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYm9vbCAqdmFsaWQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIWllKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaWVbMV07IGkrKykge1xcbitcXHRcXHR1MTYgcjtcXG4rXFxuK1xcdFxcdGlmICghKGllW2kgKyAyXSBcXHUwMDI2IDB4ODApKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0ciA9IHJ0dzg3MjNic19ycnNyX2Zyb21faWVfcmF0ZShpZVtpICsgMl0pO1xcbitcXHRcXHRpZiAoIXIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHQqYmFzaWNfcmF0ZXMgfD0gcjtcXG4rXFx0XFx0KnZhbGlkID0gdHJ1ZTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfcmVzZXRfcmVzcG9uc2VfcmF0ZXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUlNSLCAweGZmZmYxKTtcXG4rXFx0cnR3ZGV2LVxcdTAwM2VkbV9pbmZvLnJyc3JfdmFsX2luaXQgPSAweGZmZmYxO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXBwbHlfYmFzaWNfcmF0ZXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgdTggKmJzc2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcXHUwMDI2dmlmLVxcdTAwM2Vic3NfY29uZjtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7XFxuK1xcdGJvb2wgdmFsaWQgPSBmYWxzZTtcXG4rXFx0dTE2IGJhc2ljX3JhdGVzID0gMDtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHZpZi1cXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoY29uZi1cXHUwMDNlYnNzKSB7XFxuK1xcdFxcdGJzcyA9IGNvbmYtXFx1MDAzZWJzcztcXG4rXFx0fSBlbHNlIGlmIChic3NpZCBcXHUwMDI2XFx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xcbitcXHRcXHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7XFxuK1xcdFxcdGJzcyA9IGxvb2t1cF9ic3M7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChic3MpIHtcXG4rXFx0XFx0Y29uc3QgdTggKnJhdGVzLCAqZXh0O1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRyYXRlcyA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfU1VQUF9SQVRFUyk7XFxuK1xcdFxcdGV4dCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfRVhUX1NVUFBfUkFURVMpO1xcbitcXHRcXHRydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhyYXRlcywgXFx1MDAyNmJhc2ljX3JhdGVzLCBcXHUwMDI2dmFsaWQpO1xcbitcXHRcXHRydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhleHQsIFxcdTAwMjZiYXNpY19yYXRlcywgXFx1MDAyNnZhbGlkKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YWxpZCkge1xcbitcXHRcXHRiYXNpY19yYXRlcyB8PSBSVFc4NzIzQlNfUlJTUl8yR19GT1JDRTtcXG4rXFx0XFx0YmFzaWNfcmF0ZXMgXFx1MDAyNj0gUlRXODcyM0JTX1JSU1JfMkdfQUxMT1c7XFxuK1xcdFxcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JSU1IsIGJhc2ljX3JhdGVzKTtcXG4rXFx0XFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19SUlNSICsgMixcXG4rXFx0XFx0XFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1JSU1IgKyAyKSBcXHUwMDI2IDB4ZjApO1xcbitcXHRcXHRydHdkZXYtXFx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IGJhc2ljX3JhdGVzO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobG9va3VwX2JzcylcXG4rXFx0XFx0Y2ZnODAyMTFfcHV0X2JzcyhydHdkZXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSwgbG9va3VwX2Jzcyk7XFxuK31cXG4rXFxuKy8qIFByb2dyYW0gcmVzcG9uc2Ugc2xvdCB0aW1lIChhbmQsIHdoZW4gc2V0X3ByZWFtYmxlLCB0aGUgQUNLIHByZWFtYmxlKSBmcm9tXFxuKyAqIHRoZSBzZWxlY3RlZCBzY2FuIEJTUyBjYXBhYmlsaXRpZXM7IHRoZSBBUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCB5ZXQgaW5cXG4rICogYnNzX2NvbmYgYXQgbWdkX3ByZXBhcmVfdHgoKSB0aW1lLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCB1OCAqYnNzaWQsIGJvb2wgc2V0X3ByZWFtYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcXHUwMDI2dmlmLVxcdTAwM2Vic3NfY29uZjtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2JzcyAqbG9va3VwX2JzcyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7XFxuK1xcdGJvb2wgc2hvcnRfcHJlYW1ibGUsIHNob3J0X3Nsb3Q7XFxuK1xcdHUxNiBjYXAgPSAwO1xcbitcXG4rXFx0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgdmlmLVxcdTAwM2V0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChjb25mLVxcdTAwM2Vic3MpIHtcXG4rXFx0XFx0YnNzID0gY29uZi1cXHUwMDNlYnNzO1xcbitcXHR9IGVsc2UgaWYgKGJzc2lkIFxcdTAwMjZcXHUwMDI2IGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7XFxuK1xcdFxcdGxvb2t1cF9ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHJ0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0VTUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcXG4rXFx0XFx0YnNzID0gbG9va3VwX2JzcztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGJzcykge1xcbitcXHRcXHRjYXAgPSBic3MtXFx1MDAzZWNhcGFiaWxpdHk7XFxuK1xcdH0gZWxzZSBpZiAoY29uZi1cXHUwMDNlYXNzb2NfY2FwYWJpbGl0eSkge1xcbitcXHRcXHRjYXAgPSBjb25mLVxcdTAwM2Vhc3NvY19jYXBhYmlsaXR5O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzaG9ydF9wcmVhbWJsZSA9IGNvbmYtXFx1MDAzZXVzZV9zaG9ydF9wcmVhbWJsZTtcXG4rXFx0XFx0c2hvcnRfc2xvdCA9IGNvbmYtXFx1MDAzZXVzZV9zaG9ydF9zbG90O1xcbitcXHRcXHRnb3RvIHByb2dyYW07XFxuK1xcdH1cXG4rXFx0c2hvcnRfcHJlYW1ibGUgPSAhIShjYXAgXFx1MDAyNiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpO1xcbitcXHRzaG9ydF9zbG90ID0gISEoY2FwIFxcdTAwMjYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSk7XFxuK1xcbitwcm9ncmFtOlxcbitcXHRpZiAoc2V0X3ByZWFtYmxlKVxcbitcXHRcXHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTtcXG4rXFx0cnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBzaG9ydF9zbG90KTtcXG4rXFxuK1xcdGlmIChsb29rdXBfYnNzKVxcbitcXHRcXHRjZmc4MDIxMV9wdXRfYnNzKHJ0d2Rldi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LCBsb29rdXBfYnNzKTtcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXMoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4re1xcbitcXHR1MTYgYmVhY29uX2ludCA9IHZpZi1cXHUwMDNlYnNzX2NvbmYuYmVhY29uX2ludDtcXG4rXFx0dW5zaWduZWQgaW50IHdhaXRfbXM7XFxuK1xcbitcXHRpZiAoIWJlYWNvbl9pbnQpXFxuK1xcdFxcdHJldHVybiBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfRkFMTEJBQ0tfTVM7XFxuK1xcbitcXHR3YWl0X21zID0gRElWX1JPVU5EX1VQKGJlYWNvbl9pbnQgKiAxMDI0LCAxMDAwKSArIDIwO1xcbitcXHRyZXR1cm4gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHdhaXRfbXMsIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVMsXFxuK1xcdFxcdCAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VhdXRoX3N5bmM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRldGhlcl9hZGRyX2NvcHkoc3luYy1cXHUwMDNlYnNzaWQsIGJzc2lkKTtcXG4rXFx0c3luYy1cXHUwMDNlc2VlbiA9IGZhbHNlO1xcbitcXHRzeW5jLVxcdTAwM2VzZWVuX2NvdW50ID0gMDtcXG4rXFx0c3luYy1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3N0b3Aoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWF1dGhfc3luYztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzeW5jLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdHN5bmMtXFx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzeW5jLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJ0dzg3MjNic19hdXRoX3N5bmNfc2VlbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIHNlZW47XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRzZWVuID0gc3luYy1cXHUwMDNlc2VlbjtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3luYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIHNlZW47XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCB3YWl0X21zKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jO1xcbitcXG4rXFx0cmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChzeW5jLVxcdTAwM2V3YWl0LCBydHc4NzIzYnNfYXV0aF9zeW5jX3NlZW4ocnR3ZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSBcXHUwMDNlIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9pc19hdXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGllZWU4MDIxMV9wcmVwX3R4X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0cmV0dXJuIHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBpbmZvIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpbmZvLVxcdTAwM2VzdWJ0eXBlID09IElFRUU4MDIxMV9TVFlQRV9BVVRIO1xcbit9XFxuK1xcbisvKiBSZXBsaWNhdGUgdGhlIHZlbmRvciBzdGFydF9jbG50X2pvaW4oKSByZWdpc3RlciBwcm9ncmFtbWluZyByaWdodCBiZWZvcmVcXG4rICogYXV0aC4gUmV0dXJucyB0cnVlIGZvciBhIGZyZXNoIGpvaW4gKEJTU0lEIGNoYW5nZWQpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcnR3ODcyM2JzX21nZF9wcmVwYXJlX2pvaW4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCAqYnNzaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d192aWYgKnJ0d3ZpZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi1cXHUwMDNlZHJ2X3ByaXY7XFxuK1xcdGJvb2wgZnJlc2hfam9pbjtcXG4rXFx0dTE2IHJldHJ5X2xpbWl0O1xcbitcXG4rXFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0ZnJlc2hfam9pbiA9ICFldGhlcl9hZGRyX2VxdWFsKHJ0d3ZpZi1cXHUwMDNlYnNzaWQsIGJzc2lkKTtcXG4rXFxuK1xcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXFx1MDAzZWJzc2lkLCBic3NpZCk7XFxuK1xcdHJ0d3ZpZi1cXHUwMDNlYWlkID0gMDtcXG4rXFx0cnR3dmlmLVxcdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTUdEX0xJTktFRDtcXG4rXFx0cnR3X3ZpZl9wb3J0X2NvbmZpZyhydHdkZXYsIHJ0d3ZpZixcXG4rXFx0XFx0XFx0ICAgIFBPUlRfU0VUX0JTU0lEIHwgUE9SVF9TRVRfQUlEIHwgUE9SVF9TRVRfTkVUX1RZUEUpO1xcbitcXG4rXFx0LyogRG8gbm90IG5hcnJvdyBSUlNSIG9yIHN3aXRjaCB0byBzaG9ydC1wcmVhbWJsZSByZXNwb25zZXMgYmVmb3JlIHRoZVxcbitcXHQgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXRcXG4rXFx0ICogKDB4ZmZmZjEsIGxvbmcgcHJlYW1ibGUpLiBPbmx5IHNsb3QgdGltZSBpcyBwcm9ncmFtbWVkIGVhcmx5LlxcbitcXHQgKi9cXG4rXFx0cnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7XFxuK1xcbitcXHRydHdfZndfYmVhY29uX2ZpbHRlcl9jb25maWcocnR3ZGV2LCBmYWxzZSwgdmlmKTtcXG4rXFxuK1xcdC8qIE1hdGNoIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkgVFggc3RhdGUgKHNldF9tc3IgZGlyZWN0bHksIGtlZXBcXG4rXFx0ICogQkNOX0NUUkwgLyBCQ05RX0RMIHNldCwgcmVhc3NlcnQgVEJUVC9SRVNQX1NJRlMgZXZlcnkgam9pbikuXFxuK1xcdCAqL1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxcbitcXHRcXHQgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OKTtcXG4rXFx0cnR3X3dyaXRlMzJfc2V0KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwsIEJJVF9FTl9CQ05RX0RMKTtcXG4rXFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHg2NCBcXHUwMDI2IDB4ZmYpO1xcbitcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgKyAyLFxcbitcXHRcXHQgICAocnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgKyAyKSBcXHUwMDI2IDB4ZjApIHwgKDB4NjQgXFx1MDAzZVxcdTAwM2UgOCkpO1xcbitcXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfQ0NLLCAweDA4MDgpO1xcbitcXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfT0ZETSwgMHgwYTBhKTtcXG4rXFxuK1xcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JYRkxUTUFQMCwgMHhmZmZmKTtcXG4rXFx0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUlhGTFRNQVAyLCAweGZmZmYpO1xcbitcXHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCB0cnVlKTtcXG4rXFxuK1xcdHJldHJ5X2xpbWl0ID0gKFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUIFxcdTAwM2NcXHUwMDNjIDgpIHxcXG4rXFx0XFx0ICAgICAgUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVQ7XFxuK1xcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JFVFJZX0xJTUlULCByZXRyeV9saW1pdCk7XFxuK1xcbitcXHRydHc4NzIzYnNfY29uZmlnX3NlY19jZmcocnR3ZGV2KTtcXG4rXFxuK1xcdHJldHVybiBmcmVzaF9qb2luO1xcbit9XFxuK1xcbisvKiBUaGUgdmVuZG9yIHNlbmRzIGEgZGVhdXRoIHRvIHRoZSB0YXJnZXQgYmVmb3JlIGF1dGggdG8gY2xlYXIgc3RhbGUgQVAtc2lkZVxcbisgKiBzdGF0ZTsgc3ludGhlc2l6ZSBhbmQgVFggb25lLCB0aGVuIGxldCB0aGUgQVAgc2V0dGxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX3R4X3ByZV9hdXRoX2RlYXV0aChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHU4ICpic3NpZClcXG4re1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbCA9IHt9O1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dW5zaWduZWQgaW50IGZyYW1lX2xlbiwgaGVhZHJvb207XFxuK1xcbitcXHRmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgc2l6ZW9mKG1nbXQtXFx1MDAzZXUuZGVhdXRoKTtcXG4rXFx0aGVhZHJvb20gPSBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXR4X3BrdF9kZXNjX3N6ICsgODtcXG4rXFxuK1xcdHNrYiA9IGRldl9hbGxvY19za2IoaGVhZHJvb20gKyBmcmFtZV9sZW4pO1xcbitcXHRpZiAoIXNrYilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XFxuK1xcdG1nbXQgPSBza2JfcHV0X3plcm8oc2tiLCBmcmFtZV9sZW4pO1xcbitcXHRtZ210LVxcdTAwM2VmcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfFxcbitcXHRcXHRcXHRcXHRcXHQgIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpO1xcbitcXHRtZW1jcHkobWdtdC1cXHUwMDNlZGEsIGJzc2lkLCBFVEhfQUxFTik7XFxuK1xcdG1lbWNweShtZ210LVxcdTAwM2VzYSwgdmlmLVxcdTAwM2VhZGRyLCBFVEhfQUxFTik7XFxuK1xcdG1lbWNweShtZ210LVxcdTAwM2Vic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTtcXG4rXFx0bWdtdC1cXHUwMDNldS5kZWF1dGgucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7XFxuK1xcbitcXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbitcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuK1xcdGluZm8tXFx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xcbitcXG4rXFx0cnR3X3R4KHJ0d2RldiwgXFx1MDAyNmNvbnRyb2wsIHNrYik7XFxuK1xcdG1zbGVlcCgxMDApO1xcbit9XFxuK1xcbisvKiBPcmNoZXN0cmF0ZSB0aGUgcHJlLWF1dGggam9pbjogcHJvZ3JhbSB0aGUgdmVuZG9yIGpvaW4gc3RhdGUsIHNlbmQgdGhlXFxuKyAqIHByZS1hdXRoIGRlYXV0aCwgd2FpdCBmb3IgYSBiZWFjb24gZnJvbSB0aGUgdGFyZ2V0LCB0aGVuIHJlcGxheSB0aGVcXG4rICogcHJlLWF1dGggY29leCBIMkNzIC0gb25jZSBwZXIgZnJlc2ggQlNTSUQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9wcmVwX3R4X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHJ0d192aWYgKnJ0d3ZpZjtcXG4rXFx0Y29uc3QgdTggKmJzc2lkID0gTlVMTDtcXG4rXFx0Ym9vbCBmcmVzaF9qb2luO1xcbitcXG4rXFx0aWYgKCFydHc4NzIzYnNfbWdkX3ByZXBhcmVfaXNfYXV0aChydHdkZXYsIGluZm8pIHx8ICF2aWYgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFJUV19GTEFHX1NDQU5OSU5HLCBydHdkZXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnR3dmlmID0gKHN0cnVjdCBydHdfdmlmICopdmlmLVxcdTAwM2VkcnZfcHJpdjtcXG4rXFxuK1xcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cXHUwMDNlY2ZnLmFwX2FkZHIpKVxcbitcXHRcXHRic3NpZCA9IHZpZi1cXHUwMDNlY2ZnLmFwX2FkZHI7XFxuK1xcdGVsc2UgaWYgKHZpZi1cXHUwMDNlYnNzX2NvbmYuYnNzaWQgXFx1MDAyNlxcdTAwMjYgIWlzX3plcm9fZXRoZXJfYWRkcih2aWYtXFx1MDAzZWJzc19jb25mLmJzc2lkKSlcXG4rXFx0XFx0YnNzaWQgPSB2aWYtXFx1MDAzZWJzc19jb25mLmJzc2lkO1xcbitcXG4rXFx0aWYgKCFic3NpZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlc2hfam9pbiA9IHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9qb2luKHJ0d2RldiwgdmlmLCBic3NpZCk7XFxuK1xcbitcXHRpZiAoZnJlc2hfam9pbiB8fCAhcnR3dmlmLVxcdTAwM2VwcmVfYXV0aF9qb2luX2RvbmUpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHdhaXRfbXMgPSBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXRfbXModmlmKTtcXG4rXFxuK1xcdFxcdHJ0dzg3MjNic19hdXRoX3N5bmNfc3RhcnQocnR3ZGV2LCBic3NpZCk7XFxuK1xcdFxcdHJ0dzg3MjNic190eF9wcmVfYXV0aF9kZWF1dGgocnR3ZGV2LCB2aWYsIGJzc2lkKTtcXG4rXFx0XFx0cnR3ODcyM2JzX2F1dGhfc3luY193YWl0KHJ0d2Rldiwgd2FpdF9tcyk7XFxuK1xcdFxcdHJ0dzg3MjNic19hdXRoX3N5bmNfc3RvcChydHdkZXYpO1xcbitcXHRcXHRydHd2aWYtXFx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcnR3dmlmLVxcdTAwM2VwcmVfYXV0aF9oMmNfc2VudCkge1xcbitcXHRcXHRydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7XFxuK1xcdFxcdHJ0d3ZpZi1cXHUwMDNlcHJlX2F1dGhfaDJjX3NlbnQgPSB0cnVlO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0d19vcHNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0zODcsNiArODQ0LDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9BU1NPQykge1xcbiBcXHRcXHRydHdfdmlmX2Fzc29jX2NoYW5nZWQocnR3dmlmLCBjb25mKTtcXG4gXFx0XFx0aWYgKHZpZi1cXHUwMDNlY2ZnLmFzc29jKSB7XFxuK1xcdFxcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XFxuK1xcdFxcdFxcdFxcdHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihydHdkZXYsIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0cnR3ODcyM2JzX2FwcGx5X2Jhc2ljX3JhdGVzKHJ0d2RldiwgdmlmLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0cnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHJ0d2Rldik7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfRklOSVNIKTtcXG4gXFxuIFxcdFxcdFxcdHJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTtcXG5AQCAtNDA4LDYgKzg3MiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfb3BzX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdFxcdGlmICh0ZXN0X2JpdChSVFdfRkxBR19TQ0FOTklORywgcnR3ZGV2LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdFxcdHJ0d19od19zY2FuX2Fib3J0KHJ0d2Rldik7XFxuIFxcbitcXHRcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikge1xcbitcXHRcXHRcXHRcXHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhydHdkZXYpO1xcbitcXHRcXHRcXHRcXHRydHd2aWYtXFx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdHJ0d3ZpZi1cXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFO1xcbkBAIC00MTUsOCArODg2LDI2IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9CU1NJRCkge1xcbitcXHRcXHRib29sIGJzc2lkX2NsZWFyZWQgPSBpc196ZXJvX2V0aGVyX2FkZHIoY29uZi1cXHUwMDNlYnNzaWQpO1xcbitcXHRcXHRib29sIGJzc2lkX2NoYW5nZWQgPSAhZXRoZXJfYWRkcl9lcXVhbChydHd2aWYtXFx1MDAzZWJzc2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uZi1cXHUwMDNlYnNzaWQpO1xcbitcXG4rXFx0XFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXFx1MDAyNlxcdTAwMjYgYnNzaWRfY2hhbmdlZCkge1xcbitcXHRcXHRcXHRydHd2aWYtXFx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJ0d3ZpZi1cXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KHJ0d3ZpZi1cXHUwMDNlYnNzaWQsIGNvbmYtXFx1MDAzZWJzc2lkKTtcXG4gXFx0XFx0Y29uZmlnIHw9IFBPUlRfU0VUX0JTU0lEO1xcbitcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNiBic3NpZF9jbGVhcmVkKSB7XFxuK1xcdFxcdFxcdHJ0d3ZpZi1cXHUwMDNlYWlkID0gMDtcXG4rXFx0XFx0XFx0cnR3dmlmLVxcdTAwM2VuZXRfdHlwZSA9IFJUV19ORVRfTk9fTElOSztcXG4rXFx0XFx0XFx0Y29uZmlnIHw9IFBPUlRfU0VUX05FVF9UWVBFIHwgUE9SVF9TRVRfQUlEO1xcbitcXHRcXHRcXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OIHxcXG4rXFx0XFx0XFx0XFx0ICAgQklUX0RJU19BVElNKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoIXJ0d19jb3JlX2NoZWNrX3N0YV9hY3RpdmUocnR3ZGV2KSlcXG4gXFx0XFx0XFx0cnR3X2NsZWFyX29wX2NoYW4ocnR3ZGV2KTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC00NDgsOCArOTM3LDE3IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9NVV9HUk9VUFMpXFxuIFxcdFxcdHJ0d19jaGlwX3NldF9naWRfdGFibGUocnR3ZGV2LCB2aWYsIGNvbmYpO1xcbiBcXG4tXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfU0xPVClcXG4rXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXFxuK1xcdFxcdHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHJ0d2RldiwgY29uZi1cXHUwMDNldXNlX3Nob3J0X3ByZWFtYmxlKTtcXG4rXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHtcXG4rXFx0XFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXFxuK1xcdFxcdFxcdHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHJ0d2RldiwgY29uZi1cXHUwMDNldXNlX3Nob3J0X3Nsb3QpO1xcbiBcXHRcXHRydHdfY29uZl90eChydHdkZXYsIHJ0d3ZpZik7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgQlNTX0NIQU5HRURfUFMpXFxuIFxcdFxcdHJ0d19yZWNhbGNfbHBzKHJ0d2RldiwgTlVMTCk7XFxuQEAgLTYwOSwxMSArMTEwNywxOSBAQCBzdGF0aWMgaW50IHJ0d19vcHNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsXFxuIFxcdFxcdGtleS1cXHUwMDNlaHdfa2V5X2lkeCA9IGh3X2tleV9pZHg7XFxuIFxcdFxcdHJ0d19zZWNfd3JpdGVfY2FtKHJ0d2Rldiwgc2VjLCBzdGEsIGtleSxcXG4gXFx0XFx0XFx0XFx0ICBod19rZXlfdHlwZSwgaHdfa2V5X2lkeCk7XFxuK1xcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjYgdmlmIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShrZXktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSlcXG4rXFx0XFx0XFx0cnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2gocnR3ZGV2LCB0cnVlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgRElTQUJMRV9LRVk6XFxuIFxcdFxcdHJ0d19oY2lfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTtcXG4gXFx0XFx0cnR3X21hY19mbHVzaF9hbGxfcXVldWVzKHJ0d2RldiwgZmFsc2UpO1xcbiBcXHRcXHRydHdfc2VjX2NsZWFyX2NhbShydHdkZXYsIHNlYywga2V5LVxcdTAwM2Vod19rZXlfaWR4KTtcXG4rXFx0XFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiB2aWYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKGtleS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKVxcbitcXHRcXHRcXHRydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIGZhbHNlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuQEAgLTcwMyw4ICsxMjA5LDIzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfbWdkX3ByZXBhcmVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZydHdkZXYtXFx1MDAzZW11dGV4KTtcXG4gXFx0cnR3X2xlYXZlX2xwc19kZWVwKHJ0d2Rldik7XFxuLVxcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xcbi1cXHRydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7XFxuK1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdC8qIFdha2UgZnJvbSBzb2Z0IElQUyBhbmQgcnVuIHRoZSB2ZW5kb3Igam9pbiBzZXF1ZW5jZS4gVGhlIFJGS1xcbitcXHRcXHQgKiBpcyBoYW5kbGVkIGJ5IHRoZSBvbmNlLW9ubHkgcG93ZXItb24gSVFLIHBsdXMgdGhlIHBzLmNcXG4rXFx0XFx0ICogcG9zdC1JUFMgUkYtYnVzIHJlY292ZXJ5LCBub3QgYSBmcmVzaCBjYWxpYnJhdGlvbiBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJ0d19sZWF2ZV9pcHMocnR3ZGV2KSkge1xcbitcXHRcXHRcXHRydHdfZXJyKHJ0d2RldiwgXFxcImZhaWxlZCB0byBsZWF2ZSBpZGxlIHN0YXRlIGZvciBtZ2QgdHhcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRydHdfY29leF9jb25uZWN0X25vdGlmeShydHdkZXYsIENPRVhfQVNTT0NJQVRFX1NUQVJUKTtcXG4rXFx0XFx0cnR3ODcyM2JzX21nZF9wcmVwYXJlX2F1dGhfam9pbihydHdkZXYsIHZpZiwgaW5mbyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xcbitcXHRcXHRydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7XFxuK1xcdH1cXG4rb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnJ0d2Rldi1cXHUwMDNlbXV0ZXgpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXFxuaW5kZXggY2Q5MjU0MzcwZmNjNzIuLjE2MjI4Y2FlMjUyZWJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmNcXG5AQCAtMjE3NCwxMSArMjE3NCwxMyBAQCBpbnQgcnR3X2NvcmVfaW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNldHhxX2xvY2spO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cnR3ZGV2LVxcdTAwM2V0eF9yZXBvcnQucV9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlYXV0aF9zeW5jLmxvY2spO1xcbiBcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cnR3ZGV2LVxcdTAwM2VtdXRleCk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlaGFsLnR4X3Bvd2VyX211dGV4KTtcXG4gXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlY29leC53YWl0KTtcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cnR3ZGV2LVxcdTAwM2VhdXRoX3N5bmMud2FpdCk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cnR3ZGV2LVxcdTAwM2VscHNfbGVhdmVfY2hlY2spO1xcbiBcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnJ0d2Rldi1cXHUwMDNlZndfc2Nhbl9kZW5zaXR5KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG5pbmRleCA5YzBiNzQ2NTQwYjBlZS4uOTliOTlhYTNkNjAwZjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtODI4LDYgKzgyOSw4IEBAIHN0cnVjdCBydHdfdmlmIHtcXG4gXFx0dTggYnNzaWRbRVRIX0FMRU5dO1xcbiBcXHR1OCBwb3J0O1xcbiBcXHR1OCBiY25fY3RybDtcXG4rXFx0Ym9vbCBwcmVfYXV0aF9oMmNfc2VudDtcXG4rXFx0Ym9vbCBwcmVfYXV0aF9qb2luX2RvbmU7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcnN2ZF9wYWdlX2xpc3Q7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHR4X3BhcmFtc1tJRUVFODAyMTFfTlVNX0FDU107XFxuIFxcdGNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7XFxuQEAgLTIwNTYsNiArMjA1OSwyMCBAQCBzdHJ1Y3QgcnR3X2h3X3NjYW5faW5mbyB7XFxuIFxcdHU4IG9wX2J3O1xcbiB9O1xcbiBcXG4rLypcXG4rICogU3luY2hyb25pc2VzIHRoZSBwcmUtYXV0aCB3YWl0IG9uIGEgYmVhY29uIG9yIHByb2JlIHJlc3BvbnNlIGZyb20gdGhlXFxuKyAqIHRhcmdldCBCU1NJRCBiZWZvcmUgdGhlIGpvaW4gc2VxdWVuY2UgY29udGludWVzLlxcbisgKi9cXG4rc3RydWN0IHJ0d19hdXRoX3N5bmMge1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xcbitcXHQvKiBQcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93LiAqL1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK1xcdHU4IGJzc2lkW0VUSF9BTEVOXTtcXG4rXFx0Ym9vbCBhY3RpdmU7XFxuK1xcdGJvb2wgc2VlbjtcXG4rXFx0dTMyIHNlZW5fY291bnQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgcnR3X2RldiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuQEAgLTIxMzIsNiArMjE0OSw4IEBAIHN0cnVjdCBydHdfZGV2IHtcXG4gXFx0c3RydWN0IGNvbXBsZXRpb24gZndfc2Nhbl9kZW5zaXR5O1xcbiBcXHRib29sIGFwX2FjdGl2ZTtcXG4gXFxuK1xcdHN0cnVjdCBydHdfYXV0aF9zeW5jIGF1dGhfc3luYztcXG4rXFxuIFxcdGJvb2wgbGVkX3JlZ2lzdGVyZWQ7XFxuIFxcdGNoYXIgbGVkX25hbWVbMzJdO1xcbiBcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2O1xcbkBAIC0yMTkzLDYgKzIyMTIsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXR4X3N0YmM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgcnR3ZGV2LVxcdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xcbkBAIC0yMjgzLDQgKzIzMDgsOCBAQCBib29sIHJ0d19jb3JlX2NoZWNrX3N0YV9hY3RpdmUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldik7XFxuIHZvaWQgcnR3X2NvcmVfZW5hYmxlX2JlYWNvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVuYWJsZSk7XFxuIHZvaWQgcnR3X3NldF9hbXBkdV9mYWN0b3Ioc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZik7XFxuK3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTMyIGxlbixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaFxcbmluZGV4IDA4ZTk0OTQ5NzdlMDZhLi5iNmQ0ZThlZDk4Yzc1NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3JlZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaFxcbkBAIC00NzksNiArNDc5LDcgQEBcXG4gI2RlZmluZSBCSVRfRElTX1RTRl9VRFRcXHRcXHRCSVQoNClcXG4gI2RlZmluZSBCSVRfRU5fQkNOX0ZVTkNUSU9OXFx0QklUKDMpXFxuICNkZWZpbmUgQklUX0VOX1RYQkNOX1JQVFxcdEJJVCgyKVxcbisjZGVmaW5lIEJJVF9ESVNfQVRJTVxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFJFR19CQ05fQ1RSTF9DTElOVDBcXHQweDA1NTFcXG4gI2RlZmluZSBSRUdfRFJWRVJMWUlOVFxcdFxcdDB4MDU1OFxcbiAjZGVmaW5lIFJFR19CQ05ETUFUSU1cXHRcXHQweDA1NTlcXG5AQCAtNTE4LDYgKzUxOSw3IEBAXFxuICNkZWZpbmUgQklUX1VDX01EX0VOXFx0XFx0QklUKDE2KVxcbiAjZGVmaW5lIEJJVF9SWFNLX1BFUlBLVFxcdFxcdEJJVCgxNSlcXG4gI2RlZmluZSBCSVRfSFRDX0xPQ19DVFJMXFx0QklUKDE0KVxcbisjZGVmaW5lIEJJVF9BTUZcXHRcXHRcXHRCSVQoMTMpXFxuICNkZWZpbmUgQklUX1JQRk1fQ0FNX0VOQUJMRVxcdEJJVCgxMilcXG4gI2RlZmluZSBCSVRfVEFfQkNOXFx0XFx0QklUKDExKVxcbiAjZGVmaW5lIEJJVF9SQ1JfQURGXFx0XFx0QklUKDExKVxcbkBAIC02MjgsNiArNjMwLDcgQEBcXG4gI2RlZmluZSBSRUdfUFNEXFx0XFx0XFx0MHgwOTEwXFxuICNkZWZpbmUgQklUX1BTRF9JTklcXHRcXHRHRU5NQVNLKDIzLCAyMilcXG4gI2RlZmluZSBSRUdfU0lOR0xFX1RPTkVfQ09OVF9UWFxcdDB4MDkxNFxcbisjZGVmaW5lIFJFR19CQl9TRUxfQlRHXzg3MjNCXFx0MHgwOTQ4XFxuICNkZWZpbmUgUkVHX0FHQ19UQUJMRVxcdFxcdDB4MDk1OFxcbiAjZGVmaW5lIFJFR19SRkVfQ1RSTF9FXFx0XFx0MHgwOTc0XFxuICNkZWZpbmUgUkVHXzJORF9DQ0FfQ1RSTFxcdDB4MDk3NlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5pbmRleCAwMWZkMjk5YWJiN2ZlOS4uNTMwMzk3NWQwMGEyYTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXG4gXFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcXG4gXFxuLVxcdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTIgYW5kXFxuLVxcdCAqIHNpbXBseSBkcm9wcyB0aGUgcGFja2V0LlxcbitcXHQvKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTJcXG4rXFx0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFxcdTAwMjZcXHUwMDI2IHBrdF9zdGF0LVxcdTAwM2Vwa3RfbGVuID09IDApIHtcXG4rXFx0aWYgKChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHxcXG4rXFx0ICAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlcGt0X2xlbiA9PSAwKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTA4Li5iMjk0YmNjNGQ4MjgwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXFxuQEAgLTIwLDYgKzIwLDE2IEBAXFxuICNpbmNsdWRlIFxcXCJ0eC5oXFxcIlxcbiBcXG4gI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTXFx0XFx0XFx0NTBcXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1xcdFxcdFxcdFxcdDEwMDBcXG4rXFxuKy8qIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlXFxuKyAqIHRoZSBwZXItQUMgc29mdHdhcmUgRklGTyBmaWxscyBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgYW5kIHdha2UgaXQgZnJvbSB0aGVcXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxcbisgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS5cXG4rICovXFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXFx0XFx0XFx0MTZcXG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVJcXHRcXHRcXHQ4XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfUkVUUllfREVMQVlcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKDEpXFxuIFxcbiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcilcXG4ge1xcbkBAIC01NDgsMTIgKzU1OCw5MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XFxuK1xcdHUzMiBmcmVlX3R4cGc7XFxuK1xcdHUxNiBwdWJxX251bTtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRwdWJxX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtIC0gcGdfdGJsLVxcdTAwM2VocV9udW0gLSBwZ190YmwtXFx1MDAzZWxxX251bSAtXFxuK1xcdFxcdCAgIHBnX3RibC1cXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVxcdTAwM2VleHFfbnVtIC0gcGdfdGJsLVxcdTAwM2VnYXBxX251bTtcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcpIHtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLCBmcmVlX3R4cGcgXFx1MDAyNiAweGZmKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsIChmcmVlX3R4cGcgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3csIChmcmVlX3R4cGcgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhmZik7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCAoZnJlZV90eHBnIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IDB4ZmYpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cXHUwMDNlaHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cXHUwMDNlbnFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cXHUwMDNlbHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcXG4rXFx0fVxcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsXFxuK1xcdFxcdCAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKCFmcmVlX3R4cGcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCwgZnJlZV90eHBnIFxcdTAwMjYgMHhmZik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsLCAoZnJlZV90eHBnIFxcdTAwM2VcXHUwMDNlIDgpIFxcdTAwMjYgMHhmZik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4ZmYpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YiwgKGZyZWVfdHhwZyBcXHUwMDNlXFx1MDAzZSAyNCkgXFx1MDAyNiAweGZmKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCk7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsKTtcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxcbitcXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93KTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdFxcdGludCBkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXG4rXFx0XFx0aWYgKGRlZGljYXRlZCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBkZWRpY2F0ZWQ7XFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBkZWRpY2F0ZWQgKyBhdG9taWNfcmVhZChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBkZWRpY2F0ZWQgKyBhdG9taWNfcmVhZChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsNDQgKzcyMSwxMzEgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGk7XFxuK1xcdHU4IGZyZWU7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoYXRvbWljX2FkZF91bmxlc3MoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUV19TRElPX09RVF9USU1FT1VUX01TOyBpKyspIHtcXG4rXFx0XFx0ZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTtcXG4rXFx0XFx0aWYgKGZyZWUpIHtcXG4rXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsIGZyZWUgLSAxKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcdGludCBmcmVlO1xcbitcXG4rXFx0c3dpdGNoIChxdWV1ZSkge1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcXG4rXFx0XFx0ZGVkaWNhdGVkID0gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxcbitcXHRcXHRkZWRpY2F0ZWQgPSBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkZWRpY2F0ZWQgPSBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XFxuK1xcdGlmIChwYWdlcyBcXHUwMDNjPSBmcmVlKSB7XFxuK1xcdFxcdGF0b21pY19zdWIocGFnZXMsIGRlZGljYXRlZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGF0b21pY19zZXQoZGVkaWNhdGVkLCAwKTtcXG4rXFx0XFx0YXRvbWljX3N1YihwYWdlcyAtIGZyZWUsIFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbiBcXHRib29sIGJ1c19jbGFpbTtcXG4gXFx0c2l6ZV90IHR4c2l6ZTtcXG4rXFx0c2l6ZV90IHdyaXRlX3NpemU7XFxuIFxcdHUzMiB0eGFkZHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cXHUwMDNlbGVuLCBxdWV1ZSk7XFxuLVxcdGlmICghdHhhZGRyKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemUgXFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cXG4rXFx0XFx0XFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3cml0ZV9zaXplIFxcdTAwM2Ugb3JpZ19sZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XFxuIFxcbi1cXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHBhZGRpbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcXG4rXFx0aWYgKCF0eGFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcdHJldCA9IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHJ0d2Rldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuIFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVxcdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgX19mdW5jX18sIHF1ZXVlKTtcXG4gXFxuIFxcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XFxuLVxcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jKTtcXG4tXFxuLVxcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSwgdHhzaXplKTtcXG4tXFxuK1xcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHdyaXRlX3NpemUpO1xcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbiBcXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcnRsODcyM2JzKSB7XFxuK1xcdFxcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTtcXG4rXFx0fVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRydHdfd2FybihydHdkZXYsXFxuIFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcXFwiLFxcbi1cXHRcXHRcXHQgdHhzaXplLCB0eGFkZHIpO1xcbitcXHRcXHRcXHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcXG4gXFxuK291dF90cmltOlxcbitcXHRpZiAod3JpdGVfc2l6ZSBcXHUwMDNlIG9yaWdfbGVuKVxcbitcXHRcXHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjc3LDcgKzg1MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxcbitcXHRcXHRcXHRcXHQgICAgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuQEAgLTY4NSw2ICs4NjUsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0dTggc2l6ZSwgdGltZW91dDtcXG4gXFxuIFxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbitcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XFxuQEAgLTcxMiw2ICs4OTMsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcXG4gXFxuIFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIDMgXFx1MDAzY1xcdTAwM2MgMik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNzQ5LDkgKzkzMiw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVxcdTAwM2VjaGlwO1xcbitcXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWZpZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MzIgZnJlZV90eHBnO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcgfHwgIWZpZm8tXFx1MDAzZWFjcV9wZ19udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBnX3RibCA9IFxcdTAwMjZjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRpZiAoZmlmby1cXHUwMDNlYWNxX3BnX251bSBcXHUwMDNjPSBwZ190YmwtXFx1MDAzZWhxX251bSArIHBnX3RibC1cXHUwMDNlbHFfbnVtICtcXG4rXFx0XFx0XFx0XFx0ICAgIHBnX3RibC1cXHUwMDNlbnFfbnVtICsgcGdfdGJsLVxcdTAwM2VleHFfbnVtICtcXG4rXFx0XFx0XFx0XFx0ICAgIHBnX3RibC1cXHUwMDNlZ2FwcV9udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHB1YnFfbnVtID0gZmlmby1cXHUwMDNlYWNxX3BnX251bSAtIHBnX3RibC1cXHUwMDNlaHFfbnVtIC0gcGdfdGJsLVxcdTAwM2VscV9udW0gLVxcbitcXHRcXHQgICBwZ190YmwtXFx1MDAzZW5xX251bSAtIHBnX3RibC1cXHUwMDNlZXhxX251bSAtIHBnX3RibC1cXHUwMDNlZ2FwcV9udW07XFxuK1xcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxcbitcXHRcXHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVxcdTAwM2VucV9udW0sIHBnX3RibC1cXHUwMDNlZXhxX251bSkpO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxcbitcXHRcXHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cXHUwMDNlaHFfbnVtLCBwZ190YmwtXFx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuK1xcdHUzMiBjbGVhcjtcXG4rXFxuK1xcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XFxuK1xcdHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XFxuIFxcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcXHUwMDI2XFxuK1xcdFxcdFxcdFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFx0XFx0aWYgKGNsZWFyKVxcbitcXHRcXHRcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICsxMDM5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cXVldWVfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxcbkBAIC04MzEsNiArMTA1NSw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFxuIFxcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcXG4gXFx0dmFsIFxcdTAwMjY9IDB4ZmZmODtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xcbiB9XFxuIFxcbkBAIC05MzcsNiArMTE2MywxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xcbiBcXG4rXFx0LyogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XFxuK1xcdCAqIHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wc1xcbitcXHQgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFhcXG4rXFx0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cXG4rXFx0ICovXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjYgcXVldWUgXFx1MDAzYyBSVFdfVFhfUVVFVUVfQkNOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcXG4rXFx0XFx0aWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LVxcdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtOTY1LDYgKzEyMDMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fcnhfc2tiKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJ0d191cGRhdGVfcnhfZnJlcV9mb3JfaW52YWxpZChydHdkZXYsIHNrYiwgcnhfc3RhdHVzLCBwa3Rfc3RhdCk7XFxuIFxcdHJ0d19yeF9zdGF0cyhydHdkZXYsIHBrdF9zdGF0LVxcdTAwM2V2aWYsIHNrYik7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSlcXG4rXFx0XFx0cnR3ODcyM2JzX2F1dGhfc3luY19yeChydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBza2ItXFx1MDAzZWxlbiwgcGt0X3N0YXQsIHJ4X3N0YXR1cyk7XFxuK1xcbiBcXHRpZWVlODAyMTFfcnhfaXJxc2FmZShydHdkZXYtXFx1MDAzZWh3LCBza2IpO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzEzMzgsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxcbitcXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrIFxcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDMyICsxNDgxLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sICpwcm9jZXNzZWQpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTE2IHFfbWFwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0KnByb2Nlc3NlZCA9IGZhbHNlO1xcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHQqcHJvY2Vzc2VkID0gdHJ1ZTtcXG4rXFx0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0cmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcXG4rXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXFx1MDAyNlxcdTAwMjYgcXVldWUgXFx1MDAzYyBSVFdfVFhfUVVFVUVfQkNOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBydHdzZGlvLVxcdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNjPSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuK1xcdGJvb2wgcHJvY2Vzc2VkO1xcbiBcXHRpbnQgbGltaXQsIHF1ZXVlO1xcbiBcXG4gXFx0cnR3ZGV2ID0gd29ya19kYXRhLVxcdTAwM2VydHdkZXY7XFxuQEAgLTEyNjcsNyArMTUzMywyNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBcXHUwMDI2cHJvY2Vzc2VkKTtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0XFx0XFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNndvcmtfZGF0YS1cXHUwMDNld29yayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVCBcXHUwMDI2XFx1MDAyNiBwcm9jZXNzZWQpIHtcXG4rXFx0XFx0XFx0XFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI5NCwxNCArMTU3NywxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xcbiBcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtpXSk7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcXG4rXFx0fVxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFx0aWYgKCFydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpXFxuIFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXJ0d2RldiA9IHJ0d2RldjtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTMxNSw2ICsxNjAwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVxcdTAwM2V0eHdxKTtcXG4gXFx0a2ZyZWUocnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5pbmRleCA0NTdlOGIwMjM4MGU1Yi4uZjFmNTlmODMwMWI4ZjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbkBAIC0yMiw2ICsyMiw3IEBAXFxuIFxcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAwKVxcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVxcdEJJVCg0KVxcbiBcXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxcbkBAIC03Nyw2ICs3OCwxNCBAQFxcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXFxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXFx0XFx0XFx0QklUKDI4KVxcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVxcdFxcdEJJVCgyOSlcXG4rI2RlZmluZSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0tcXHRcXHRcXFxcXFxuK1xcdChSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVClcXG4gXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcXG5AQCAtMTQzLDcgKzE1Miw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcXG4gfTtcXG4gXFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xcbiBcXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xcbiB9O1xcbiBcXG5AQCAtMTU5LDYgKzE2OCwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xcbiBcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqdHhfaGFuZGxlcl9kYXRhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFx0Ym9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFxuK1xcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbG93O1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcXG4rXFx0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XFxuIH07XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NlYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaFxcbmluZGV4IGVmY2Y0NTQzMzk5OWFmLi43M2YyYWY2NmVmZmU4NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NlYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaFxcbkBAIC0yMiw2ICsyMiw3IEBAXFxuICNkZWZpbmUgUlRXX1NFQ19SWF9ERUNfRU5cXHRcXHRCSVQoMylcXG4gI2RlZmluZSBSVFdfU0VDX1RYX0JDX1VTRV9ES1xcdFxcdEJJVCg2KVxcbiAjZGVmaW5lIFJUV19TRUNfUlhfQkNfVVNFX0RLXFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgUlRXX1NFQ19DSEtfS0VZSURcXHRcXHRCSVQoOClcXG4gXFxuICNkZWZpbmUgUlRXX1NFQ19FTkdJTkVfRU5cXHRcXHRCSVQoOSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMyOjQ2LjQ4NTIxMzg2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMzY4ODQ3Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUwODliN2Q1OWFiOWQ5M2VhNTFhNzE0MmYyZTQ5MWUwYzBjZjUxNmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzozMjo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmNcbmluZGV4IDM3YzMzNmRlZjQxOTE1Li4zMTRiMmEzNjhhOGYxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguY1xuQEAgLTE0NDMsNiArMTQ0MywxOTEgQEAgc3RhdGljIHZvaWQgcnR3X2NvZXhfc2V0X2FudF9wYXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UsIHU4IHBoYXNlKVxuICNkZWZpbmUgY2FzZV9BTEdPKHNyYykgXFxcbiBcdGNhc2UgQ09FWF9BTEdPXyMjc3JjOiByZXR1cm4gI3NyY1xuIFxuKy8qIDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UgYW50ZW5uYSBoYW5kbGluZy4gT24gQlQtZGlzYWJsZWQgYm9hcmRzIHRoZVxuKyAqIHNjYW4vYXV0aCB3aW5kb3cgc3RpbGwgcm91dGVzIHRocm91Z2ggdGhlIFBUQSBtdXg7IHRoZXNlIGhlbHBlcnMgZm9yY2UgdGhlXG4rICogdmVuZG9yLXNoYXBlZCBXaUZpLW93bmVkIGFudGVubmEgcGF0aCBzbyBkaXJlY3RlZCBtYW5hZ2VtZW50IFRYIHJlYWNoZXMgYWlyLlxuKyAqL1xuKyNkZWZpbmUgUkVHXzg3MjNCU19CVF9DT0VYX0NUUkxcdFx0MHgwMDM5XG4rI2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkdcdFx0MHgwOTMwXG4rI2RlZmluZSBSRUdfODcyM0JTX0JCX0FOVF9DRkcxXHRcdDB4MDk0NFxuKyNkZWZpbmUgUkVHXzg3MjNCU19CQl9BTlRfQlVGXHRcdDB4MDk3NFxuKyNkZWZpbmUgUlRXODcyM0JTX0NPRVhfSF9XTEFOX0FDVElWRVx0MHgxODAwMTAxYlxuK1xuK3N0YXRpYyBib29sIHJ0d19jb2V4Xzg3MjNic19hbnRfaXNfYXV4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cmV0dXJuICEhKHJ0d2Rldi1cdTAwM2VlZnVzZS5idF9zZXR0aW5nIFx1MDAyNiBCSVQoNikpO1xuK31cbitcbitzdGF0aWMgYm9vbCBydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBydHdkZXYtXHUwMDNlY29leC5zdGF0LmJ0X2Rpc2FibGVkO1xuK31cbitcbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3X2NvZXhfODcyM2JzX2FudF9pc19hdXgocnR3ZGV2KSA/IDB4ODAgOiAweDIwMDtcbit9XG4rXG4rLyogV3JpdGUgQkJfU0VMX0JURywgcmV0cnlpbmcgb25jZSB3aXRoIFNZU19GVU5DIEJCIHJlc2V0IGlmIHRoZSBmaXJzdFxuKyAqIHdyaXRlIGRvZXMgbm90IHN0aWNrIChSRi9CQiBjbG9jayBtYXkgaGF2ZSBiZWVuIGdhdGVkKS5cbisgKi9cbitzdGF0aWMgdTMyIHJ0d19jb2V4Xzg3MjNic193cml0ZV9iYl9zZWxfYnRnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiB2YWx1ZSlcbit7XG4rXHR1OCBzeXNfZnVuY19iZWZvcmU7XG4rXHR1MzIgcmVhZGJhY2s7XG4rXG4rXHRzeXNfZnVuY19iZWZvcmUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4pO1xuK1x0aWYgKChzeXNfZnVuY19iZWZvcmUgXHUwMDI2IChCSVQoMCkgfCBCSVQoMSkpKSAhPSAoQklUKDApIHwgQklUKDEpKSkge1xuK1x0XHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19TWVNfRlVOQ19FTiwgQklUKDApIHwgQklUKDEpKTtcbitcdFx0dXNsZWVwX3JhbmdlKDEwLCAxMSk7XG4rXHR9XG4rXG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XG4rXHRyZWFkYmFjayA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfQkJfU0VMX0JUR184NzIzQik7XG4rXHRpZiAocmVhZGJhY2sgPT0gdmFsdWUpXG4rXHRcdHJldHVybiByZWFkYmFjaztcbitcbitcdHVzbGVlcF9yYW5nZSgxMCwgMTEpO1xuK1x0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCLCB2YWx1ZSk7XG4rXG4rXHRyZXR1cm4gcnR3X3JlYWQzMihydHdkZXYsIFJFR19CQl9TRUxfQlRHXzg3MjNCKTtcbit9XG4rXG4rc3RhdGljIHUzMiBydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHJldHVybiBydHdfY29leF84NzIzYnNfd3JpdGVfYmJfc2VsX2J0ZyhydHdkZXYsXG4rXHRcdFx0XHRcdFx0cnR3X2NvZXhfODcyM2JzX3B0YV9hbnRfcGF0aChydHdkZXYpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgaGlnaClcbit7XG4rXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoaGlnaCkge1xuK1x0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19CVF9DT0VYX1RBQkxFX0gsXG4rXHRcdFx0ICAgIFJUVzg3MjNCU19DT0VYX0hfV0xBTl9BQ1RJVkUpO1xuK1x0fSBlbHNlIHtcbitcdFx0cnR3X2NvZXhfc2V0X3dsX3ByaV9tYXNrKHJ0d2RldiwgQ09FWF9XTFBSSV9UWF9DQ0ssIGZhbHNlKTtcbitcdFx0cnR3X2NvZXhfc2V0X3dsX3ByaV9tYXNrKHJ0d2RldiwgQ09FWF9XTFBSSV9SWF9DQ0ssIGZhbHNlKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICBib29sIGtlZXBfcHRhX293bmVyKVxuK3tcbitcdHUzMiBiZWZvcmUsIGFmdGVyO1xuK1xuK1x0YmVmb3JlID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19QQURfQ1RSTDEpO1xuK1x0YWZ0ZXIgPSBiZWZvcmUgXHUwMDI2IH4oQklUX0xOQU9OX1dMQlRfU0VMIHwgQklUX1NXX0RQRFRfU0VMX0RBVEEpO1xuK1x0aWYgKGtlZXBfcHRhX293bmVyKVxuK1x0XHRhZnRlciB8PSBCSVRfUEFQRV9XTEJUX1NFTDtcbitcdGVsc2VcbitcdFx0YWZ0ZXIgXHUwMDI2PSB+QklUX1BBUEVfV0xCVF9TRUw7XG4rXHRpZiAoYWZ0ZXIgIT0gYmVmb3JlKVxuK1x0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19QQURfQ1RSTDEsIGFmdGVyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3coc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocnR3X3JlYWQ4KHJ0d2RldiwgUkVHX0dOVF9CVCkgPT0gMHgwMCBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfQlRfQ09FWF9FTkhfSU5UUl9DVFJMKSA9PSAweDBjKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydHdfZndfc2V0X2dudF9idChydHdkZXYsIDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfY29leF84NzIzYnNfZm9yY2VfYXNzb2NfcHRhX2FudChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHUzMiBhbnRfdGFyZ2V0O1xuK1xuK1x0aWYgKCFydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YW50X3RhcmdldCA9IHJ0d19jb2V4Xzg3MjNic19wdGFfYW50X3BhdGgocnR3ZGV2KTtcbitcbitcdHJ0d19jb2V4Xzg3MjNic19md19nbnRfYnRfbG93KHJ0d2Rldik7XG4rXHRydHdfY29leF9zZXRfYW50X3N3aXRjaChydHdkZXYsIENPRVhfU1dJVENIX0NUUkxfQllfUFRBLFxuK1x0XHRcdFx0Q09FWF9TV0lUQ0hfVE9fTk9DQVJFKTtcbitcdHJ0d19jb2V4Xzg3MjNic19zZXRfY2NrX3ByaShydHdkZXYsIHRydWUpO1xuK1x0cnR3X2NvZXhfODcyM2JzX3dyaXRlX2JiX3NlbF9idGcocnR3ZGV2LCBhbnRfdGFyZ2V0KTtcbitcdHJ0d19jb2V4Xzg3MjNic19yZXN0b3JlX3BhZF9jdHJsKHJ0d2RldiwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTggc3lzX2Z1bmNfYmVmb3JlO1xuK1xuK1x0c3lzX2Z1bmNfYmVmb3JlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NZU19GVU5DX0VOKTtcbitcdGlmICgoc3lzX2Z1bmNfYmVmb3JlIFx1MDAyNiAoQklUKDApIHwgQklUKDEpKSkgIT0gKEJJVCgwKSB8IEJJVCgxKSkpIHtcbitcdFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sIEJJVCgwKSB8IEJJVCgxKSk7XG4rXHRcdHVzbGVlcF9yYW5nZSgxMCwgMTEpO1xuK1x0fVxuK1xuK1x0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CVF9DT0VYX0NUUkwsIEJJVCgzKSwgMHgxKTtcbitcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfODcyM0JTX0JCX0FOVF9CVUYsIDB4ZmYpO1xuK1x0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHXzg3MjNCU19CQl9BTlRfQ0ZHMSwgMHgzLCAweDMpO1xuK1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR184NzIzQlNfQkJfQU5UX0NGRywgMHg3Nyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19jb2V4Xzg3MjNic19hcHBseV9zY2FuX3RhYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cnR3ZGV2LVx1MDAzZWNvZXguZG0uY3VyX3RhYmxlID0gMjtcbitcdHJ0d19jb2V4X3NldF90YWJsZShydHdkZXYsIHRydWUsIDB4NWE1YTVhNWEsIDB4NWE1YTVhNWEpO1xuK31cbitcbisvKiBOb24tY29ubmVjdGVkIHNjYW4vYXV0aCB3b3JrYXJvdW5kOiBQUy1URE1BIHR5cGUgOCBvZmYsIFBUQSBhbnRlbm5hIHBhdGgsXG4rICogY29leCB0YWJsZSB0eXBlIDIgKG1hdGNoZXMgdGhlIHZlbmRvciBub24tY29ubmVjdGVkIGFyYml0cmF0aW9uKS5cbisgKi9cbit2b2lkIHJ0d19jb2V4Xzg3MjNic19zY2FuX3dvcmthcm91bmQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X2NvZXhfZG0gKmNvZXhfZG0gPSBcdTAwMjZydHdkZXYtXHUwMDNlY29leC5kbTtcbitcdHN0cnVjdCBydHdfY29leF9zdGF0ICpjb2V4X3N0YXQgPSBcdTAwMjZydHdkZXYtXHUwMDNlY29leC5zdGF0O1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybjtcbitcbitcdGNvZXhfZG0tXHUwMDNlY3VyX3BzX3RkbWFfb24gPSBmYWxzZTtcbitcdGNvZXhfZG0tXHUwMDNlY3VyX3BzX3RkbWEgPSA4O1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMF0gPSAweDA4O1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMV0gPSAweDAwO1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbMl0gPSAweDAwO1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbM10gPSAweDAwO1xuK1x0Y29leF9kbS1cdTAwM2Vwc190ZG1hX3BhcmFbNF0gPSAweDAwO1xuK1xuK1x0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XG4rXHRydHdfY29leF84NzIzYnNfZndfZ250X2J0X2xvdyhydHdkZXYpO1xuK1x0cnR3X2NvZXhfc2V0X2FudF9wYXRoKHJ0d2RldiwgdHJ1ZSwgQ09FWF9TRVRfQU5UXzJHKTtcbitcdHJ0d19jb2V4Xzg3MjNic19yZWFzc2VydF9hbnRfYnVmZmVyKHJ0d2Rldik7XG4rXHRydHdfY29leF84NzIzYnNfYXBwbHlfc2Nhbl90YWJsZShydHdkZXYpO1xuK1x0aWYgKGNvZXhfc3RhdC1cdTAwM2VidF9kaXNhYmxlZClcbitcdFx0cnR3X2NvZXhfODcyM2JzX3NldF9jY2tfcHJpKHJ0d2RldiwgdHJ1ZSk7XG4rXHRydHdfY29leF84NzIzYnNfcmVhc3NlcnRfcHRhX2FudChydHdkZXYpO1xuK1x0cnR3X2NvZXhfODcyM2JzX3Jlc3RvcmVfcGFkX2N0cmwocnR3ZGV2LCB0cnVlKTtcbit9XG4rXG4rLyogUmVwbGF5ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHN0YXJ0X2NsbnRfam9pbigpL2F1dGg6IEJUX0lORk8gKyBQUy1URE1BIHR5cGUgOFxuKyAqIHRoZW4gdGhlIGZvcmNlZCBXaUZpIFBUQSBhbnRlbm5hIHBhdGgsIHNvIHRoZSBhdXRoIHdpbmRvdyBpcyBjbGVhbi5cbisgKi9cbit2b2lkIHJ0d19jb2V4Xzg3MjNic19wcmVfYXV0aF9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4rXG4rXHRpZiAoIXJ0d19jb2V4Xzg3MjNic19idF9kaXNhYmxlZChydHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydHdfZndfcXVlcnlfYnRfaW5mbyhydHdkZXYpO1xuK1x0cnR3X2Z3X2NvZXhfdGRtYV90eXBlKHJ0d2RldiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7XG4rXHRydHdfZndfY29leF90ZG1hX3R5cGUocnR3ZGV2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTtcbitcdHJ0d19md19jb2V4X3RkbWFfdHlwZShydHdkZXYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApO1xuK1x0cnR3X2NvZXhfODcyM2JzX2Z3X2dudF9idF9sb3cocnR3ZGV2KTtcbitcdHJ0d19jb2V4Xzg3MjNic19mb3JjZV9hc3NvY19wdGFfYW50KHJ0d2Rldik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBjaGFyICpydHdfY29leF9nZXRfYWxnb19zdHJpbmcodTggYWxnbylcbiB7XG4gXHRzd2l0Y2ggKGFsZ28pIHtcbkBAIC0yNzcwLDcgKzI5NTUsNyBAQCB2b2lkIHJ0d19jb2V4X3Bvd2VyX29uX3NldHRpbmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdGNvZXgtXHUwMDNlc3RvcF9kbSA9IHRydWU7XG4gXHRjb2V4LVx1MDAzZXdsX3JmX29mZiA9IGZhbHNlO1xuIFxuLVx0LyogZW5hYmxlIEJCLCB3ZSBjYW4gd3JpdGUgMHg5NDggKi9cbitcdC8qIGVuYWJsZSBCQiwgc28gQkJfU0VMX0JURyBpcyB3cml0YWJsZSAqL1xuIFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfU1lTX0ZVTkNfRU4sXG4gXHRcdCAgICAgICBCSVRfRkVOX0JCX0dMQl9SU1QgfCBCSVRfRkVOX0JCX1JTVEIpO1xuIFxuQEAgLTI4NzcsNiArMzA2MiwzMyBAQCB2b2lkIHJ0d19jb2V4X3NjYW5fbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpXG4gXHRjb2V4LVx1MDAzZWZyZWV6ZSA9IGZhbHNlO1xuIFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xuIFxuK1x0LyogODcyM0JTIFNESU8gQlQtZGlzYWJsZWQ6IGtlZXAgdGhlIHNjYW4vYXV0aCBQVEEgYW50ZW5uYSBzdGF0ZSB0aGVcbitcdCAqIHZlbmRvciB1c2VzIGFuZCBza2lwIHRoZSBnZW5lcmljIGNvZXggcnVuLiBBdCBzY2FuIHN0YXJ0IChmaXJtd2FyZVxuK1x0ICogaGFzIGJlZW4gdXAgbG9uZyBlbm91Z2ggZm9yIHN0YWJsZSBSWCBETUEpIHJlcGxheSB0aGUgdmVuZG9yIEJUX01QIC9cbitcdCAqIEJUX0lORk8gcXVlcmllcywgdGhlbiByZS1lc3RhYmxpc2ggdGhlIHNjYW4tcGF0aCBQVEEgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChydHdfY29leF84NzIzYnNfYnRfZGlzYWJsZWQocnR3ZGV2KSkge1xuK1x0XHRpZiAodHlwZSA9PSBDT0VYX1NDQU5fU1RBUlRfMkcgfHwgdHlwZSA9PSBDT0VYX1NDQU5fU1RBUlQpIHtcbitcdFx0XHRzdHJ1Y3QgcnR3X2NvZXhfaW5mb19yZXEgcmVxID0ge307XG4rXG4rXHRcdFx0Y29leF9zdGF0LVx1MDAzZWNudF93bFtDT0VYX0NOVF9XTF9TQ0FOQVBdID0gMDtcbitcdFx0XHRjb2V4X3N0YXQtXHUwMDNld2xfaGlfcHJpX3Rhc2syID0gdHJ1ZTtcbitcbitcdFx0XHRyZXEuc2VxID0gMHgwZTtcbitcdFx0XHRyZXEub3BfY29kZSA9IEJUX01QX0lORk9fT1BfU1VQUF9WRVI7XG4rXHRcdFx0cnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCBcdTAwMjZyZXEpO1xuK1x0XHRcdHJlcS5zZXEgPSAweDBmO1xuK1x0XHRcdHJlcS5vcF9jb2RlID0gQlRfTVBfSU5GT19PUF9QQVRDSF9WRVI7XG4rXHRcdFx0cnR3X2Z3X3F1ZXJ5X2J0X21wX2luZm8ocnR3ZGV2LCBcdTAwMjZyZXEpO1xuK1x0XHRcdHJ0d19md19xdWVyeV9idF9pbmZvKHJ0d2Rldik7XG4rXG4rXHRcdFx0cnR3X2NvZXhfODcyM2JzX3NjYW5fd29ya2Fyb3VuZChydHdkZXYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGNvZXhfc3RhdC1cdTAwM2V3bF9oaV9wcmlfdGFzazIgPSBmYWxzZTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAodHlwZSA9PSBDT0VYX1NDQU5fU1RBUlRfNUcpIHtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfQ09FWCxcbiBcdFx0XHRcIltCVENvZXhdLCBTQ0FOIFNUQVJUIG5vdGlmeSAoNUcpXFxuXCIpO1xuQEAgLTI5MzgsNiArMzE1MCwxNyBAQCB2b2lkIHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHR5cGUpXG4gXHRpZiAoY29leC1cdTAwM2VtYW51YWxfY29udHJvbCB8fCBjb2V4LVx1MDAzZXN0b3BfZG0pXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIDg3MjNCUyBTRElPIEJULWRpc2FibGVkOiB0aGUgdmVuZG9yIENvbm5lY3ROb3RpZnkoKSBlYXJseS1yZXR1cm5zXG4rXHQgKiB3aXRob3V0IHNlbmRpbmcgSDJDczsgc2Nhbl93b3JrYXJvdW5kIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhlIFBUQVxuK1x0ICogcGF0aCAvIGNvZXggdGFibGUgLyBQUy1URE1BLiBLZWVwIG9ubHkgdGhlIHJlZ2lzdGVyLWxldmVsIFBUQVxuK1x0ICogcmVhc3NlcnRpb24gYXQgYXNzb2NpYXRlLXN0YXJ0LlxuK1x0ICovXG4rXHRpZiAocnR3X2NvZXhfODcyM2JzX2J0X2Rpc2FibGVkKHJ0d2RldikpIHtcbitcdFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfU1RBUlQpXG4rXHRcdFx0cnR3X2NvZXhfODcyM2JzX2ZvcmNlX2Fzc29jX3B0YV9hbnQocnR3ZGV2KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cnR3X2NvZXhfd3JpdGVfc2NiZChydHdkZXYsIENPRVhfU0NCRF9BQ1RJVkUgfCBDT0VYX1NDQkRfT05PRkYsIHRydWUpO1xuIFxuIFx0aWYgKHR5cGUgPT0gQ09FWF9BU1NPQ0lBVEVfNUdfU1RBUlQpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvY29leC5oXG5pbmRleCBjMzk4YmU4MzkxZjdiMC4uYzU4YWUwYTUwYjMwYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2NvZXguaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9jb2V4LmhcbkBAIC00MzAsNCArNDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJ0d19jb2V4X2FjdGl2ZV9xdWVyeV9idF9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJ0d19jb2V4X3F1ZXJ5X2J0X2luZm8ocnR3ZGV2KTtcbiB9XG4gXG4rdm9pZCBydHdfY29leF84NzIzYnNfc2Nhbl93b3JrYXJvdW5kKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuK3ZvaWQgcnR3X2NvZXhfODcyM2JzX3ByZV9hdXRoX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KTtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbmluZGV4IDk0NWZlZGNkMzc1YjYyLi43YzE3MDg2Y2FjMzJjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG5AQCAtNzg2LDYgKzc4NiwxNyBAQCB2b2lkIHJ0d19md19tZWRpYV9zdGF0dXNfcmVwb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IG1hY19pZCwgYm9vbCBjb25uZWN0KVxuIFx0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbiB9XG4gXG4rLyogODcyM0JTIFNESU86IHNldCB0aGUgZmlybXdhcmUgR05UX0JUIHN0YXRlICgwID0gV2lGaSBvd25zIHRoZSBhbnRlbm5hKS4gKi9cbit2b2lkIHJ0d19md19zZXRfZ250X2J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHN0YXRlKVxuK3tcbitcdHU4IGgyY19wa3RbSDJDX1BLVF9TSVpFXSA9IHswfTtcbitcbitcdFNFVF9IMkNfQ01EX0lEX0NMQVNTKGgyY19wa3QsIEgyQ19DTURfR05UX0JUKTtcbitcdFNFVF9HTlRfQlRfU1RBVEUoaDJjX3BrdCwgc3RhdGUpO1xuK1xuK1x0cnR3X2Z3X3NlbmRfaDJjX2NvbW1hbmQocnR3ZGV2LCBoMmNfcGt0KTtcbit9XG4rXG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d190cmFmZmljX3N0YXRzICpzdGF0cyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VzdGF0cztcbkBAIC0xNDY2LDEwICsxNDc3LDE0IEBAIHZvaWQgcnR3X2FkZF9yc3ZkX3BhZ2Vfc3RhKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRydHdfYWRkX3JzdmRfcGFnZShydHdkZXYsIHJ0d3ZpZiwgUlNWRF9MUFNfUEdfSU5GTywgdHJ1ZSk7XG4gfVxuIFxuKy8qIFJFR19EV0JDTjFfQ1RSTCBiaXQgMjAgKFNXX0JDTl9TRUwgZm9yIHBvcnQgMCksIHJlbGF0aXZlIHRvIGJ5dGUgKzIgKi9cbisjZGVmaW5lIEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDBcdCgyMCAtIDE2KVxuK1xuIGludCBydHdfZndfd3JpdGVfZGF0YV9yc3ZkX3BhZ2Uoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2IHBnX2FkZHIsXG4gXHRcdFx0XHR1OCAqYnVmLCB1MzIgc2l6ZSlcbiB7XG4tXHR1OCBiY2twWzNdO1xuK1x0Y29uc3QgYm9vbCBpc184NzIzYnNfc2RpbyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHU4IGJja3BbNF07XG4gXHR1OCB2YWw7XG4gXHR1MTYgcnN2ZF9wZ19oZWFkO1xuIFx0dTMyIGJjbl92YWxpZF9hZGRyO1xuQEAgLTE0OTksMTMgKzE1MTQsMjggQEAgaW50IHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgcGdfYWRkcixcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsXG4gXHRcdCAgIChiY2twWzJdIFx1MDAyNiB+QklUX0VOX0JDTl9GVU5DVElPTikgfCBCSVRfRElTX1RTRl9VRFQpO1xuIFxuLVx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKSB7XG4rXHQvKiBDbGVhciBCSVRfRU5fQkNOUV9ETCBzbyB0aGUgY2hpcCBkb2VzIG5vdCB0cmVhdCB0aGUgcmVzZXJ2ZWQtcGFnZVxuK1x0ICogdXBsb2FkIGFzIGEgcmVhbCBiZWFjb247IG90aGVyd2lzZSBCSVRfQkNOX1ZBTElEIG5ldmVyIGFzc2VydHMuIFRoZVxuK1x0ICogdmVuZG9yIHJ0bDg3MjNicyBkcml2ZXIgZG9lcyB0aGlzIHVuY29uZGl0aW9uYWxseTsgcnR3ODggb25seSBkaWQgaXRcbitcdCAqIGZvciBQQ0llLCB3aGljaCBsZWZ0IDg3MjNCUyBTRElPJ3MgQkNOX1ZBTElEIGhhbmRzaGFrZSBmYWlsaW5nLlxuK1x0ICovXG4rXHRpZiAocnR3X2hjaV90eXBlKHJ0d2RldikgPT0gUlRXX0hDSV9UWVBFX1BDSUUgfHwgaXNfODcyM2JzX3NkaW8pIHtcbiBcdFx0dmFsID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyKTtcbiBcdFx0YmNrcFsxXSA9IHZhbDtcbiBcdFx0dmFsIFx1MDAyNj0gfihCSVRfRU5fQkNOUV9ETCBcdTAwM2VcdTAwM2UgMTYpO1xuIFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCB2YWwpO1xuIFx0fVxuIFxuK1x0LyogODcyM0JTIFNESU86IHBvaW50IHRoZSBTVyBiZWFjb24gZG93bmxvYWQgcGF0aCBhdCBwb3J0IDAsIGVsc2VcbitcdCAqIEJJVF9CQ05fVkFMSUQgaXMgbmV2ZXIgYXNzZXJ0ZWQgYWZ0ZXIgdGhlIFNESU8gdXBsb2FkIGNvbXBsZXRlcy5cbitcdCAqL1xuK1x0aWYgKGlzXzg3MjNic19zZGlvKSB7XG4rXHRcdHZhbCA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19EV0JDTjFfQ1RSTCArIDIpO1xuK1x0XHRiY2twWzNdID0gdmFsO1xuK1x0XHR2YWwgXHUwMDI2PSB+QklUKEJJVF9PRkZTRVRfRFdCQ04xX1NXX0JDTl9TRUxfUE9SVDApO1xuK1x0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0RXQkNOMV9DVFJMICsgMiwgdmFsKTtcbitcdH1cbitcbiBcdHJldCA9IHJ0d19oY2lfd3JpdGVfZGF0YV9yc3ZkX3BhZ2UocnR3ZGV2LCBidWYsIHNpemUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRydHdfZXJyKHJ0d2RldiwgXCJmYWlsZWQgdG8gd3JpdGUgZGF0YSB0byByc3ZkIHBhZ2VcXG5cIik7XG5AQCAtMTUyNiwxMSArMTU1NiwxMyBAQCBpbnQgcnR3X2Z3X3dyaXRlX2RhdGFfcnN2ZF9wYWdlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiBwZ19hZGRyLFxuIFx0fVxuIFxuIHJlc3RvcmU6XG4rXHRpZiAoaXNfODcyM2JzX3NkaW8pXG4rXHRcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfRFdCQ04xX0NUUkwgKyAyLCBiY2twWzNdKTtcbiBcdHJzdmRfcGdfaGVhZCA9IHJ0d2Rldi1cdTAwM2VmaWZvLnJzdmRfYm91bmRhcnk7XG4gXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19GSUZPUEFHRV9DVFJMXzIsXG4gXHRcdCAgICByc3ZkX3BnX2hlYWQgfCBCSVRfQkNOX1ZBTElEX1YxKTtcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIGJja3BbMl0pO1xuLVx0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFKVxuK1x0aWYgKHJ0d19oY2lfdHlwZShydHdkZXYpID09IFJUV19IQ0lfVFlQRV9QQ0lFIHx8IGlzXzg3MjNic19zZGlvKVxuIFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLCBiY2twWzFdKTtcbiBcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfQ1IgKyAxLCBiY2twWzBdKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcbmluZGV4IDQ4YWQ5Y2VhYjZlYTEyLi5mNWVkNjVjNDYzNTBmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5AQCAtNTcyLDYgKzU3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBydHdfaDJjX3BrdF9zZXRfaGVhZGVyKHU4ICpoMmNfcGt0LCB1OCBzdWJfaWQpXG4gI2RlZmluZSBIMkNfQ01EX1FVRVJZX0JUX01QX0lORk9cdDB4NjdcbiAjZGVmaW5lIEgyQ19DTURfQlRfV0lGSV9DT05UUk9MXHRcdDB4NjlcbiAjZGVmaW5lIEgyQ19DTURfV0lGSV9DQUxJQlJBVElPTlx0MHg2ZFxuKyNkZWZpbmUgSDJDX0NNRF9HTlRfQlRcdFx0XHQweDZlXG4gI2RlZmluZSBIMkNfQ01EX1FVRVJZX0JUX0hJRF9JTkZPXHQweDczXG4gXG4gI2RlZmluZSBIMkNfQ01EX0tFRVBfQUxJVkVcdFx0MHgwM1xuQEAgLTY4NCw2ICs2ODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnR3X2gyY19wa3Rfc2V0X2hlYWRlcih1OCAqaDJjX3BrdCwgdTggc3ViX2lkKVxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAxLCB2YWx1ZSwgR0VOTUFTSygzMSwgMjQpKVxuICNkZWZpbmUgU0VUX1FVRVJZX0JUX0lORk8oaDJjX3BrdCwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuKyNkZWZpbmUgU0VUX0dOVF9CVF9TVEFURShoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuK1x0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgQklUKDgpKVxuICNkZWZpbmUgU0VUX1dMX0NIX0lORk9fTElOSyhoMmNfcGt0LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIFx0bGUzMnBfcmVwbGFjZV9iaXRzKChfX2xlMzIgKikoaDJjX3BrdCkgKyAweDAwLCB2YWx1ZSwgR0VOTUFTSygxNSwgOCkpXG4gI2RlZmluZSBTRVRfV0xfQ0hfSU5GT19DSE5MKGgyY19wa3QsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5AQCAtODQ5LDYgKzg1Miw3IEBAIHZvaWQgcnR3X2Z3X3NlbmRfcnNzaV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBydHdfc3RhX2luZm8gKnNpKTtcbiB2b2lkIHJ0d19md19zZW5kX3JhX2luZm8oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHJ0d19zdGFfaW5mbyAqc2ksXG4gXHRcdFx0IGJvb2wgcmVzZXRfcmFfbWFzayk7XG4gdm9pZCBydHdfZndfbWVkaWFfc3RhdHVzX3JlcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBtYWNfaWQsIGJvb2wgY29ubik7XG4rdm9pZCBydHdfZndfc2V0X2dudF9idChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBzdGF0ZSk7XG4gdm9pZCBydHdfZndfdXBkYXRlX3dsX3BoeV9pbmZvKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuIHZvaWQgcnR3X2Z3X2JlYWNvbl9maWx0ZXJfY29uZmlnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgY29ubmVjdCxcbiBcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21hYzgwMjExLmNcbmluZGV4IDc2NmYyMmQzMTA3OWVlLi45MTAxNGE4ZTI0MmIzMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFjODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWM4MDIxMS5jXG5AQCAtMTUsNiArMTUsNDYzIEBAXG4gI2luY2x1ZGUgXCJ3b3cuaFwiXG4gI2luY2x1ZGUgXCJzYXIuaFwiXG4gXG4rLyogODcyM0JTIFNESU86IHJlY29yZCBhIGJlYWNvbi9wcm9iZS1yZXNwIHNlZW4gZnJvbSB0aGUgdGFyZ2V0IEJTU0lEIGR1cmluZ1xuKyAqIHRoZSBwcmUtYXV0aCB3aW5kb3cgc28gdGhlIGpvaW4gc2VxdWVuY2UgKG1nZF9wcmVwYXJlX3R4KSBjYW4gd2FpdCBmb3IgaXQsXG4rICogbWlycm9yaW5nIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkuIENhbGxlZCBmcm9tIHRoZSBTRElPIFJYIHBhdGguXG4rICovXG4rdm9pZCBydHc4NzIzYnNfYXV0aF9zeW5jX3J4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHUzMiBsZW4sXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBydHdfcnhfcGt0X3N0YXQgKnBrdF9zdGF0LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKVxuK3tcbitcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRfX2xlMTYgZmMgPSBoZHItXHUwMDNlZnJhbWVfY29udHJvbDtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cdTAwM2VmbGFncykgfHxcbitcdCAgICBwa3Rfc3RhdC1cdTAwM2VjcmNfZXJyIHx8IHBrdF9zdGF0LVx1MDAzZWljdl9lcnIpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihmYykgXHUwMDI2XHUwMDI2ICFpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0aWYgKHN5bmMtXHUwMDNlYWN0aXZlIFx1MDAyNlx1MDAyNiBldGhlcl9hZGRyX2VxdWFsKGhkci1cdTAwM2VhZGRyMywgc3luYy1cdTAwM2Vic3NpZCkpIHtcbitcdFx0c3luYy1cdTAwM2VzZWVuID0gdHJ1ZTtcbitcdFx0c3luYy1cdTAwM2VzZWVuX2NvdW50Kys7XG4rXHRcdHdha2VfdXAoXHUwMDI2c3luYy1cdTAwM2V3YWl0KTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocnR3ODcyM2JzX2F1dGhfc3luY19yeCk7XG4rXG4rLyogLS0tLSA4NzIzQlMgU0RJTyBhc3NvY2lhdGlvbiBzZXF1ZW5jZSAodmVuZG9yIHN0YXJ0X2NsbnRfam9pbikgLS0tLSAqL1xuK1xuKyNkZWZpbmUgUlRXODcyM0JTX0pPSU5fUkVUUllfTElNSVRcdFx0MHgzMFxuKyNkZWZpbmUgUlRXODcyM0JTX0FVVEhfU1lOQ19XQUlUX0ZBTExCQUNLX01TXHQxMjBcbisjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVNcdFx0ODBcbisjZGVmaW5lIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NQVhfTVNcdFx0MTYwXG4rI2RlZmluZSBSVFc4NzIzQlNfQUNLX1BSRUFNQkxFX1NIT1JUXHRcdEJJVCg3KVxuKyNkZWZpbmUgUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRVx0XHQ5XG4rI2RlZmluZSBSVFc4NzIzQlNfTE9OR19TTE9UX1RJTUVcdFx0MjBcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzFNXHRcdFx0QklUKDApXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yTVx0XHRcdEJJVCgxKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNV81TVx0XHRcdEJJVCgyKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMTFNXHRcdFx0QklUKDMpXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl82TVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfOU1cdFx0XHRCSVQoNSlcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzEyTVx0XHRcdEJJVCg2KVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfMThNXHRcdFx0QklUKDcpXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yNE1cdFx0XHRCSVQoOClcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzM2TVx0XHRcdEJJVCg5KVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNDhNXHRcdFx0QklUKDEwKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfNTRNXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgUlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTIFxcXG4rXHQoUlRXODcyM0JTX1JSU1JfMU0gfCBSVFc4NzIzQlNfUlJTUl8yTSB8IFxcXG4rXHQgUlRXODcyM0JTX1JSU1JfNV81TSB8IFJUVzg3MjNCU19SUlNSXzExTSlcbisjZGVmaW5lIFJUVzg3MjNCU19SUlNSXzJHX0ZPUkNFXHRcdFx0UlRXODcyM0JTX1JSU1JfQ0NLX1JBVEVTXG4rI2RlZmluZSBSVFc4NzIzQlNfUlJTUl8yR19BTExPVyBcXFxuK1x0KFJUVzg3MjNCU19SUlNSX0NDS19SQVRFUyB8IFJUVzg3MjNCU19SUlNSXzZNIHwgXFxcbitcdCBSVFc4NzIzQlNfUlJTUl8xMk0gfCBSVFc4NzIzQlNfUlJTUl8yNE0pXG4rXG4rLyogS2VlcCB0aGUgUkNSIGF0IHRoZSB2ZW5kb3IgdGFyZ2V0LW9ubHkgc3RhdGUgKEFNRiArIENCU1NJRCkgYWNyb3NzIHRoZSB3aG9sZVxuKyAqIGNvbm5lY3Qgd2luZG93LCBtYXRjaGluZyB0aGUgdmVuZG9yIFNUQSBwYXRoLiBhY2NlcHRfYWxsIGlzIGtlcHQgb25seSBmb3IgdGhlXG4rICogY2FsbGVyJ3MgaW50ZW50OyBib3RoIHBhdGhzIGNvbnZlcmdlIHRoZSBmaWx0ZXIgdG8gdGFyZ2V0LW9ubHkuXG4rICovXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfcnhfZmlsdGVyKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgYWNjZXB0X2FsbClcbit7XG4rXHRydHdkZXYtXHUwMDNlaGFsLnJjciB8PSBCSVRfQU1GIHwgQklUX0NCU1NJRF9EQVRBIHwgQklUX0NCU1NJRF9CQ047XG4rXHRydHdkZXYtXHUwMDNlaGFsLnJjciBcdTAwMjY9IH5CSVRfQUFQO1xuK1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUkNSLCBydHdkZXYtXHUwMDNlaGFsLnJjcik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHUxNiBzZWMgPSBydHdfcmVhZDE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcpO1xuK1xuK1x0c2VjIHw9IFJUV19TRUNfQ0hLX0tFWUlEIHwgUlRXX1NFQ19UWF9ERUNfRU4gfCBSVFdfU0VDX1JYX0RFQ19FTjtcbitcdHJ0d193cml0ZTE2KHJ0d2RldiwgUlRXX1NFQ19DT05GSUcsIHNlYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19jb25maWdfZGVmYXVsdF9rZXlfc2VhcmNoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdFx0Ym9vbCBlbmFibGUpXG4re1xuK1x0dTE2IHNlYyA9IHJ0d19yZWFkMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRyk7XG4rXG4rXHRpZiAoZW5hYmxlKVxuK1x0XHRzZWMgfD0gUlRXX1NFQ19UWF9CQ19VU0VfREsgfCBSVFdfU0VDX1RYX1VOSV9VU0VfREsgfFxuK1x0XHQgICAgICAgUlRXX1NFQ19SWF9VTklfVVNFX0RLO1xuK1x0ZWxzZVxuK1x0XHRzZWMgXHUwMDI2PSB+KFJUV19TRUNfVFhfVU5JX1VTRV9ESyB8IFJUV19TRUNfUlhfVU5JX1VTRV9ESyB8XG4rXHRcdFx0IFJUV19TRUNfVFhfQkNfVVNFX0RLIHwgUlRXX1NFQ19SWF9CQ19VU0VfREspO1xuK1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSVFdfU0VDX0NPTkZJRywgc2VjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2VuYWJsZV90c2ZfdXBkYXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cnR3X3dyaXRlOF9jbHIocnR3ZGV2LCBSRUdfQkNOX0NUUkwsIEJJVF9ESVNfVFNGX1VEVCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19zZXRfYWNrX3ByZWFtYmxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBzaG9ydF9wcmVhbWJsZSlcbit7XG4rXHR1OCB2YWwgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfUlJTUiArIDIpIFx1MDAyNiB+UlRXODcyM0JTX0FDS19QUkVBTUJMRV9TSE9SVDtcbitcbitcdGlmIChzaG9ydF9wcmVhbWJsZSlcbitcdFx0dmFsIHw9IFJUVzg3MjNCU19BQ0tfUFJFQU1CTEVfU0hPUlQ7XG4rXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1JSU1IgKyAyLCB2YWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIHNob3J0X3Nsb3QpXG4re1xuK1x0cnR3X3dyaXRlOChydHdkZXYsIFJFR19TTE9ULFxuK1x0XHQgICBzaG9ydF9zbG90ID8gUlRXODcyM0JTX1NIT1JUX1NMT1RfVElNRSA6XG4rXHRcdFx0XHRSVFc4NzIzQlNfTE9OR19TTE9UX1RJTUUpO1xuK31cbitcbitzdGF0aWMgdTE2IHJ0dzg3MjNic19ycnNyX2Zyb21faWVfcmF0ZSh1OCByYXRlKVxuK3tcbitcdHN3aXRjaCAocmF0ZSBcdTAwMjYgMHg3Zikge1xuK1x0Y2FzZSAyOiAgIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xTTtcbitcdGNhc2UgNDogICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMk07XG4rXHRjYXNlIDExOiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzVfNU07XG4rXHRjYXNlIDIyOiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzExTTtcbitcdGNhc2UgMTI6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfNk07XG4rXHRjYXNlIDE4OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzlNO1xuK1x0Y2FzZSAyNDogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8xMk07XG4rXHRjYXNlIDM2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzE4TTtcbitcdGNhc2UgNDg6ICByZXR1cm4gUlRXODcyM0JTX1JSU1JfMjRNO1xuK1x0Y2FzZSA3MjogIHJldHVybiBSVFc4NzIzQlNfUlJTUl8zNk07XG4rXHRjYXNlIDk2OiAgcmV0dXJuIFJUVzg3MjNCU19SUlNSXzQ4TTtcbitcdGNhc2UgMTA4OiByZXR1cm4gUlRXODcyM0JTX1JSU1JfNTRNO1xuK1x0ZGVmYXVsdDogIHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfY29sbGVjdF9iYXNpY19yYXRlcyhjb25zdCB1OCAqaWUsIHUxNiAqYmFzaWNfcmF0ZXMsXG4rXHRcdFx0XHRcdCAgYm9vbCAqdmFsaWQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWllKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpZVsxXTsgaSsrKSB7XG4rXHRcdHUxNiByO1xuK1xuK1x0XHRpZiAoIShpZVtpICsgMl0gXHUwMDI2IDB4ODApKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyID0gcnR3ODcyM2JzX3Jyc3JfZnJvbV9pZV9yYXRlKGllW2kgKyAyXSk7XG4rXHRcdGlmICghcilcbitcdFx0XHRjb250aW51ZTtcbitcdFx0KmJhc2ljX3JhdGVzIHw9IHI7XG4rXHRcdCp2YWxpZCA9IHRydWU7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JSU1IsIDB4ZmZmZjEpO1xuK1x0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IDB4ZmZmZjE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdFx0XHRjb25zdCB1OCAqYnNzaWQpXG4re1xuK1x0c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9IFx1MDAyNnZpZi1cdTAwM2Vic3NfY29uZjtcbitcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmxvb2t1cF9ic3MgPSBOVUxMO1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDtcbitcdGJvb2wgdmFsaWQgPSBmYWxzZTtcbitcdHUxNiBiYXNpY19yYXRlcyA9IDA7XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoY29uZi1cdTAwM2Vic3MpIHtcbitcdFx0YnNzID0gY29uZi1cdTAwM2Vic3M7XG4rXHR9IGVsc2UgaWYgKGJzc2lkIFx1MDAyNlx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xuK1x0XHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuK1x0XHRic3MgPSBsb29rdXBfYnNzO1xuK1x0fVxuK1xuK1x0aWYgKGJzcykge1xuK1x0XHRjb25zdCB1OCAqcmF0ZXMsICpleHQ7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0cmF0ZXMgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NVUFBfUkFURVMpO1xuK1x0XHRleHQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTKTtcbitcdFx0cnR3ODcyM2JzX2NvbGxlY3RfYmFzaWNfcmF0ZXMocmF0ZXMsIFx1MDAyNmJhc2ljX3JhdGVzLCBcdTAwMjZ2YWxpZCk7XG4rXHRcdHJ0dzg3MjNic19jb2xsZWN0X2Jhc2ljX3JhdGVzKGV4dCwgXHUwMDI2YmFzaWNfcmF0ZXMsIFx1MDAyNnZhbGlkKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR9XG4rXG4rXHRpZiAodmFsaWQpIHtcbitcdFx0YmFzaWNfcmF0ZXMgfD0gUlRXODcyM0JTX1JSU1JfMkdfRk9SQ0U7XG4rXHRcdGJhc2ljX3JhdGVzIFx1MDAyNj0gUlRXODcyM0JTX1JSU1JfMkdfQUxMT1c7XG4rXHRcdHJ0d193cml0ZTE2KHJ0d2RldiwgUkVHX1JSU1IsIGJhc2ljX3JhdGVzKTtcbitcdFx0cnR3X3dyaXRlOChydHdkZXYsIFJFR19SUlNSICsgMixcbitcdFx0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfUlJTUiArIDIpIFx1MDAyNiAweGYwKTtcbitcdFx0cnR3ZGV2LVx1MDAzZWRtX2luZm8ucnJzcl92YWxfaW5pdCA9IGJhc2ljX3JhdGVzO1xuK1x0fVxuK1xuK1x0aWYgKGxvb2t1cF9ic3MpXG4rXHRcdGNmZzgwMjExX3B1dF9ic3MocnR3ZGV2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LCBsb29rdXBfYnNzKTtcbit9XG4rXG4rLyogUHJvZ3JhbSByZXNwb25zZSBzbG90IHRpbWUgKGFuZCwgd2hlbiBzZXRfcHJlYW1ibGUsIHRoZSBBQ0sgcHJlYW1ibGUpIGZyb21cbisgKiB0aGUgc2VsZWN0ZWQgc2NhbiBCU1MgY2FwYWJpbGl0aWVzOyB0aGUgQVAgY2FwYWJpbGl0aWVzIGFyZSBub3QgeWV0IGluXG4rICogYnNzX2NvbmYgYXQgbWdkX3ByZXBhcmVfdHgoKSB0aW1lLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hcHBseV9ic3NfY2FwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHRcdCAgICBjb25zdCB1OCAqYnNzaWQsIGJvb2wgc2V0X3ByZWFtYmxlKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSBcdTAwMjZ2aWYtXHUwMDNlYnNzX2NvbmY7XG4rXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpsb29rdXBfYnNzID0gTlVMTDtcbitcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7XG4rXHRib29sIHNob3J0X3ByZWFtYmxlLCBzaG9ydF9zbG90O1xuK1x0dTE2IGNhcCA9IDA7XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCB2aWYtXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoY29uZi1cdTAwM2Vic3MpIHtcbitcdFx0YnNzID0gY29uZi1cdTAwM2Vic3M7XG4rXHR9IGVsc2UgaWYgKGJzc2lkIFx1MDAyNlx1MDAyNiBpc192YWxpZF9ldGhlcl9hZGRyKGJzc2lkKSkge1xuK1x0XHRsb29rdXBfYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIE5VTEwsXG4rXHRcdFx0XHRcdCAgICAgIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuK1x0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xuK1x0XHRic3MgPSBsb29rdXBfYnNzO1xuK1x0fVxuK1xuK1x0aWYgKGJzcykge1xuK1x0XHRjYXAgPSBic3MtXHUwMDNlY2FwYWJpbGl0eTtcbitcdH0gZWxzZSBpZiAoY29uZi1cdTAwM2Vhc3NvY19jYXBhYmlsaXR5KSB7XG4rXHRcdGNhcCA9IGNvbmYtXHUwMDNlYXNzb2NfY2FwYWJpbGl0eTtcbitcdH0gZWxzZSB7XG4rXHRcdHNob3J0X3ByZWFtYmxlID0gY29uZi1cdTAwM2V1c2Vfc2hvcnRfcHJlYW1ibGU7XG4rXHRcdHNob3J0X3Nsb3QgPSBjb25mLVx1MDAzZXVzZV9zaG9ydF9zbG90O1xuK1x0XHRnb3RvIHByb2dyYW07XG4rXHR9XG4rXHRzaG9ydF9wcmVhbWJsZSA9ICEhKGNhcCBcdTAwMjYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKTtcbitcdHNob3J0X3Nsb3QgPSAhIShjYXAgXHUwMDI2IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpO1xuK1xuK3Byb2dyYW06XG4rXHRpZiAoc2V0X3ByZWFtYmxlKVxuK1x0XHRydHc4NzIzYnNfc2V0X2Fja19wcmVhbWJsZShydHdkZXYsIHNob3J0X3ByZWFtYmxlKTtcbitcdHJ0dzg3MjNic19zZXRfc2xvdF90aW1lKHJ0d2Rldiwgc2hvcnRfc2xvdCk7XG4rXG4rXHRpZiAobG9va3VwX2JzcylcbitcdFx0Y2ZnODAyMTFfcHV0X2JzcyhydHdkZXYtXHUwMDNlaHctXHUwMDNld2lwaHksIGxvb2t1cF9ic3MpO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdF9tcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuK3tcbitcdHUxNiBiZWFjb25faW50ID0gdmlmLVx1MDAzZWJzc19jb25mLmJlYWNvbl9pbnQ7XG4rXHR1bnNpZ25lZCBpbnQgd2FpdF9tcztcbitcbitcdGlmICghYmVhY29uX2ludClcbitcdFx0cmV0dXJuIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9GQUxMQkFDS19NUztcbitcbitcdHdhaXRfbXMgPSBESVZfUk9VTkRfVVAoYmVhY29uX2ludCAqIDEwMjQsIDEwMDApICsgMjA7XG4rXHRyZXR1cm4gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHdhaXRfbXMsIFJUVzg3MjNCU19BVVRIX1NZTkNfV0FJVF9NSU5fTVMsXG4rXHRcdCAgICAgICBSVFc4NzIzQlNfQVVUSF9TWU5DX1dBSVRfTUFYX01TKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBjb25zdCB1OCAqYnNzaWQpXG4re1xuK1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0ZXRoZXJfYWRkcl9jb3B5KHN5bmMtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbitcdHN5bmMtXHUwMDNlc2VlbiA9IGZhbHNlO1xuK1x0c3luYy1cdTAwM2VzZWVuX2NvdW50ID0gMDtcbitcdHN5bmMtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19hdXRoX3N5bmNfc3RvcChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHN0cnVjdCBydHdfYXV0aF9zeW5jICpzeW5jID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWF1dGhfc3luYztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdHN5bmMtXHUwMDNlYWN0aXZlID0gZmFsc2U7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN5bmMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgYm9vbCBydHc4NzIzYnNfYXV0aF9zeW5jX3NlZW4oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X2F1dGhfc3luYyAqc3luYyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VhdXRoX3N5bmM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0Ym9vbCBzZWVuO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3luYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRzZWVuID0gc3luYy1cdTAwM2VzZWVuO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzeW5jLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBzZWVuO1xuK31cbitcbitzdGF0aWMgYm9vbCBydHc4NzIzYnNfYXV0aF9zeW5jX3dhaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IHdhaXRfbXMpXG4re1xuK1x0c3RydWN0IHJ0d19hdXRoX3N5bmMgKnN5bmMgPSBcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jO1xuK1xuK1x0cmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChzeW5jLVx1MDAzZXdhaXQsIHJ0dzg3MjNic19hdXRoX3N5bmNfc2VlbihydHdkZXYpLFxuK1x0XHRcdFx0ICBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpKSBcdTAwM2UgMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbylcbit7XG4rXHRyZXR1cm4gcnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBpbmZvIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGluZm8tXHUwMDNlc3VidHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfQVVUSDtcbit9XG4rXG4rLyogUmVwbGljYXRlIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgcmlnaHQgYmVmb3JlXG4rICogYXV0aC4gUmV0dXJucyB0cnVlIGZvciBhIGZyZXNoIGpvaW4gKEJTU0lEIGNoYW5nZWQpLlxuKyAqL1xuK3N0YXRpYyBib29sIHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9qb2luKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbitcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYnNzaWQpXG4re1xuK1x0c3RydWN0IHJ0d192aWYgKnJ0d3ZpZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi1cdTAwM2VkcnZfcHJpdjtcbitcdGJvb2wgZnJlc2hfam9pbjtcbitcdHUxNiByZXRyeV9saW1pdDtcbitcbitcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZyZXNoX2pvaW4gPSAhZXRoZXJfYWRkcl9lcXVhbChydHd2aWYtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbitcbitcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXHUwMDNlYnNzaWQsIGJzc2lkKTtcbitcdHJ0d3ZpZi1cdTAwM2VhaWQgPSAwO1xuK1x0cnR3dmlmLVx1MDAzZW5ldF90eXBlID0gUlRXX05FVF9NR0RfTElOS0VEO1xuK1x0cnR3X3ZpZl9wb3J0X2NvbmZpZyhydHdkZXYsIHJ0d3ZpZixcbitcdFx0XHQgICAgUE9SVF9TRVRfQlNTSUQgfCBQT1JUX1NFVF9BSUQgfCBQT1JUX1NFVF9ORVRfVFlQRSk7XG4rXG4rXHQvKiBEbyBub3QgbmFycm93IFJSU1Igb3Igc3dpdGNoIHRvIHNob3J0LXByZWFtYmxlIHJlc3BvbnNlcyBiZWZvcmUgdGhlXG4rXHQgKiBleGNoYW5nZTogdGhlIHdob2xlIGF1dGgvYXNzb2MgcnVucyBvbiB0aGUgaW5pdCByZXNwb25zZSBzZXRcbitcdCAqICgweGZmZmYxLCBsb25nIHByZWFtYmxlKS4gT25seSBzbG90IHRpbWUgaXMgcHJvZ3JhbW1lZCBlYXJseS5cbitcdCAqL1xuK1x0cnR3ODcyM2JzX2FwcGx5X2Jzc19jYXAocnR3ZGV2LCB2aWYsIGJzc2lkLCBmYWxzZSk7XG4rXG4rXHRydHdfZndfYmVhY29uX2ZpbHRlcl9jb25maWcocnR3ZGV2LCBmYWxzZSwgdmlmKTtcbitcbitcdC8qIE1hdGNoIHRoZSB2ZW5kb3Igc3RhcnRfY2xudF9qb2luKCkgVFggc3RhdGUgKHNldF9tc3IgZGlyZWN0bHksIGtlZXBcbitcdCAqIEJDTl9DVFJMIC8gQkNOUV9ETCBzZXQsIHJlYXNzZXJ0IFRCVFQvUkVTUF9TSUZTIGV2ZXJ5IGpvaW4pLlxuK1x0ICovXG4rXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuK1x0XHQgICBCSVRfRElTX1RTRl9VRFQgfCBCSVRfRU5fQkNOX0ZVTkNUSU9OKTtcbitcdHJ0d193cml0ZTMyX3NldChydHdkZXYsIFJFR19GV0hXX1RYUV9DVFJMLCBCSVRfRU5fQkNOUV9ETCk7XG4rXHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX1RCVFRfUFJPSElCSVQgKyAxLCAweDY0IFx1MDAyNiAweGZmKTtcbitcdHJ0d193cml0ZTgocnR3ZGV2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDIsXG4rXHRcdCAgIChydHdfcmVhZDgocnR3ZGV2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDIpIFx1MDAyNiAweGYwKSB8ICgweDY0IFx1MDAzZVx1MDAzZSA4KSk7XG4rXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SRVNQX1NJRlNfQ0NLLCAweDA4MDgpO1xuK1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUkVTUF9TSUZTX09GRE0sIDB4MGEwYSk7XG4rXG4rXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SWEZMVE1BUDAsIDB4ZmZmZik7XG4rXHRydHdfd3JpdGUxNihydHdkZXYsIFJFR19SWEZMVE1BUDIsIDB4ZmZmZik7XG4rXHRydHc4NzIzYnNfYXV0aF9yeF9maWx0ZXIocnR3ZGV2LCB0cnVlKTtcbitcbitcdHJldHJ5X2xpbWl0ID0gKFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUIFx1MDAzY1x1MDAzYyA4KSB8XG4rXHRcdCAgICAgIFJUVzg3MjNCU19KT0lOX1JFVFJZX0xJTUlUO1xuK1x0cnR3X3dyaXRlMTYocnR3ZGV2LCBSRUdfUkVUUllfTElNSVQsIHJldHJ5X2xpbWl0KTtcbitcbitcdHJ0dzg3MjNic19jb25maWdfc2VjX2NmZyhydHdkZXYpO1xuK1xuK1x0cmV0dXJuIGZyZXNoX2pvaW47XG4rfVxuK1xuKy8qIFRoZSB2ZW5kb3Igc2VuZHMgYSBkZWF1dGggdG8gdGhlIHRhcmdldCBiZWZvcmUgYXV0aCB0byBjbGVhciBzdGFsZSBBUC1zaWRlXG4rICogc3RhdGU7IHN5bnRoZXNpemUgYW5kIFRYIG9uZSwgdGhlbiBsZXQgdGhlIEFQIHNldHRsZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHc4NzIzYnNfdHhfcHJlX2F1dGhfZGVhdXRoKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuK1x0XHRcdFx0XHQgY29uc3QgdTggKmJzc2lkKVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sID0ge307XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dW5zaWduZWQgaW50IGZyYW1lX2xlbiwgaGVhZHJvb207XG4rXG4rXHRmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgc2l6ZW9mKG1nbXQtXHUwMDNldS5kZWF1dGgpO1xuK1x0aGVhZHJvb20gPSBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9wa3RfZGVzY19zeiArIDg7XG4rXG4rXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGhlYWRyb29tICsgZnJhbWVfbGVuKTtcbitcdGlmICghc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2JfcmVzZXJ2ZShza2IsIGhlYWRyb29tKTtcbitcdG1nbXQgPSBza2JfcHV0X3plcm8oc2tiLCBmcmFtZV9sZW4pO1xuK1x0bWdtdC1cdTAwM2VmcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfFxuK1x0XHRcdFx0XHQgIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpO1xuK1x0bWVtY3B5KG1nbXQtXHUwMDNlZGEsIGJzc2lkLCBFVEhfQUxFTik7XG4rXHRtZW1jcHkobWdtdC1cdTAwM2VzYSwgdmlmLVx1MDAzZWFkZHIsIEVUSF9BTEVOKTtcbitcdG1lbWNweShtZ210LVx1MDAzZWJzc2lkLCBic3NpZCwgRVRIX0FMRU4pO1xuK1x0bWdtdC1cdTAwM2V1LmRlYXV0aC5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTtcbitcbitcdGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4rXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4rXHRpbmZvLVx1MDAzZWNvbnRyb2wudmlmID0gdmlmO1xuK1xuK1x0cnR3X3R4KHJ0d2RldiwgXHUwMDI2Y29udHJvbCwgc2tiKTtcbitcdG1zbGVlcCgxMDApO1xuK31cbitcbisvKiBPcmNoZXN0cmF0ZSB0aGUgcHJlLWF1dGggam9pbjogcHJvZ3JhbSB0aGUgdmVuZG9yIGpvaW4gc3RhdGUsIHNlbmQgdGhlXG4rICogcHJlLWF1dGggZGVhdXRoLCB3YWl0IGZvciBhIGJlYWNvbiBmcm9tIHRoZSB0YXJnZXQsIHRoZW4gcmVwbGF5IHRoZVxuKyAqIHByZS1hdXRoIGNvZXggSDJDcyAtIG9uY2UgcGVyIGZyZXNoIEJTU0lELlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9hdXRoX2pvaW4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3ByZXBfdHhfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcnR3X3ZpZiAqcnR3dmlmO1xuK1x0Y29uc3QgdTggKmJzc2lkID0gTlVMTDtcbitcdGJvb2wgZnJlc2hfam9pbjtcbitcbitcdGlmICghcnR3ODcyM2JzX21nZF9wcmVwYXJlX2lzX2F1dGgocnR3ZGV2LCBpbmZvKSB8fCAhdmlmIHx8XG4rXHQgICAgdGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbitcdHJ0d3ZpZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi1cdTAwM2VkcnZfcHJpdjtcbitcbitcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cdTAwM2VjZmcuYXBfYWRkcikpXG4rXHRcdGJzc2lkID0gdmlmLVx1MDAzZWNmZy5hcF9hZGRyO1xuK1x0ZWxzZSBpZiAodmlmLVx1MDAzZWJzc19jb25mLmJzc2lkIFx1MDAyNlx1MDAyNiAhaXNfemVyb19ldGhlcl9hZGRyKHZpZi1cdTAwM2Vic3NfY29uZi5ic3NpZCkpXG4rXHRcdGJzc2lkID0gdmlmLVx1MDAzZWJzc19jb25mLmJzc2lkO1xuK1xuK1x0aWYgKCFic3NpZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZnJlc2hfam9pbiA9IHJ0dzg3MjNic19tZ2RfcHJlcGFyZV9qb2luKHJ0d2RldiwgdmlmLCBic3NpZCk7XG4rXG4rXHRpZiAoZnJlc2hfam9pbiB8fCAhcnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgd2FpdF9tcyA9IHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdF9tcyh2aWYpO1xuK1xuK1x0XHRydHc4NzIzYnNfYXV0aF9zeW5jX3N0YXJ0KHJ0d2RldiwgYnNzaWQpO1xuK1x0XHRydHc4NzIzYnNfdHhfcHJlX2F1dGhfZGVhdXRoKHJ0d2RldiwgdmlmLCBic3NpZCk7XG4rXHRcdHJ0dzg3MjNic19hdXRoX3N5bmNfd2FpdChydHdkZXYsIHdhaXRfbXMpO1xuK1x0XHRydHc4NzIzYnNfYXV0aF9zeW5jX3N0b3AocnR3ZGV2KTtcbitcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIXJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9oMmNfc2VudCkge1xuK1x0XHRydHdfY29leF84NzIzYnNfcHJlX2F1dGhfaDJjKHJ0d2Rldik7XG4rXHRcdHJ0d3ZpZi1cdTAwM2VwcmVfYXV0aF9oMmNfc2VudCA9IHRydWU7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0d19vcHNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTM4Nyw2ICs4NDQsMTMgQEAgc3RhdGljIHZvaWQgcnR3X29wc19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0FTU09DKSB7XG4gXHRcdHJ0d192aWZfYXNzb2NfY2hhbmdlZChydHd2aWYsIGNvbmYpO1xuIFx0XHRpZiAodmlmLVx1MDAzZWNmZy5hc3NvYykge1xuK1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbitcdFx0XHRcdHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihydHdkZXYsIGZhbHNlKTtcbitcdFx0XHRcdHJ0dzg3MjNic19hcHBseV9iYXNpY19yYXRlcyhydHdkZXYsIHZpZiwgTlVMTCk7XG4rXHRcdFx0XHRydHc4NzIzYnNfZW5hYmxlX3RzZl91cGRhdGUocnR3ZGV2KTtcbitcdFx0XHR9XG4rXG4gXHRcdFx0cnR3X2NvZXhfY29ubmVjdF9ub3RpZnkocnR3ZGV2LCBDT0VYX0FTU09DSUFURV9GSU5JU0gpO1xuIFxuIFx0XHRcdHJ0d19md19kb3dubG9hZF9yc3ZkX3BhZ2UocnR3ZGV2KTtcbkBAIC00MDgsNiArODcyLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0XHRpZiAodGVzdF9iaXQoUlRXX0ZMQUdfU0NBTk5JTkcsIHJ0d2Rldi1cdTAwM2VmbGFncykpXG4gXHRcdFx0XHRydHdfaHdfc2Nhbl9hYm9ydChydHdkZXYpO1xuIFxuK1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbitcdFx0XHRcdHJ0dzg3MjNic19hdXRoX3J4X2ZpbHRlcihydHdkZXYsIGZhbHNlKTtcbitcdFx0XHRcdHJ0dzg3MjNic19yZXNldF9yZXNwb25zZV9yYXRlcyhydHdkZXYpO1xuK1x0XHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XG4rXHRcdFx0XHRydHd2aWYtXHUwMDNlcHJlX2F1dGhfam9pbl9kb25lID0gZmFsc2U7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRTtcbkBAIC00MTUsOCArODg2LDI2IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9CU1NJRCkge1xuK1x0XHRib29sIGJzc2lkX2NsZWFyZWQgPSBpc196ZXJvX2V0aGVyX2FkZHIoY29uZi1cdTAwM2Vic3NpZCk7XG4rXHRcdGJvb2wgYnNzaWRfY2hhbmdlZCA9ICFldGhlcl9hZGRyX2VxdWFsKHJ0d3ZpZi1cdTAwM2Vic3NpZCxcbitcdFx0XHRcdFx0XHQgICAgICAgY29uZi1cdTAwM2Vic3NpZCk7XG4rXG4rXHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNiBic3NpZF9jaGFuZ2VkKSB7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2gyY19zZW50ID0gZmFsc2U7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZXByZV9hdXRoX2pvaW5fZG9uZSA9IGZhbHNlO1xuK1x0XHR9XG4gXHRcdGV0aGVyX2FkZHJfY29weShydHd2aWYtXHUwMDNlYnNzaWQsIGNvbmYtXHUwMDNlYnNzaWQpO1xuIFx0XHRjb25maWcgfD0gUE9SVF9TRVRfQlNTSUQ7XG4rXHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNiBic3NpZF9jbGVhcmVkKSB7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZWFpZCA9IDA7XG4rXHRcdFx0cnR3dmlmLVx1MDAzZW5ldF90eXBlID0gUlRXX05FVF9OT19MSU5LO1xuK1x0XHRcdGNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRSB8IFBPUlRfU0VUX0FJRDtcbitcdFx0XHRydHdfd3JpdGU4KHJ0d2RldiwgUkVHX0JDTl9DVFJMLFxuK1x0XHRcdFx0ICAgQklUX0RJU19UU0ZfVURUIHwgQklUX0VOX0JDTl9GVU5DVElPTiB8XG4rXHRcdFx0XHQgICBCSVRfRElTX0FUSU0pO1xuK1x0XHR9XG4gXHRcdGlmICghcnR3X2NvcmVfY2hlY2tfc3RhX2FjdGl2ZShydHdkZXYpKVxuIFx0XHRcdHJ0d19jbGVhcl9vcF9jaGFuKHJ0d2Rldik7XG4gXHRcdGVsc2VcbkBAIC00NDgsOCArOTM3LDE3IEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBCU1NfQ0hBTkdFRF9NVV9HUk9VUFMpXG4gXHRcdHJ0d19jaGlwX3NldF9naWRfdGFibGUocnR3ZGV2LCB2aWYsIGNvbmYpO1xuIFxuLVx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9TTE9UKVxuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTilcbitcdFx0cnR3ODcyM2JzX3NldF9hY2tfcHJlYW1ibGUocnR3ZGV2LCBjb25mLVx1MDAzZXVzZV9zaG9ydF9wcmVhbWJsZSk7XG4rXG4rXHRpZiAoY2hhbmdlZCBcdTAwMjYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHtcbitcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4rXHRcdFx0cnR3ODcyM2JzX3NldF9zbG90X3RpbWUocnR3ZGV2LCBjb25mLVx1MDAzZXVzZV9zaG9ydF9zbG90KTtcbiBcdFx0cnR3X2NvbmZfdHgocnR3ZGV2LCBydHd2aWYpO1xuK1x0fVxuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IEJTU19DSEFOR0VEX1BTKVxuIFx0XHRydHdfcmVjYWxjX2xwcyhydHdkZXYsIE5VTEwpO1xuQEAgLTYwOSwxMSArMTEwNywxOSBAQCBzdGF0aWMgaW50IHJ0d19vcHNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsXG4gXHRcdGtleS1cdTAwM2Vod19rZXlfaWR4ID0gaHdfa2V5X2lkeDtcbiBcdFx0cnR3X3NlY193cml0ZV9jYW0ocnR3ZGV2LCBzZWMsIHN0YSwga2V5LFxuIFx0XHRcdFx0ICBod19rZXlfdHlwZSwgaHdfa2V5X2lkeCk7XG4rXHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHZpZiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGtleS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSlcbitcdFx0XHRydHc4NzIzYnNfY29uZmlnX2RlZmF1bHRfa2V5X3NlYXJjaChydHdkZXYsIHRydWUpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgRElTQUJMRV9LRVk6XG4gXHRcdHJ0d19oY2lfZmx1c2hfYWxsX3F1ZXVlcyhydHdkZXYsIGZhbHNlKTtcbiBcdFx0cnR3X21hY19mbHVzaF9hbGxfcXVldWVzKHJ0d2RldiwgZmFsc2UpO1xuIFx0XHRydHdfc2VjX2NsZWFyX2NhbShydHdkZXYsIHNlYywga2V5LVx1MDAzZWh3X2tleV9pZHgpO1xuK1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiB2aWYgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShrZXktXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpXG4rXHRcdFx0cnR3ODcyM2JzX2NvbmZpZ19kZWZhdWx0X2tleV9zZWFyY2gocnR3ZGV2LCBmYWxzZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuQEAgLTcwMyw4ICsxMjA5LDIzIEBAIHN0YXRpYyB2b2lkIHJ0d19vcHNfbWdkX3ByZXBhcmVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4gXHRydHdfbGVhdmVfbHBzX2RlZXAocnR3ZGV2KTtcbi1cdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuLVx0cnR3X2NoaXBfcHJlcGFyZV90eChydHdkZXYpO1xuK1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHQvKiBXYWtlIGZyb20gc29mdCBJUFMgYW5kIHJ1biB0aGUgdmVuZG9yIGpvaW4gc2VxdWVuY2UuIFRoZSBSRktcbitcdFx0ICogaXMgaGFuZGxlZCBieSB0aGUgb25jZS1vbmx5IHBvd2VyLW9uIElRSyBwbHVzIHRoZSBwcy5jXG4rXHRcdCAqIHBvc3QtSVBTIFJGLWJ1cyByZWNvdmVyeSwgbm90IGEgZnJlc2ggY2FsaWJyYXRpb24gaGVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChydHdfbGVhdmVfaXBzKHJ0d2RldikpIHtcbitcdFx0XHRydHdfZXJyKHJ0d2RldiwgXCJmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0ZSBmb3IgbWdkIHR4XFxuXCIpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuK1x0XHRydHc4NzIzYnNfbWdkX3ByZXBhcmVfYXV0aF9qb2luKHJ0d2RldiwgdmlmLCBpbmZvKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJ0d19jb2V4X2Nvbm5lY3Rfbm90aWZ5KHJ0d2RldiwgQ09FWF9BU1NPQ0lBVEVfU1RBUlQpO1xuK1x0XHRydHdfY2hpcF9wcmVwYXJlX3R4KHJ0d2Rldik7XG4rXHR9XG4rb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ0d2Rldi1cdTAwM2VtdXRleCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmNcbmluZGV4IGNkOTI1NDM3MGZjYzcyLi4xNjIyOGNhZTI1MmViZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uY1xuQEAgLTIxNzQsMTEgKzIxNzQsMTMgQEAgaW50IHJ0d19jb3JlX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ0d2Rldi1cdTAwM2V0eHFfbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNldHhfcmVwb3J0LnFfbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlYXV0aF9zeW5jLmxvY2spO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZydHdkZXYtXHUwMDNlaGFsLnR4X3Bvd2VyX211dGV4KTtcbiBcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cnR3ZGV2LVx1MDAzZWNvZXgud2FpdCk7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnJ0d2Rldi1cdTAwM2VhdXRoX3N5bmMud2FpdCk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cnR3ZGV2LVx1MDAzZWxwc19sZWF2ZV9jaGVjayk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cnR3ZGV2LVx1MDAzZWZ3X3NjYW5fZGVuc2l0eSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggOWMwYjc0NjU0MGIwZWUuLjk5Yjk5YWEzZDYwMGY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgKzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XG4gXHRSVFdfQ0hJUF9UWVBFXzg3MjNELFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQyxcbiBcdFJUV19DSElQX1RZUEVfODcwM0IsXG4rXHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQSxcbiBcdFJUV19DSElQX1RZUEVfODgxMkEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTRBLFxuQEAgLTgyOCw2ICs4MjksOCBAQCBzdHJ1Y3QgcnR3X3ZpZiB7XG4gXHR1OCBic3NpZFtFVEhfQUxFTl07XG4gXHR1OCBwb3J0O1xuIFx0dTggYmNuX2N0cmw7XG4rXHRib29sIHByZV9hdXRoX2gyY19zZW50O1xuK1x0Ym9vbCBwcmVfYXV0aF9qb2luX2RvbmU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJzdmRfcGFnZV9saXN0O1xuIFx0c3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgdHhfcGFyYW1zW0lFRUU4MDIxMV9OVU1fQUNTXTtcbiBcdGNvbnN0IHN0cnVjdCBydHdfdmlmX3BvcnQgKmNvbmY7XG5AQCAtMjA1Niw2ICsyMDU5LDIwIEBAIHN0cnVjdCBydHdfaHdfc2Nhbl9pbmZvIHtcbiBcdHU4IG9wX2J3O1xuIH07XG4gXG4rLypcbisgKiBTeW5jaHJvbmlzZXMgdGhlIHByZS1hdXRoIHdhaXQgb24gYSBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZnJvbSB0aGVcbisgKiB0YXJnZXQgQlNTSUQgYmVmb3JlIHRoZSBqb2luIHNlcXVlbmNlIGNvbnRpbnVlcy5cbisgKi9cbitzdHJ1Y3QgcnR3X2F1dGhfc3luYyB7XG4rXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xuK1x0LyogUHJvdGVjdHMgdGhlIGZpZWxkcyBiZWxvdy4gKi9cbitcdHNwaW5sb2NrX3QgbG9jaztcbitcdHU4IGJzc2lkW0VUSF9BTEVOXTtcbitcdGJvb2wgYWN0aXZlO1xuK1x0Ym9vbCBzZWVuO1xuK1x0dTMyIHNlZW5fY291bnQ7XG4rfTtcbitcbiBzdHJ1Y3QgcnR3X2RldiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbkBAIC0yMTMyLDYgKzIxNDksOCBAQCBzdHJ1Y3QgcnR3X2RldiB7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBmd19zY2FuX2RlbnNpdHk7XG4gXHRib29sIGFwX2FjdGl2ZTtcbiBcbitcdHN0cnVjdCBydHdfYXV0aF9zeW5jIGF1dGhfc3luYztcbitcbiBcdGJvb2wgbGVkX3JlZ2lzdGVyZWQ7XG4gXHRjaGFyIGxlZF9uYW1lWzMyXTtcbiBcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7XG5AQCAtMjE5Myw2ICsyMjEyLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXR4X3N0YmM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYWNfaWQ7XG5AQCAtMjI4Myw0ICsyMzA4LDggQEAgYm9vbCBydHdfY29yZV9jaGVja19zdGFfYWN0aXZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpO1xuIHZvaWQgcnR3X2NvcmVfZW5hYmxlX2JlYWNvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVuYWJsZSk7XG4gdm9pZCBydHdfc2V0X2FtcGR1X2ZhY3RvcihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIFx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpO1xuK3ZvaWQgcnR3ODcyM2JzX2F1dGhfc3luY19yeChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1MzIgbGVuLFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcnR3X3J4X3BrdF9zdGF0ICpwa3Rfc3RhdCxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbmluZGV4IDA4ZTk0OTQ5NzdlMDZhLi5iNmQ0ZThlZDk4Yzc1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcmVnLmhcbkBAIC00NzksNiArNDc5LDcgQEBcbiAjZGVmaW5lIEJJVF9ESVNfVFNGX1VEVFx0XHRCSVQoNClcbiAjZGVmaW5lIEJJVF9FTl9CQ05fRlVOQ1RJT05cdEJJVCgzKVxuICNkZWZpbmUgQklUX0VOX1RYQkNOX1JQVFx0QklUKDIpXG4rI2RlZmluZSBCSVRfRElTX0FUSU1cdFx0QklUKDApXG4gI2RlZmluZSBSRUdfQkNOX0NUUkxfQ0xJTlQwXHQweDA1NTFcbiAjZGVmaW5lIFJFR19EUlZFUkxZSU5UXHRcdDB4MDU1OFxuICNkZWZpbmUgUkVHX0JDTkRNQVRJTVx0XHQweDA1NTlcbkBAIC01MTgsNiArNTE5LDcgQEBcbiAjZGVmaW5lIEJJVF9VQ19NRF9FTlx0XHRCSVQoMTYpXG4gI2RlZmluZSBCSVRfUlhTS19QRVJQS1RcdFx0QklUKDE1KVxuICNkZWZpbmUgQklUX0hUQ19MT0NfQ1RSTFx0QklUKDE0KVxuKyNkZWZpbmUgQklUX0FNRlx0XHRcdEJJVCgxMylcbiAjZGVmaW5lIEJJVF9SUEZNX0NBTV9FTkFCTEVcdEJJVCgxMilcbiAjZGVmaW5lIEJJVF9UQV9CQ05cdFx0QklUKDExKVxuICNkZWZpbmUgQklUX1JDUl9BREZcdFx0QklUKDExKVxuQEAgLTYyOCw2ICs2MzAsNyBAQFxuICNkZWZpbmUgUkVHX1BTRFx0XHRcdDB4MDkxMFxuICNkZWZpbmUgQklUX1BTRF9JTklcdFx0R0VOTUFTSygyMywgMjIpXG4gI2RlZmluZSBSRUdfU0lOR0xFX1RPTkVfQ09OVF9UWFx0MHgwOTE0XG4rI2RlZmluZSBSRUdfQkJfU0VMX0JUR184NzIzQlx0MHgwOTQ4XG4gI2RlZmluZSBSRUdfQUdDX1RBQkxFXHRcdDB4MDk1OFxuICNkZWZpbmUgUkVHX1JGRV9DVFJMX0VcdFx0MHgwOTc0XG4gI2RlZmluZSBSRUdfMk5EX0NDQV9DVFJMXHQweDA5NzZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmU5Li41MzAzOTc1ZDAwYTJhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xuIFxuLVx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTIgYW5kXG4tXHQgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC5cbitcdC8qIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTJcbitcdCAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LlxuIFx0ICovXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiBcdTAwMjZcdTAwMjYgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHxcbitcdCAgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiBcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXCJ6ZXJvIGxlbmd0aCBwYWNrZXRcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMDguLmIyOTRiY2M0ZDgyODA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTYgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlXG4rICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZVxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbisgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS5cbisgKi9cbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVJcdFx0XHQ4XG4rI2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoMSlcbiBcbiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcilcbiB7XG5AQCAtNTQ4LDEyICs1NTgsOTEgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbitcdHB1YnFfbnVtID0gcnR3ZGV2LVx1MDAzZWZpZm8uYWNxX3BnX251bSAtIHBnX3RibC1cdTAwM2VocV9udW0gLSBwZ190YmwtXHUwMDNlbHFfbnVtIC1cbitcdFx0ICAgcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC0gcGdfdGJsLVx1MDAzZWdhcHFfbnVtO1xuK1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXHRpZiAoZnJlZV90eHBnKSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIGZyZWVfdHhwZyBcdTAwMjYgMHhmZik7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmYpO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIChmcmVlX3R4cGcgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZik7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgMjQpIFx1MDAyNiAweGZmKTtcbitcdH0gZWxzZSB7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cdTAwM2VocV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcbitcdH1cbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSxcbitcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXG4rXHRpZiAoIWZyZWVfdHhwZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgZnJlZV90eHBnIFx1MDAyNiAweGZmKTtcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgKGZyZWVfdHhwZyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmYpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmYpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCAoZnJlZV90eHBnIFx1MDAzZVx1MDAzZSAyNCkgXHUwMDI2IDB4ZmYpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0c3dpdGNoIChxdWV1ZSkge1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gpO1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4rXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsKTtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93KTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRcdGludCBkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1xuK1x0XHRpZiAoZGVkaWNhdGVkIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBkZWRpY2F0ZWQ7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBkZWRpY2F0ZWQgKyBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fc3luY19mcmVlX3R4cGcocnR3ZGV2KTtcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0cGFnZXNfZnJlZSA9IGRlZGljYXRlZCArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1x0fSBlbHNlIGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuIFx0XHR1MzIgZnJlZV90eHBnO1xuIFxuIFx0XHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuQEAgLTYzMiw0NCArNzIxLDEzMSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGk7XG4rXHR1OCBmcmVlO1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1x0aW50IGZyZWU7XG4rXG4rXHRzd2l0Y2ggKHF1ZXVlKSB7XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcbitcdFx0ZGVkaWNhdGVkID0gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuK1x0XHRkZWRpY2F0ZWQgPSBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGRlZGljYXRlZCA9IFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuK1x0aWYgKHBhZ2VzIFx1MDAzYz0gZnJlZSkge1xuK1x0XHRhdG9taWNfc3ViKHBhZ2VzLCBkZWRpY2F0ZWQpO1xuK1x0fSBlbHNlIHtcbitcdFx0YXRvbWljX3NldChkZWRpY2F0ZWQsIDApO1xuK1x0XHRhdG9taWNfc3ViKHBhZ2VzIC0gZnJlZSwgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1Yik7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbiBcdGJvb2wgYnVzX2NsYWltO1xuIFx0c2l6ZV90IHR4c2l6ZTtcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbitcdH1cbitcbitcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuK1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuK1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4rXHR9XG4rXG4rXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuK1x0aWYgKCF0eGFkZHIpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdHJldCA9IHJ0d19zZGlvX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF90cmltO1xuIFxuIFx0aWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi1cdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXG4gXHRcdHJ0d193YXJuKHJ0d2RldiwgXCJHb3QgdW5hbGlnbmVkIFNLQiBpbiAlcygpIGZvciBxdWV1ZSAldVxcblwiLFxuIFx0XHRcdCBfX2Z1bmNfXywgcXVldWUpO1xuIFxuIFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcbi1cbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4tXG4tXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLCB0eHNpemUpO1xuLVxuK1x0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSxcbitcdFx0XHQgICAgICAgd3JpdGVfc2l6ZSk7XG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4gXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnRsODcyM2JzKSB7XG4rXHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4rXHR9XG4gXHRpZiAocmV0KVxuIFx0XHRydHdfd2FybihydHdkZXYsXG4gXHRcdFx0IFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcIixcbi1cdFx0XHQgdHhzaXplLCB0eGFkZHIpO1xuK1x0XHRcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xuIFxuK291dF90cmltOlxuK1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKVxuK1x0XHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3Nyw3ICs4NTMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcbitcdGVsc2VcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XG4rXHRcdFx0XHQgICAgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNjg1LDYgKzg2NSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbitcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcbkBAIC03MTIsNiArODkzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XG4gXG4gXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgMyBcdTAwM2NcdTAwM2MgMik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSArOTMyLDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MzIgZnJlZV90eHBnO1xuK1x0dTE2IHB1YnFfbnVtO1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybjtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcGdfdGJsLVx1MDAzZWhxX251bSArIHBnX3RibC1cdTAwM2VscV9udW0gK1xuK1x0XHRcdFx0ICAgIHBnX3RibC1cdTAwM2VucV9udW0gKyBwZ190YmwtXHUwMDNlZXhxX251bSArXG4rXHRcdFx0XHQgICAgcGdfdGJsLVx1MDAzZWdhcHFfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHBnX3RibC1cdTAwM2VocV9udW0gLSBwZ190YmwtXHUwMDNlbHFfbnVtIC1cbitcdFx0ICAgcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC0gcGdfdGJsLVx1MDAzZWdhcHFfbnVtO1xuK1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXG4rXHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuK1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTixcbitcdFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXHUwMDNlaHFfbnVtLCBwZ190YmwtXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuK1x0dTMyIGNsZWFyO1xuK1xuK1x0cnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcdHJ0d19zZGlvX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4gXHRydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0Y2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgXHUwMDI2XG4rXHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTAzOSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuK1x0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXG5AQCAtODMxLDYgKzEwNTUsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xuIH1cbiBcbkBAIC05MzcsNiArMTE2MywxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRza2JfcXVldWVfdGFpbChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcbiBcbitcdC8qIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIEZJRk8gZmlsbHMgcGFzdFxuK1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4rXHQgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFhcbitcdCAqIGRyYWluIHBhdGggb25jZSB0aGUgRklGTyBkcmFpbnMgYmVsb3cgdGhlIGxvdyB3YXRlcm1hcmsuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2IHF1ZXVlIFx1MDAzYyBSVFdfVFhfUVVFVUVfQkNOIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4rXHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlO1xuK1x0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05NjUsNiArMTIwMywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19yeF9za2Ioc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJ0d191cGRhdGVfcnhfZnJlcV9mb3JfaW52YWxpZChydHdkZXYsIHNrYiwgcnhfc3RhdHVzLCBwa3Rfc3RhdCk7XG4gXHRydHdfcnhfc3RhdHMocnR3ZGV2LCBwa3Rfc3RhdC1cdTAwM2V2aWYsIHNrYik7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpXG4rXHRcdHJ0dzg3MjNic19hdXRoX3N5bmNfcngocnR3ZGV2LFxuK1x0XHRcdFx0ICAgICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhLFxuK1x0XHRcdFx0ICAgICAgIHNrYi1cdTAwM2VsZW4sIHBrdF9zdGF0LCByeF9zdGF0dXMpO1xuK1xuIFx0aWVlZTgwMjExX3J4X2lycXNhZmUocnR3ZGV2LVx1MDAzZWh3LCBza2IpO1xuIH1cbiBcbkBAIC0xMDk1LDYgKzEzMzgsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXG4gXHRcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xuIFx0fVxuIFxuK1x0LyogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4rXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBydHdzZGlvLVx1MDAzZWlycV9tYXNrIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDMyICsxNDgxLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0ICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLFxuK1x0XHRcdFx0ICAgICBib29sICpwcm9jZXNzZWQpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUxNiBxX21hcDtcbiBcdGludCByZXQ7XG4gXG4rXHQqcHJvY2Vzc2VkID0gZmFsc2U7XG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcbitcdCpwcm9jZXNzZWQgPSB0cnVlO1xuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz0gUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4rXHRcdHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcbitcdFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVx1MDAzZWh3LCBxX21hcCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xuK1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuK1x0XHRcdCAgICAgd29yayk7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuK1x0Ym9vbCBwcm9jZXNzZWQ7XG4gXHRpbnQgbGltaXQsIHF1ZXVlO1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbkBAIC0xMjY3LDcgKzE1MzMsMjQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSBcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcbiBcdFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XG4tXHRcdFx0cnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRpbnQgcmV0O1xuK1xuK1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgXHUwMDI2cHJvY2Vzc2VkKTtcbitcdFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiByZXQgPT0gLUVCVVNZKSB7XG4rXHRcdFx0XHRcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuK1x0XHRcdFx0XHRcdFx0IFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLFxuK1x0XHRcdFx0XHRcdFx0IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcbitcdFx0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UIFx1MDAyNlx1MDAyNiBwcm9jZXNzZWQpIHtcbitcdFx0XHRcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZ3b3JrX2RhdGEtXHUwMDNld29yaywgMCk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTI5NCwxNCArMTU3NywxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xuIFx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbaV0pO1xuK1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbitcdH1cbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcdGlmICghcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpXG4gXHRcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XG4gXG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2VydHdkZXYgPSBydHdkZXY7XG4tXHRJTklUX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTEzMTUsNiArMTYwMCw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVx1MDAzZXR4d3EpO1xuIFx0a2ZyZWUocnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbmluZGV4IDQ1N2U4YjAyMzgwZTViLi5mMWY1OWY4MzAxYjhmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxuQEAgLTc3LDYgKzc4LDE0IEBAXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXHRcdFx0QklUKDI4KVxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXHRcdEJJVCgyOSlcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuK1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXG5AQCAtMTQzLDcgKzE1Miw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuIH07XG4gXG5AQCAtMTU5LDYgKzE2OCwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4rXG4rXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4rXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbitcdGF0b21pY190IGZyZWVfcGdfbG93O1xuK1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4rXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbmluZGV4IGVmY2Y0NTQzMzk5OWFmLi43M2YyYWY2NmVmZmU4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2VjLmhcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2RlZmluZSBSVFdfU0VDX1JYX0RFQ19FTlx0XHRCSVQoMylcbiAjZGVmaW5lIFJUV19TRUNfVFhfQkNfVVNFX0RLXHRcdEJJVCg2KVxuICNkZWZpbmUgUlRXX1NFQ19SWF9CQ19VU0VfREtcdFx0QklUKDcpXG4rI2RlZmluZSBSVFdfU0VDX0NIS19LRVlJRFx0XHRCSVQoOClcbiBcbiAjZGVmaW5lIFJUV19TRUNfRU5HSU5FX0VOXHRcdEJJVCg5KVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MzI6NDYuNDg1MjE1Mjc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzNjg4MTYzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggU2VyaWVzIEV2YWx1YXRpb246IFJlYWx0ZWsgUlRMODcyM0JTIFNESU8gRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMsIGZvY3VzaW5nIG9uIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkvQlQgY29leGlzdGVuY2UsIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiU0RJTy4uLiB0aGF0J3MgYSBwcm9ibGVtLlwiICBUaGlzIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2AsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgY29leC5jYCwgYGZ3LmNgLCBgbWFjODAyMTEuY2AsIGBtYWluLmNgLCBgcnguY2AsIGFuZCwgY3J1Y2lhbGx5LCBgc2Rpby5jYC4gIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgYW4gU0RJTyBkcml2ZXIsIGFuZCBtZW50aW9ucyB0aGUgODcyM0JTIFNESU8gaGFyZHdhcmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgZXZlbiAqcnVucyogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoaXMgZHJpdmVyLCBgcnR3ODhgLCBpcyBhIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLCBhbmQgdGhlIGNoYW5nZXMgdG8gYHNkaW8uY2AgaW1tZWRpYXRlbHkgc3VnZ2VzdCBhbiBTRElPIGludGVyZmFjZSBpcyBpbnZvbHZlZC4gVGhlIGlzc3VlIGlzIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGhhdmUgYSBnb29kLCBnZW5lcmljIFNESU8gZW11bGF0b3IgdGhhdCBzeXprYWxsZXIgY2FuIHVzZS4gIFN5emthbGxlciBkb2VzIGEgZ3JlYXQgam9iIHdpdGggUENJIGFuZCBVU0IsIHZpYSBgZHVtbXlfaGNkYCBhbmQgYHJhdy1nYWRnZXRgLCBidXQgdGhlIFNESU8gaW50ZXJmYWNlIGhhcyBub3QgYmVlbiBwcmlvcml0aXplZC5cblxuRG9lcyBzeXprYWxsZXIgZnV6eiBTRElPPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBObywgU0RJTyBpc24ndCBkaXJlY3RseSBzdXBwb3J0ZWQuICBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHNvbWVob3cgcmVhY2hhYmxlIHZpYSBgbWFjODAyMTFgLiBUaGUgZHJpdmVyICpyZWdpc3RlcnMqIHdpdGggbWFjODAyMTEsIGJ1dCB0byBnZXQgdG8gdGhlIGRyaXZlci1zcGVjaWZpYyBjb2RlLCB5b3UgbmVlZCB0aGUgYWN0dWFsIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQgYW5kIHByb2JlZC4gSWYgbm8gaGFyZHdhcmUsIG5vIHByb2JlLCBubyBkcml2ZXIgY2FsbGJhY2tzLlxuXG5DYW4gdGhlcmUgYmUgYW55IGVtdWxhdGlvbiBmb3IgU0RJTyBkZXZpY2VzPyBMZXQncyBjaGVjay4gU3RhbmRhcmQgUUVNVSwgYXMgc3l6a2FsbGVyIHVzZXMgaXQsIGRvZXNuJ3QgaGF2ZSBhIHdheSB0byBlbXVsYXRlIFNESU8uIFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgKHZpYSBkdW1teV9oY2QvcmF3LWdhZGdldCkgYW5kIFBDSSAodmlhIHNvbWUgYmFzaWMgUENJIGZ1enppbmcgb3IganVzdCBwcm9iaW5nIGlmIFFFTVUgaGFzIHRoZSBkZXZpY2UpLiBCdXQgU0RJTyBpcyBub3Qgc3VwcG9ydGVkLlxuXG5MZXQncyBkbyBhIGtlcm5lbCBzZWFyY2ggZm9yIGBydHc4OGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBpbnRlcmZhY2VzLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgLiBPa2F5LCBsZXQgbWUgY29uZmlybSBpZiBgcnR3ODhgIGhhcyBQQ0kgb3IgVVNCIGludGVyZmFjZXMuIFllcywgaXQgZG9lcyBzdXBwb3J0IFBDSSwgVVNCLCBhbmQgU0RJTy4gVGhlIG5ldyBjb2RlIGhlYXZpbHkgcmVsaWVzIG9uIGBydHdfaXNfODcyM2JzKHJ0d2RldilgLiBUaGlzIGNoZWNrcyB0aGUgYHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkYCBhbmQgYHJ0d2Rldi1cdTAwM2VoY2kudHlwZWAgdG8gYmUgYFJUV19DSElQX1RZUEVfODcyM0JgIGFuZCBgUlRXX0hDSV9UWVBFX1NESU9gLiAgSW4gc2hvcnQsIHRoaXMgaXMgU0RJTy1zcGVjaWZpYyBjb2RlLlxuXG5Tbywgc2luY2UgYHJ0d19pc184NzIzYnNgIGRlbWFuZHMgYFJUV19IQ0lfVFlQRV9TRElPYCwgdGhlIHNwZWNpZmljIGNoYW5nZXMgYXJlIG9ubHkgcmVsZXZhbnQgaWYgYW4gU0RJTyBkZXZpY2UgaXMgYWN0dWFsbHkgKnByb2JlZCouXG5cbkNhbiB3ZSBkbyB0aGF0IGluIHN5emthbGxlcj8gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBTRElPIGVtdWxhdGlvbi4gSSBuZWVkIHRvIGJlIGV4cGxpY2l0OiB0aGUgY29kZSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzYCAqaXMgdW5yZWFjaGFibGUqIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnQuXG5cbkJ1dCwgYXJlIHRoZXJlIGFueSBjaGFuZ2VzIHRoYXQgYXJlICpub3QqIGd1YXJkZWQgYnkgdGhpcyBzcGVjaWZpYyBjaGVjaz8gTGV0J3MgYW5hbHl6ZSBgY29leC5jYCwgYGZ3LmNgLCBgbWFjODAyMTEuY2AsIGByeC5jYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiBhbnkgY2hhbmdlcyBhcmUgdHJpZ2dlcmVkIGZvciBvdGhlciBoYXJkd2FyZSBpbnRlcmZhY2VzLlxuXG5gY29leC5jYCdzIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gdGhlIEJUIGNvZXggYW5kIHNjYW47IGFsbCBhcmUgZGVwZW5kZW50IG9uIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbmBmdy5jYCBoYXMgYSBuZXcgZnVuY3Rpb24sIGBydHdfZndfc2V0X2dudF9idGAuICBUaGF0J3MgODcyM2JzLXNwZWNpZmljLiBUaGVyZSBpcyBhIGNoYW5nZSBpbiAgYHJ0d19md193cml0ZV9kYXRhX3JzdmRfcGFnZWAgd2hpY2gganVzdCBhZGRzIGBpc184NzIzYnNfc2Rpb2AgdG8gdGhlIG9yIGNvbmRpdGlvbi5cblxuYG1hYzgwMjExLmNgIGhhcyBzb21lIGNoYW5nZXM6IFRoZSBgYXV0aF9zeW5jX3J4YCBjb2RlIGhhcyBsb2dpYyB0aGF0IGF2b2lkcyBydW5uaW5nIG9uIHRoZSBTRElPIGhhcmR3YXJlLiBFdmVyeXRoaW5nIGVsc2UgaXMgZ3VhcmRlZCBieSB0aGlzLlxuXG5gcnguY2AgIGluY2x1ZGVzIHRoZSBzYW1lIGNvZGUgb24gODcwM0IgaGFyZHdhcmUsIGJ1dCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGNvbmRpdGlvbmVkIGJ5IHRoaXMgbmV3IGhhcmR3YXJlLlxuXG5UaGUgU0RJTyBkcml2ZXIgaXRzZWxmLCBgc2Rpby5jYCwgd29uJ3QgYmUgdHJpZ2dlcmVkLlxuXG5UaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgY29uZmluZWQgdG8gYHNkaW8uY2Agb3IgZ2F0ZWQgYnkgdGhlIFNESU8gZGV2aWNlIGNoZWNrLCB3aGljaCByZXF1aXJlcyBhblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0ODgsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjMzOjA4Ljg1NDAzMzkxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIFdpRmkvQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIGFuZCBtb2RpZmllcyBTRElPLXNwZWNpZmljIFRYL1JYIGhhbmRsaW5nLiBBbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgY29uZmluZWQgdG8gdGhlIFNESU8gaW50ZXJmYWNlIChzZGlvLmMpIG9yIGV4cGxpY2l0bHkgZ3VhcmRlZCBieSBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggY2hlY2tzIGZvciBgUlRXX0hDSV9UWVBFX1NESU9gLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSkgdXNlZCBieSBzeXprYWxsZXIgZG8gbm90IGVtdWxhdGUgcGh5c2ljYWwgU0RJTyBXaUZpIGNhcmRzLCB0aGlzIGRyaXZlciB3aWxsIG5vdCBwcm9iZSBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2guXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgUlRMODcyM0JTIFNESU8gV2lGaS9CbHVldG9vdGggY29leGlzdGVuY2UgYW5kIG1vZGlmaWVzIFNESU8tc3BlY2lmaWMgVFgvUlggaGFuZGxpbmcuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBjb25maW5lZCB0byB0aGUgU0RJTyBpbnRlcmZhY2UgKHNkaW8uYykgb3IgZXhwbGljaXRseSBndWFyZGVkIGJ5IGBydHdfaXNfODcyM2JzKHJ0d2RldilgLCB3aGljaCBjaGVja3MgZm9yIGBSVFdfSENJX1RZUEVfU0RJT2AuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSB1c2VkIGJ5IHN5emthbGxlciBkbyBub3QgZW11bGF0ZSBwaHlzaWNhbCBTRElPIFdpRmkgY2FyZHMsIHRoaXMgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl7q9v[1] Phase: Running StartedAt: 2026-07-26 17:34:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7q9v[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-26 17:34:24 +0000 UTC FinishedAt: 2026-07-26 17:34:29 +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,}